Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

XINE unter FPC

  Alt 10. Mär 2008, 12:02
Hallo,
ich kann inzwischen unter Lazarus auf die XINE Lib zugreifen. Aber leider nur mit Audio Dateien, auf Filme geht noch nicht. Ich glaube es liegt daran das ich keine passende TXID habe.

Hier ist mein Angepasster Soruce:
Delphi-Quellcode:
procedure TxineVideoPlugin.Initialize(Xine: Pxine_t; UsrDta: Pointer );
var
    xid: TWindow;
    GdkWindow: PGdkWindow;
    CurXWindow: TWindow;
    Widget: PGtkWidget;
    ColorMap: TColormap;
    WinAttr: TXSetWindowAttributes;
    XVInfo: PXVisualInfo;
begin
     if (myWidget <> NIL) then begin
         xid:=THANDLE(myWidget.Handle);
         writeln(PGtkWidget(xid)^.name);
// gtk_widget_show(PGtkWidget(myWidget.handle));
     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;
//vidNames[ord(myVideoDriver)]
// XMapRaised(display, xid);
  // XSync(display, False);

     vo_driver := xine_open_video_driver(Xine,'xv',
       XINE_VISUAL_TYPE_X11, @xvt);

// vo_driver := xine_open_video_driver(Xine,'xv',
  // XINE_VISUAL_TYPE_X11, @xvt);
// xine_se

// xine_framegrab_video_port(xine)
end;
und hier der Orignal aus dem Kylix Projekt:
Delphi-Quellcode:
procedure TxineVideoPlugin.Initialize(Xine: Pxine_t; UsrDta: Pointer );
var
     xid: Window;
begin
     if (myWidget <> NIL) then
     begin
          xid := QWidget_winID(myWidget.Handle);
     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;

     vo_driver := xine_open_video_driver(Xine,vidNames[ord(myVideoDriver)],
       XINE_VISUAL_TYPE_X11, Pointer(@xvt));

end;
Es kommt die Fehler Meldung BadWindwo.

Wenn ich ein Fenster mit XCreateSimpleWindow erzeuge sehe ich ein Video. Aber ich möchte das Video in ein
Panel anzeigen.
myWidge ist von Typ TWinControl

Ich habe die gleiche Frage vor einiger Zeit hier gestellt:
http://www.lazarusforum.de/viewtopic...459&highlight=

Ich hoffe das ihr mir weiter helfen könnt.

Leider gibt es die XINE LIB nur für Linux, aber es wird an einer Passenden Windows Version gearbeitet.

Ich habe ein test Projekt im Lazarus Forum hochgeladen, wenn ihn jemand von euch auch haben möchte lade ich ihn nochmal hier hoch....

Ich habe mir schon einige Linux Player im Soruce Angeschaut die Videos anzeigen können, aber leider brachte das auch nicht viel

Ich habe gesehen das TWindow und TXID das gleiche sind....
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat