XINE mit FPC ?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

XINE mit FPC ?

Beitrag von pluto »

Hallo,
da ich noch kein Fertigs Packet für FPC gefunden habe für xine wollte ich das mal selbst versuchen. Der Grund ist: Mit XINE kann ich laut Dokumenation alle Formate abspielen.
Mit FMOD und ASC geht das nicht.

Ich möchte jetzt mal versuchen XINE für den FPC zu Portieren. Das Problem: Ich bin mir noch nicht sicher wo ich anfangen soll.

Ich möchte aber nur die Header übersetzten, also ich vermute das XINE über DLLS/SO Dateien laufen wird....

Ich habe mir jetzt den XINE Soruce runter geladen: xine-lib-1.1.10.1

und vermute mal das ich nur die Datei xine.h nach Object Pascal umwandeln muss.

Da ich sowas noch nie gemacht habe, wollte ich fragen ob ich mit meiner Vermutung richtig liege. Weil das suchen mit Goole bringt mir nicht viel. Das habe ich schon mehrer Stunden/Tage versucht.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Tja google nimmt einem das denken halt (noch) nicht ab. Zum groben Header übersetzen kannst du h2pas nehmen. Es gibt dazu auch eine schöne Wiki Seite die du sicher aber schon lang gefunden hast...
Aber wenn du noch nicht mal weißt welche bzw ob xine Bibliotheken benutzt seh ich da schwarz.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Das Spielt keine rolle. Ein versuch ist es wert und ich wollte ja erstmal nur wissen ob ich mit meiner Vermutung richtig liege oder nicht.
Danke für den tipp mit h2pas. Wenn es damit leichter geht versuche ich es mal.

Mir geht es ja erstmal darum eine Version zu habe die ich mit dem FPC zum laufen bekomme.

Dann stellt sich natürlich noch die Frage wie ich xine im allgemeinen verwende, aber ich denke da gibt es genügend Beispiele, da müsste ich nur reinschauen.

die Frage ist ja auch ob Xine.h und Xine.h.in die Dateien für die LIB im allgemeinen sind. und ob es reicht diese zu übersetzten.

Wobei ich habe in den Dateien keine Informationen gefunden die andeutet das es sich um eine oder mehrer LIB also dlls oder SO Dateien handelt.

Ich möchte es halt nur mal Versuche. Was sprecht dagegen ? Und wenn es gelingt währe es ein Praktisches und Tolles Addon für FPC... Da ja XINE meine ich auch unter Windows und MAC-OS läuft...

Mal sehen. Ich muss erstmal wissen welche Dateien für die DLL/SO Dateien verantwortliche sind, So viele Dateien sind im Soruce-Code gar nicht vorhanden. Zum Glück.

Wie gesagt ich vermute die Dateien im verzeichnis INCLUDE... sind es.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: XINE mit FPC ?

Beitrag von theo »

pluto hat geschrieben:Weil das suchen mit Goole bringt mir nicht viel. Das habe ich schon mehrer Stunden/Tage versucht.
Also ich weiss ja nicht wie du googelst. ;-)
Bei mir dauert das 30 Sekunden:
http://www.mirrorservice.org/sites/down ... inepascal/" onclick="window.open(this.href);return false;

Ist zwar für Kylix, müsste aber zu schaffen sein.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Vielen Dank theo !
Das habe ich nicht gefunden. Evlt. suche ich falsch. Habe z.b. nach XINE FPC oder Lzarus gesucht aber nur "Müll" gefunden. Sieht aber vielversprechend aus. Werde ich morgen mal testen ob es unter Lazarus läuft.

Soll Lazarus nicht auch Kylix kompatibel sein ?
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Endlich habe ich die xine unter Lazarus zum laufen bekommen !

Bei mir kann ich jetzt XINE nutzen. Ich werde es in den nächsten Tagen hochladen. ABER ES GEHT SCHONAML allerdings ist mir noch nicht ganz klar warum es anfangs in der xine.pas Fehler gab dort hat er Constaten nicht gefunden die aber in der Datei drin waren. Ich habe einfach den Wert direckt geschrieben.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:s ist mir noch nicht ganz klar warum es anfangs in der xine.pas Fehler gab dort hat er Constaten nicht gefunden die aber in der Datei drin waren. Ich habe einfach den Wert direckt geschrieben.
Den da reinschreiben:
{$DEFINE USE_INTERNAL_XINE_DEFINES}

Laufen bei dir die Videos?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

leider noch nicht. Aber der Ton. Ich weiß nicht warum.

Code: Alles auswählen

var
     xid: HDC;
     s:Pchar;
     str:String;
begin
     if (myWidget <> NIL) then
     begin
       xid :=  TCustomControl(myWidget).Handle;
     end
     else
Ich vermute da habe ich ein Fehler eingebaut.
im Orignal sah das so aus:

Code: Alles auswählen

var
     xid: Window;
begin
   if (myWidget <> NIL) then
     begin
          xid := QWidget_winID(myWidget.Handle);
     end
     else
     begin
weißt du da weiter ?
Window kennt Lazarus nicht, nur TWindow. Aber eigentlich brauche ich nur ein HDC...
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

