AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XINE unter FPC

Ein Thema von mimi · begonnen am 10. Mär 2008 · letzter Beitrag vom 25. Mär 2008
Antwort Antwort
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
mimi

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

Re: XINE unter FPC

  Alt 17. Mär 2008, 12:10
So das Problem besteht immer noch. Ich weiß einfach keine Lösung.

Ich vermute immer noch das es an der TXID Liegt die muss wohl falsch sein.

Ein Handle reicht so wie es aussieht nicht.

Evlt. kann mir ja jemand sagen wie die Funktion:
QWidget_winID
an die XID ran kommt. Weil ich habe nix mit Google Gefunden was mir weiter hilft
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

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

Re: XINE unter FPC

  Alt 18. Mär 2008, 11:17
könnte ein Mod evlt. den Titel ändern ? und zwar in:
XINE mit FPC, Probleme mit TXID...

Danke !
Ich glaube der Titel dürfte etwas aussage Kräftiger im nachhinein sein, oder ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

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

Re: XINE unter FPC

  Alt 20. Mär 2008, 15:39
Ich weiß es sind erst zwei Tage her, aber ich möchte das Problem halt gelöst haben *G*....

Es muss doch eine Möglichkeit geben ein Panel mit XINE zu verbinden. Übers handle leider nicht !
Also muss es anders gehen. Aber kein Soruce den ich mir angeschaut habe konnte mir diese Frage klären.

Ich kann auch nicht so gut C bzw C++ Aber die Funktionen heißen ja alle gleich nur halt eine andere Syntax.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

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

Re: XINE unter FPC

  Alt 25. Mär 2008, 13:58
Ich bin mittlerweile so weit das ich ein Video schon ansehen kann.
Allerdings hängt sich mein System nach einer bestimmten anzahl von Videos komplett auf.

Warum das so ist weiß ich nicht. Es liegt auch nicht an den Videos sondern an was anders.

Irgendwas gebe ich nicht frei. Ich habe mir jetzt beispiele angeschaut von Projekten die XINE nutzen, konnte aber kein Hinweis finden warum das bei mir der Fehler kommt.

Es kommt keine Fehler Meldung oder so.
Nachforschungen haben ergeben das er aus dieser Funktion nicht mehr rauß kommt:
xine_play(myXStream.GetStream,0,0);

Das ist eine Funktion aus XINE. Da kann ich leider nicht rein schauen. Außer ich suche mir die stelle im XINE-Soruce Code rauß. Aber ob das weiter helfen würde weiß ich nicht.

Da XINE auf mein Rechner ja läuft in anderen Programmen Problemlos. Nur in meinem Programm läuft es nicht.

Ich habe mit Goolge gesucht aber da geht es nur darum wie XINE in z.b. XMMS verwendet werden kann.
Es geht dabei leider nicht um die Programmierung. Also die direkte Nutzung der XINE-LIB.

Wenn mir jemand ein Stichwort sagen könnte, währe das sehr hilfreich.
Ausprobiert habe ich folgende schon.
XINE FPC
XINE Lazarus
XINE LCL
XINE Delhpi
XINE C
XINE Cpp
Programmieren mit XINE-LIB

aber leider nix passendes gefunden.

Ich nutzte Linux, Ubuntu.

Bald es soll XINE auch für Windows geben. Dann währe es auch für Delphi Interessant !

Weil es im gegensatzt zu FMOD und Bass auch VIDEOS/DVD/TV abspielen kann und auch so gut wie alle Audio Formate ! und es steht unter GPL soviel wie ich weiß !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

Re: XINE unter FPC

  Alt 25. Mär 2008, 14:07
hat deine Xinelib überhaupt einen XV Treiber.
Versuch mal Softdevice Treiber der geht immer.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
mimi

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

Re: XINE unter FPC

  Alt 25. Mär 2008, 14:37
ja XV hat er. Die Videos werden ja auch angezeigt und abgespielt nur halt ap einer bestimmten anzahl nicht mehr.
Also sagen wir ich Öffen 4 Videos hintereinander wird sich mit Sicherheit beim 5 das System Aufhängen.

SDL geht überhaupt nicht. Da kommen Fehler Meldungen, Bei aa sehe ich nix, OPENGL läuft bei mir nicht, daher brauche ich es damit nicht zu versuchen.

Zitat:
Versuch mal Softdevice Treiber der geht immer.
Meinst du damit XV ?
Delphi-Quellcode:
const
// Die stehen mir zur Auswahl, ich habe alle ausprobiert. nur XV geht einigermaßen bis halt auf diesen Fehler
// ich vermute ich gebe irgendwas nicht frei. Ein Intern Buffer von XINE oder ein Thread oder sowas.
  vidNames : array[0..8] of PChar = ( 'none', 'dxr3', 'xv', 'xshm', 'aa',
            'vidix', 'fb', 'sdl', 'auto' );

     vo_driver := xine_open_video_driver(Xine,'xv',
                  XINE_VISUAL_TYPE_X11, @xvt);
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

