Laz_mpv
Laz_mpv
Hallo Lazarusgemeinde
Ich wollte mal fragen ob es möglich ist für ein C projekt die header Datein nach FPC/Lazarus zu transformieren.
Ja ich habe mich ein wenig in das Thema eingelesen und auch in Lazarus selbst gibt es ja ein Package dafür, was C Dateien nach pas umwandelt.
Leider liest man immer das das nicht immer 100% umgewandelt werden kann und vieles manuell vorher/nachher noch umbegaubt werden muss.
Daher hatte ich auch kein Erfog mit dem konvertieren.
Aber ich würde das eigentlich auch lieber gerne mauell machen wollen, da ich so gleich noch bissl C lernen kann.
Also die eigentlich Frage ob man das alles nach Lazarus portieren kann ist die, ob es überhaupt geht, von den Schnittstellen her, verwendete include-Dateien in den Headern, usw...?
mpv hat sich in den letzten Monaten sehr stark entwickelt, ist auf sehr vielen OS's verfügbar und hat eine umfangreiche Doku.
Im Dateianhang ist das Dev-Packet ohne die dll.
Gruß
hubble
Ich wollte mal fragen ob es möglich ist für ein C projekt die header Datein nach FPC/Lazarus zu transformieren.
Ja ich habe mich ein wenig in das Thema eingelesen und auch in Lazarus selbst gibt es ja ein Package dafür, was C Dateien nach pas umwandelt.
Leider liest man immer das das nicht immer 100% umgewandelt werden kann und vieles manuell vorher/nachher noch umbegaubt werden muss.
Daher hatte ich auch kein Erfog mit dem konvertieren.
Aber ich würde das eigentlich auch lieber gerne mauell machen wollen, da ich so gleich noch bissl C lernen kann.
Also die eigentlich Frage ob man das alles nach Lazarus portieren kann ist die, ob es überhaupt geht, von den Schnittstellen her, verwendete include-Dateien in den Headern, usw...?
mpv hat sich in den letzten Monaten sehr stark entwickelt, ist auf sehr vielen OS's verfügbar und hat eine umfangreiche Doku.
Im Dateianhang ist das Dev-Packet ohne die dll.
Gruß
hubble
- Dateianhänge
-
mpv-dev.7z- (49.06 KiB) 189-mal heruntergeladen
-
pluto
- Lazarusforum e. V.
- Beiträge: 7194
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Laz_mpv
Dir geht es doch um sowas hier, oder?Ich wollte mal fragen ob es möglich ist für ein C projekt die header Datein nach FPC/Lazarus zu transformieren.
https://wiki.ubuntuusers.de/mpv/
Edit2:
vielleicht wäre das mPlayer-Control was?
http://wiki.freepascal.org/TMPlayerControl
EDIT: Beitrag geändert auf Grund einer Fehle Einschätzung.
Zuletzt geändert von pluto am So 28. Apr 2019, 22:53, insgesamt 3-mal geändert.
MFG
Michael Springwald
Michael Springwald
-
creed steiger
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Laz_mpv
ohne Worte ........Ich würde erst mal schauen, ob es Alternativen gibt, z.b. die VLC-Lib kann sehr viele Formate abspielen, ich denke da sollte auch mpv drunter sein.
aber zur Sache ... mit der Frage bist du im englischen Forum besser aufgehoben .. grad mit c Konvertierung spezifischen Sachen
-
pluto
- Lazarusforum e. V.
- Beiträge: 7194
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Laz_mpv
Ich kann noch diese wiki Seite empfehlen:
http://wiki.freepascal.org/Pascal_for_C_users
und natürlich die bekannten Tools: Wie h2pas
habe noch eben diese Wiki Seite gefunden:
http://wiki.freepascal.org/Creating_bin ... _libraries
Es dürfte aber auch mit tools nicht einfach werden...
edit:
ups, ich dachte mpv wäre ein Dateiformat *G*, damit lage ich wohl daneben....
edit2: habe mein ersten Beitrag überarbeitet.
http://wiki.freepascal.org/Pascal_for_C_users
und natürlich die bekannten Tools: Wie h2pas
habe noch eben diese Wiki Seite gefunden:
http://wiki.freepascal.org/Creating_bin ... _libraries
Es dürfte aber auch mit tools nicht einfach werden...
edit:
ups, ich dachte mpv wäre ein Dateiformat *G*, damit lage ich wohl daneben....
edit2: habe mein ersten Beitrag überarbeitet.
MFG
Michael Springwald
Michael Springwald
-
pluto
- Lazarusforum e. V.
- Beiträge: 7194
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Laz_mpv
wenn ich versuche die client.h mit h2pas zu konvertieren bekomme ich bei Zeile 777 diese Fehler Meldung:
Ob die Pascal Datei auch läuft weiß ich nicht.
Die Zeile sieht so aus:at line 777 error : syntax error
An unhandled exception occurred at $00000000004047D4:
EAccessViolation: Access violation
$00000000004047D4
Edit: Wenn ich die besagte Zeile raus nehme und die nächste auch, klappt das mit den Konvertieren und die stelle in Pascal sieht so aus:typedef struct mpv_node {
union {
char *string; /** valid if format==MPV_FORMAT_STRING */
int flag; /** valid if format==MPV_FORMAT_FLAG */
int64_t int64; /** valid if format==MPV_FORMAT_INT64 */ // Hier kommt die Fehler Meldung.
double double_; /** valid if format==MPV_FORMAT_DOUBLE */
/**
* valid if format==MPV_FORMAT_NODE_ARRAY
* or if format==MPV_FORMAT_NODE_MAP
*/
struct mpv_node_list *list;
/**
* valid if format==MPV_FORMAT_BYTE_ARRAY
*/
struct mpv_byte_array *ba;
} u;
/**
* Type of the data stored in this struct. This value rules what members in
* the given union can be accessed. The following formats are currently
* defined to be allowed in mpv_node:
*
* MPV_FORMAT_STRING (u.string)
* MPV_FORMAT_FLAG (u.flag)
* MPV_FORMAT_INT64 (u.int64)
* MPV_FORMAT_DOUBLE (u.double_)
* MPV_FORMAT_NODE_ARRAY (u.list)
* MPV_FORMAT_NODE_MAP (u.list)
* MPV_FORMAT_BYTE_ARRAY (u.ba)
* MPV_FORMAT_NONE (no member)
*
* If you encounter a value you don't know, you must not make any
* assumptions about the contents of union u.
*/
mpv_format format;
} mpv_node;
Code: Alles auswählen
mpv_node = record
u : record
case longint of
0 : ( _string : ^char );
1 : ( flag : longint );
2 : ( list : ^mpv_node_list );
3 : ( ba : ^mpv_byte_array );
end;
format : mpv_format;
end;
- Dateianhänge
-
- client.pp
- (89.14 KiB) 200-mal heruntergeladen
MFG
Michael Springwald
Michael Springwald
Re: Laz_mpv
Hi pluto
Bin erst jetzt zum lesen gekommen. Sorry ich hatte vergessen in der Eile ein paar Links zu setzen. Aber ich lese du weist nun was mit mpv gemeint ist.
Mir geht es eigentlich nicht wirklich darum einen Player zu schreiben, davon gibt es ja nun bereits sooo viele. Viele können die Basis Matroska Sachen verarbeiten, und dann ist auf viele Player und Splitter all die tollen Matroska Sachen verteilt.
Da mpv bereits ein Player ist (ja ich weis, ist auch so wie bei VLC und das interne LazVLC) würde ich viellicht dochmal einen Matroska Player schreiben.
Das mpv.net Project sieht ja nun nicht so riesig aus.
https://github.com/stax76/mpv.net
Danke auch das du schon mal eine Konvertierung vorgenommen hast. Muss ich mir erst noch anschauen.
EDIT:
Da sind noch die include Einträge zu den .h Dteien drin
{$include <stddef.h>}
{$include <stdint.h>}
Denke mal das stört sicher, aber dann müsste man diese ja auch erst konvertieren und vorallem erstmal haben oder?
Bin erst jetzt zum lesen gekommen. Sorry ich hatte vergessen in der Eile ein paar Links zu setzen. Aber ich lese du weist nun was mit mpv gemeint ist.
Mir geht es eigentlich nicht wirklich darum einen Player zu schreiben, davon gibt es ja nun bereits sooo viele. Viele können die Basis Matroska Sachen verarbeiten, und dann ist auf viele Player und Splitter all die tollen Matroska Sachen verteilt.
Da mpv bereits ein Player ist (ja ich weis, ist auch so wie bei VLC und das interne LazVLC) würde ich viellicht dochmal einen Matroska Player schreiben.
Das mpv.net Project sieht ja nun nicht so riesig aus.
https://github.com/stax76/mpv.net
Danke auch das du schon mal eine Konvertierung vorgenommen hast. Muss ich mir erst noch anschauen.
EDIT:
Da sind noch die include Einträge zu den .h Dteien drin
{$include <stddef.h>}
{$include <stdint.h>}
Denke mal das stört sicher, aber dann müsste man diese ja auch erst konvertieren und vorallem erstmal haben oder?
-
pluto
- Lazarusforum e. V.
- Beiträge: 7194
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Laz_mpv
ich denke nicht, da es mit Sicherheit alternativen gibt. nehme die einfach mal raus und schau wo FPC meckert. Diese Funktionen kannst du dann im FPC-SRC suchen.Denke mal das stört sicher, aber dann müsste man diese ja auch erst konvertieren und vorallem erstmal haben oder?
MFG
Michael Springwald
Michael Springwald
Re: Laz_mpv
Hallo, nach so langer Zeit
Leider war es mir nicht möglich das selbst umzuwandeln.
Aber ich habe auf GitHub ein Projekt gefunden was dies alles vorbereitet hat.
https://github.com/nbuyer/LibMPVDelphi
Das LazarusDemo funktioniert hervorragend und ich habe dann begonnen ein paar Funktionen einzubauen.
Dabei ist gleich am Anfang das Thema FullScreen aufgetaucht.
Mit FullScreen meine ich das ein VideoPlayer keine Titelbar, kein MainMenu und auch keine Ränder mehr anzeigt.
FullScreen ist nicht gleich wsMaximized. Im maximierten Zustand ist immer noch die Form Titelbar zu sehen.
Das Problem:
Sobald eine mpvPlayer Instanz erzeugt wurde, und man möchte in den FullScreen wecheln (oder zurück), ändere ich dafür den BorderStyle der Form.
bsNone <-> bsSizeable
Aber dabei wird die komplette Form neu erstellt und das Panel.Handel was vorher zu der mpvPlayer Instanz gehörte gibt es nicht mehr, und die GUI "friert" ein.
Ich hatte versucht bei mpv.net im Code eine Lösung zu finden,aber ohne Erfolg.
Wie macht das mpv.net(oder und andere Player), das der Player im normal Modus mit Rand und Titelbar versehen ist, und im FullScreen nichts mehr zu sehen ist.
Ich hatte dazu ChatGPT befragt und es meinte, dass dies alles tiefstes Windows abhängiges Zeugs ist, Was .Net halt eben von Haus aus kann.
Was wäre der Richtige Ansatz für einen Player, gecoded mit Lazarus?
Dabei soll der Player mindestens auch auf Linux laufen.
Gibt es eine bessere Technik eine Form im FullScreen ränderlos und Titelbarlos zu machen, als mit dem ändern des BorderStyle FLags?
Ich habe da auch schon ein Ticket erstellt und hoffe das der Entwickler eine Lösung kennt.
https://github.com/nbuyer/LibMPVDelphi/issues/7
Aber ich vermute das Problem ist nicht wirklich mpv: Geht bestimmt eher in Richtung OS oder so, leider habe ich da zu wenig Erfahrung.
EDIT:
Habe doch eine Lösung gefunden
Leider war es mir nicht möglich das selbst umzuwandeln.
Aber ich habe auf GitHub ein Projekt gefunden was dies alles vorbereitet hat.
https://github.com/nbuyer/LibMPVDelphi
Das LazarusDemo funktioniert hervorragend und ich habe dann begonnen ein paar Funktionen einzubauen.
Dabei ist gleich am Anfang das Thema FullScreen aufgetaucht.
Mit FullScreen meine ich das ein VideoPlayer keine Titelbar, kein MainMenu und auch keine Ränder mehr anzeigt.
FullScreen ist nicht gleich wsMaximized. Im maximierten Zustand ist immer noch die Form Titelbar zu sehen.
Das Problem:
Sobald eine mpvPlayer Instanz erzeugt wurde, und man möchte in den FullScreen wecheln (oder zurück), ändere ich dafür den BorderStyle der Form.
bsNone <-> bsSizeable
Aber dabei wird die komplette Form neu erstellt und das Panel.Handel was vorher zu der mpvPlayer Instanz gehörte gibt es nicht mehr, und die GUI "friert" ein.
Ich hatte versucht bei mpv.net im Code eine Lösung zu finden,aber ohne Erfolg.
Wie macht das mpv.net(oder und andere Player), das der Player im normal Modus mit Rand und Titelbar versehen ist, und im FullScreen nichts mehr zu sehen ist.
Ich hatte dazu ChatGPT befragt und es meinte, dass dies alles tiefstes Windows abhängiges Zeugs ist, Was .Net halt eben von Haus aus kann.
Was wäre der Richtige Ansatz für einen Player, gecoded mit Lazarus?
Dabei soll der Player mindestens auch auf Linux laufen.
Gibt es eine bessere Technik eine Form im FullScreen ränderlos und Titelbarlos zu machen, als mit dem ändern des BorderStyle FLags?
Ich habe da auch schon ein Ticket erstellt und hoffe das der Entwickler eine Lösung kennt.
https://github.com/nbuyer/LibMPVDelphi/issues/7
Aber ich vermute das Problem ist nicht wirklich mpv: Geht bestimmt eher in Richtung OS oder so, leider habe ich da zu wenig Erfahrung.
EDIT:
Habe doch eine Lösung gefunden
Code: Alles auswählen
procedure TFrm_Main.Set_Fullscreen(GoFullscreen: Boolean);
begin
{$IFDEF MSWINDOWS}
// Windows-Weg: Wir ändern nur den Stil, das Handle bleibt 100% stabil
if GoFullscreen then
begin
// Rahmen weg über API
SetWindowLong(Self.Handle, GWL_STYLE, GetWindowLong(Self.Handle, GWL_STYLE)
and not WS_CAPTION and not WS_THICKFRAME);
Self.WindowState := wsMaximized;
end
else
begin
// Rahmen wieder da
SetWindowLong(Self.Handle, GWL_STYLE,
GetWindowLong(Self.Handle, GWL_STYLE) or WS_CAPTION or WS_THICKFRAME);
//Self.BorderStyle := bsSizeable; // LCL-Synchronisation
Self.WindowState := wsNormal;
end;
{$ENDIF}
{$IFDEF LINUX}
// Linux-Weg: Panel kurz "parken", da LCL hier das Form-Handle killt
Panel1.DisableAlign;
Panel1.Parent := nil;
if GoFullscreen then
begin
Self.BorderStyle := bsNone;
Self.WindowState := wsMaximized;
end
else
begin
Self.BorderStyle := bsSizeable;
Self.WindowState := wsNormal;
end;
Panel1.Parent := Self;
Panel1.Align := alClient;
Panel1.EnableAlign;
{$ENDIF}
end;