Auf diese art und weise geht es anscheind:
Code: Alles auswählen
procedure TxineVideoPlugin.Initialize(Xine: Pxine_t; UsrDta: Pointer );
var
xid: TWindow;
GdkWindow: PGdkWindow;
CurXWindow: TWindow;
Widget: PGtkWidget;
ColorMap: TColormap;
WinAttr: TXSetWindowAttributes;
XVInfo: PXVisualInfo;
p:PXSetWindowAttributes;
p1:PXWindowAttributes;
fhandle: hwnd;
priv: PGdkWindowPrivate;
xwin: TWindow;
xdisp: PDisplay;
fGtkWidget: PGtkWidget;
begin
if (myWidget <> NIL) then begin
xid:=GDK_WINDOW_XWINDOW(PGdkWindowPrivate(GTK_WIDGET(myWidget.Handle)^.window ) );
XMapWindow(Display, xid);
end
else begin
xid := XCreateSimpleWindow (Display,
XDefaultRootWindow(Display),
defaultXpos, defaultYpos,
defaultWidth, defaultHeight,
0, clBlack, clBlack);
XMapWindow(Display, xid);
// end;
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,'auto',
XINE_VISUAL_TYPE_X11, Pointer(@xvt));
myWidget.Visible:=False;
end;
in From1 muss jetzt nur noch Panel1.Canvas.AutoRedraw:=True;
gemacht werden
und aus irgendeinen Grund muss noch ein Panel auf ein panel gelegt werden und dann muss das ganze mit Panel2 verbunden werden.
Sonst nimmt er das From als Ausgabe.
Also er nimmt den Parent vom Panel.
Aber so wie es jetzt aussieht geht es.
Ganz gut. Ich werde es noch weiter austesten. Und wenn es wirklich geht, werde ich es auch zu Verfügung stellen.
Erstmal vielen Dank für eure Mithilfe.
Ich habe mir überlegt die TMediaPlayer Komponente nach zu schreiben für Linux.
Allerdings gibt es auch ein paar Nachteile. Erstens XINE läuft im Moment nur unter Linux.
Aber auch das soll sich bald ändern.
Und XINE sollte Installiert sein. Aber da ich das mit XINE hinbekommen habe, könnte ich es auch nochmal mit anderen LIBS versuchen. z.b. GStreamer.
Aber ich finde es toll. Wenn ich jetzt noch diesen Seltsamen Fehler weg bekomme bin ich glücklich *G* Aber schon jetzt bin ich zufrieden *G*.