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....