xid := GDK_WINDOW_XWINDOW(PGdkWindowPrivate(PGtkWidget(myWidget.Handle)^.window));
für GTK (uses gtk, gdk)
Aber da gibt's dann noch mehr Probleme.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich musste die zeile etwas ab ändern:
xid := GDK_WINDOW_XWINDOW(PGdkWindowPrivate(PGtkWidget(TWinControl(myWidget).Handle)^.window));
weil handle kannte er nicht, weil myWidget von typ TControll ist.

Aber es geht leider nicht. Es gibt eine AV... und zwar genau an der Zeile !
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

habe zwar die av weg bekommen durch diese zeile:
xid := GDK_WINDOW_XWINDOW(PGdkWindowPrivate(PGtkWidget(TCustomControl(myWidget).Canvas.Handle)^.window));

aber ein bild sehe ich immer noch nicht.
xid hat einen negativen wert. evlt. liegt es jetzt daran.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:weil handle kannte er nicht, weil myWidget von typ TControll
Wie kommst den darauf? TWinControl müsst's schon mindestens sein, sonst hat's kein Handle.
myWidget : TWinControl;

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

geht leider auch nicht. Ich ahbe alles zu TWinControl geändert, Aber jetzt kommt eine AV packe ich ein getDC um mywidget.handdle kommt zwar keine av aber dafür ist der wert negativ.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

so wenn ich xid := XCreateSimpleWindow (Display,
XDefaultRootWindow(Display),
defaultXpos, defaultYpos,
defaultWidth, defaultHeight,
0, clBlack, clBlack);
XMapWindow(Display, xid);
nutze geht es. Allerdings ist das Vidio dann in ein Extrans Fenster.

Beim Panel bin ich noch nicht viel weiter leider.

ich weiß einfach nicht was ich falsch mache. Aber es gibt Hoffnung. Evlt. Schaffe ich es doch noch mal sehen.

Ich habe ein cpp Datei gefunden die sehr hilfreich ist: videobox.cpp.... einfach mal mit google suchen... oder ich hänge sie hier dran.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Es geht immer noch nicht:

Code: Alles auswählen

procedure TxineVideoPlugin.Initialize(Xine: Pxine_t; UsrDta: Pointer );
var
     xid: TWindow;
     s:Pchar;
     str:String;
begin
     if (myWidget <> NIL) then
     begin
       writeln('TEST01');
//         xid:=PGdkWindowPrivate(PGtkWidget(TCustomControl(myWidget).canvas.Handle)^.window)^.xwindow;
//       xid := GDK_WINDOW_XWINDOW(PGdkWindowPrivate(PGtkWidget(TCustomControl(myWidget).canvas.Handle)));
       xid:=myWidget.Handle;
 
       writeln('TEST02:',xid);
     end
     else
     begin
          xid := XCreateSimpleWindow (Display,
			      XDefaultRootWindow(Display),
			      defaultXpos, defaultYpos,
			      defaultWidth, defaultHeight,
			      0, clBlack, clBlack);
          XMapWindow(Display, xid);
 
     end;
 
     UserData := TxineUserData(UsrDta^);
 
     if (XShmQueryExtension (Display) = 1) then begin
          UserData.shmEventId := XShmGetEventBase (Display) + ShmCompletion;
     end
     else  begin
          UserData.shmEventId := -1;
     end;
 
     XSelectInput(Display,xid, ExposureMask or StructureNotifyMask);
 
     // Select Video Plugin
     xvt.display := Display;
     xvt.screen := Screen;
     xvt.d := xid;
     ResH := XDisplayWidth(Display,Screen)*1000
            / XDisplayWidthMM(Display,Screen);
     ResV := XDisplayHeight(Display,Screen)*1000
           / XDisplayHeightMM(Display,Screen);
     DisplayRatio := ResV/ResH;
        DisplayRatio := 1.0;
     if ((Abs(DisplayRatio)-1.0) < 0.01) then
     begin
        DisplayRatio := 1.0;
     end;
     xvt.dest_size_cb := @DestSizeCB;
     xvt.frame_output_cb := @FrameOutputCB;
 
     // Add to user_data record
     UserData.resizeFactor := 1.0;
     UserData.displayRatio := DisplayRatio;
     UserData.Display := Display;
 
     xvt.user_data := @UserData;
     s:=Pchar(vidNames[ord(myVideoDriver)]);
     writeln(s);
 
   writeln('OK01');
   vo_driver := xine_open_video_driver(Xine,s,
                1, @xvt);
   writeln('OK02');
//       writeln(
 
end;
die Fehler Meldung kommt hier:
vo_driver := xine_open_video_driver(Xine,s, 1, @xvt);

und sie lautet:
Gdk-ERROR **: BadWindow (invalid Window parameter)
serial 8 error_code 3 request_code 2 minor_code 0
Ich weiß einfach nicht weiter erstelle ich ein XCreateSimpleWindow Fenster geht es
Dann sehe ich das Fenster. Allerdings gibt es dort das Problem, sobald das Fenster bedekt wird durch ein anders bleibt dieser bereich Schwarz. Warum weiß ich nicht.

Mein Ziel ist es jedoch die Ausgabe auf ein Panel zu sehen und nicht in ein Externes Fenster
Ich komme einfach nicht weiter seit stunden versuche ich das jetzt.

Ich hoffe einer von euch kann mir weiter Helfen.
MFG
Michael Springwald

Antworten