Re: XINE unter FPC

  Alt 25. Mär 2008, 20:08
fb ist Framebuffer das sollte eigentlich immer Funktionieren
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
mimi

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

Re: XINE unter FPC

  Alt 25. Mär 2008, 21:59
Bei fb kommt beim Installisieren eine Fehler Meldung.
Ich habe wie gesagt alle ausprobiert, nur xv geht einiger maßen. Ich habe einige neue hinweise aus de xineplayer.cpp Datei ausprobiert. Damit geht das schon recht gut, allerdings hängt sich das Programm immer noch auf, aber ich kann es noch normal beenden.

Ich bin also auf den richtigen weg:
Delphi-Quellcode:
procedure TxineEngine.Re;
begin
  myXStream.SetStream(myXine, myAudPlug.AoDriver, myVidPlug.VoDriver);
  queue := xine_event_new_queue (myXStream.GetStream);
  xine_event_create_listener_thread (queue, @XineEventCB, @UserData);
end;
das führe ich jetzt immer vor jedem XINE_OPen aus,

Nach XINE_Open kommt das hier:
Delphi-Quellcode:
  xine_open(myXStream.GetStream,PChar(filename));

  xine_gui_send_vo_data(myXStream.GetStream, XINE_GUI_SEND_VIDEOWIN_VISIBLE, Pointer(1));

// Das waren die hinweise die ich in der xineplayer.cpp gefunden habe.
// movie_saturation habe ich als const defniert. Die werte stammen auch aus der xineplayer.cpp

  xine_set_param (myXStream.GetStream, XINE_PARAM_VO_SATURATION, movie_saturation);
  xine_set_param (myXStream.GetStream, XINE_PARAM_VO_BRIGHTNESS, movie_brightness);
  xine_set_param (myXStream.GetStream, XINE_PARAM_VO_CONTRAST, movie_contrast);
  xine_set_param (myXStream.GetStream, XINE_PARAM_VO_HUE, movie_hue);
Allerdings geht es immer noch nicht richtig. Irgendwas muss ich übersehen.

Ich hänge mal für euch alle Dateien ran die ich habe. Evlt. findet ihr die Fehler.
Das Projekt ist nur für Lazarus und läuft auch nur auf Linux.
Das Test Projekt nutzt Komponenten die ich geschrieben habe, die ich aber noch nicht frei geben möchte.
Es sind einfache Datei Verwaltung Komponenten. Die mir in Lazarus gefählt haben.

ihr solltet neuXinePL.lpk zuerst installieren.

Ich hoffe ihr habt wegen der libc keine Probleme das hat bei mir am Anfang Probleme gemacht.

Es währe toll wenn sich das jemand von euch mal anschauen könntet und evlt. auch den Fehler findet und natürlich eine Lösung.

wie schon gesagt: DAS PROJEKT IST NUR FÜR LINUX weil es die XINE-LIb nur für Linux gibt im Moment.
Und somit läuft das Projekt auch nur unter Lazarus. ab Welche Version weiß ich leider nicht.

Das Projekt ist auch erstmal nur ein Test Projekt.
kann sein das ihr die Beispiel Projekt nicht kompilieren könnt ! aber ihr könnt es als Vorlage nutzen um ein eigens zu erstellen.

Im Wesenlichen müsst ihr nach dem Installieren ein neuen Register finden mit den namen Pluto.
Alle Komponenten die da drin sind, solltet ihr auf das From plazieren. und die XINEEngine1 Komponente sollte ihr mit den drei anderen verbinden.

Dieser code reicht dann zum abspielen:
Delphi-Quellcode:
procedure TForm1.PLFileListBox1DblClick(Sender: TObject);
var
  str:String;
begin
  str:=PLFileListBox1.CurrDir + PLFileListBox1.Items[PLFileListBox1.ItemIndex];

  if (Assigned(xineEngine1)) and (xineEngine1.init) then begin
  // Hat anscheind keine Auswirkung auf den Fehler. Egal in welche Reinfolge oder was davon Aktiv ist.
   xineEngine1.Stop;
   // xineEngine1.Close;
  end
  else // Einmal muss die Engine Installisiert werden dabei wird init auf True gestellt
    xineEngine1.Initialize;

  xineEngine1.Re;
  xineEngine1.Open(PChar(str));

  xineEngine1.Play;
end;
PLFileListBox1 ist jetzt meine Komponente die nicht dabei ist. Str ist also der Datei namen.
Das ist dann euch überlassen wie ihr das defniert. Der code dient auch nur als Muster.

Viel Spaß beim Rumspielen.

PS:
Ich möchte nochmal darauf hinweise das, dieses Projekt eigentlich von Kylix kommt. Und ich es nur angepasst habe für Lazarus,
Angehängte Dateien
Dateityp: zip plxine_102.zip (89,9 KB, 4x aufgerufen)
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz