Hi@all
Ich habe konkret vor unter Linux FFMPEG als Bibiliothek für Videos zu verwenden.
Ich möchte in einer QGraphicsScene verschiedene grafische Elemente darstellen ,dass kann zum Beispiel ein transparentes Video mit einem PDF dahinter sein.
Die Gründe die gegen Phonon-Schnittstelle sprechen sind folgende :
Sie ist nicht transparent genug ,dass heißt wenn Fehler auftreten wird eine eventuelle Analyse durch die komplexe Struktur erschwert.
Unter Linux gibt es 2 Backends ,das eine davon also die Xinelib kann das Video nur als Overlay ausgeben ist also ungeeignet für mein Vorhaben.
Das 2. der Gstreamer hat leider Probleme mit dem Scaling und läuft deswegen extrem schlecht.
Als drittes wäre da noch die Möglichkeit der VDPAU-Schnittstelle von Nvidia zu nutzen ,diese entfällt bei Gstreamer und ist bei Xine noch nicht ganz ausgereift ganz im Gegensatz zu FFMpeg.
Wichtig ist also dass ich die Möglichkeit habe Videos auf ein QGraphicsImage zu rendern. Dabei stehe ich vor einem großen Problem.
Um ein Frame auf ein Widget oder ein QGraphicsImage zu rendern muss ich es vorher umwandeln in ein QImage.
Das ist ein eigendlich nicht wirklich ein Problem, das Problem ist ein ganz anderes welches mit der Architektur des X11-Servers zu tun hat.
Der X11-Server basiert nähmlich auf ein Server-Client System das heißt QImages befinden sich auf dem Client-Teil und QPixmap auf dem Server-Teil ,da sich das QImage nun lokal auf dem Client-Teil befindet muss es natürlich zum Server-Teil kopiert werden und das kostet richtig Performance.
Vielleicht hat sich jemand von euch schon mit dem Problem befasst und kennt eine Lösung für ich die Performance in dem Bereich optimieren kann.
Videos mit FFMpeg abspielen / Performance
Mach es doch einfach mit.
XvCreateImage und XvPutImage das ist unter Linux die schnellste Art, die man nutzen kann für die Videoausgabe. Und das sollte mit Qt auch keine probleme gehen.
Zum Beispiel braucht man nur ein
WId QWidget::winId () const
dem man dann XvCreateImage übergeben muss. Nur weiss ich nicht wie das bei Qt ist, hab ja das selbe vor. Hab es mit GTK+ schon mal gemacht. Aber da sollte dann das Doublebuffer für das jeweilige Widget ausgeschaltet werden.
Ach und das Skalieren geht dabei voll automatisch. Das muss man nur XvPutImage die grösse mitteilen, die er darstellen soll.
XvCreateImage und XvPutImage das ist unter Linux die schnellste Art, die man nutzen kann für die Videoausgabe. Und das sollte mit Qt auch keine probleme gehen.
Zum Beispiel braucht man nur ein
WId QWidget::winId () const
dem man dann XvCreateImage übergeben muss. Nur weiss ich nicht wie das bei Qt ist, hab ja das selbe vor. Hab es mit GTK+ schon mal gemacht. Aber da sollte dann das Doublebuffer für das jeweilige Widget ausgeschaltet werden.
Ach und das Skalieren geht dabei voll automatisch. Das muss man nur XvPutImage die grösse mitteilen, die er darstellen soll.