Hallo zusammen,
ich bin seit Jahren begeisterter VDR Nutzer. Da ich meine FF-Karte bei einem versuchten Speichermod zerstört habe, bin ich auf das xineliboutput Plugin umgestiegen. Ich benutze die --hud Option von vdr-sxfe, um ein transparentes OSD zu bekommen. Leider führt das dazu, dass es zusammen mit VDPAU zu Rucklern kommt. Ausserdem muss ein Fenstermanager mit Composing laufen.
Das hat mir alles nicht gefallen und ich habe mit ein paar Programmierexperimenten angefangen. Herausgekommen ist ein Patch, der vdr-sxfe um folgende Funktionen erweitert:
- XShape Unterstützung: Falls kein Fenstermanager mit Composing läuft, kann die Option --hud trotzdem benutzt werden. Das OSD wird dann ohne Transparenz angezeigt. Es ist unabhängig von der Videogröße. Der Vorteil gegenüber der herkömmlichen Methode (Einbetten des OSD in den Videostrom bzw. Nutzen der OSD Funktion der xinelib) ist eine besser Qualität und höhere Geschwindigkeit.
- OpenGL Unterstützung für Video- und OSD-Darstellung: Falls zusätzlich zur --hud die --opengl-always Option angegeben wird, dann wird OpenGL zur Darstellung des Videos und des OSDs benutzt. Damit gibt es dann ein transparentes OSD, ohne das ein Fenstermanager laufen muss. Das funktioniert bei mir allerdings nur mit vdpau, nicht mit xv. Aus irgendeinem Grund kann bei dem xv Videotreiber xine das Video nicht in eine Pixmap ausgeben, die dann als Textur benutzt wird. Leider führt das bei mir aber auch zu Rucklern. Deshalb gibt es noch eine zweite Option.
- OpenGL Unterstützung für reine OSD-Darstellung: Falls anstelle --opengl-always --opengl-hud angegeben wird, dann wird das Video bei unsichtbaren OSD wie gewohnt ausgegeben. Nur falls das OSD sichtbar ist, wird OpenGL benutzt. So kann es nur beim Arbeiten mit dem OSD zu Rucklern kommen. Das kann ich aber verschmerzen, da man sich ja normalerweise mehr auf das Menü konzentriert.
- Weiches Ein- und Ausblenden des OSDs: Bei Verwendung einer der beiden OpenGL Option wird das OSD weich ein- und ausgeblendet.
- Video Fenster Unterstützung für das yapeghd Plugin: Damit wird das Video verkleinert, wenn das yaepghd Plugin aufgerufen wird. Je nach Skin hat man dann z.B. oben rechts das komplette Video. Den Rest des Bildschirms wird dann mit der Programmtabelle ausgefüllt. Funktioniert nur mit einer der beiden --opengl Optionen.
Ich hoffe, das für jeden etwas dabei ist. Ich habe Patches für verschiedene Versionen des xineliboutput Plugins angehängt. Das erste Datum im Namen des Patches gibt das verwendete CVS Datum des Plugins an. Das zweite Datum gibt an, wann ich das letzte Mal den Patch bearbeitet habe. Mit der neusten Version des Plugins habe ich momentan noch das Problem, dass die Wiedergabe über das Netzwerk nicht funktioniert. Ich habe schon ein Fehlerbericht an die xineliboutput Entwickler geschickt.
Hier die Kommandos zum Anwenden des Patches:
cvs -d:pserver:anonymous@xineliboutput.cvs.sourceforge.net:/cvsroot/xineliboutput login
cvs -z3 -d:pserver:anonymous@xineliboutput.cvs.sourceforge.net:/cvsroot/xineliboutput co -P vdr-xineliboutput
cd vdr-xineliboutput
patch < xineliboutput.hud_extension.patch.txt
Falls es durch Weiterentwicklungen des Plugins Probleme beim Patchen gibt, kann man das Arbeitsverzeichnis auch auf das Datum stellen:
cvs update -d -D 2010-03-28
Falls es beim Compilieren zu einem Fehler mit der jpeg Bibliothek kommt (struct jpeg_compress_struct has no element do_fancy_downsampling), einfach die betreffende Zeile auskommentieren. Die neuste Version des xinelibouput scheint eine neuere Version der jpeg Bibliothek zu benutzen.
Und hier noch eine kleine Liste von bekannten Problemen:
- Ab und zu bleibt beim Schliessen oder Öffnen des OSD das Video stehen. Einfach das OSD nochmal aufrufen, um das Video wieder zum Laufen zu bringen. Dieses Problem tritt nur mit den beiden --opengl Optionen auf.
- Die "TrickSpeed" des xineliboutput Plugins muss auf 4 gestellt weden (Menü Video). Ansonsten kann es beim Stoppen des Vorspulen dazu kommen, dass das Video noch ein paar Sekunden weiter gespult wird. Dieses Problem tritt auch nur mit den --opengl Optionen auf.
- Bei meiner Grafikkarte kann das Bild nach einem Neustart des X-Servers ruckeln. Zum Beheben muss ich entweder den Rechner neustarten oder den X-Server so lange neustarten, bis das Ruckeln weg ist. Dieses Problem wird aber nicht durch meinen Patch verursacht. Ich vermute eher ein Problem des NVIDIA Treiber.
Und meine verwendete Konfiguration:
- OpenSUSE 11.2
- xine-lib-1.2 CVS Version vom 20. Februar 2010, gepatcht mit xine-lib-1.2-vdpau-extensions-v11-20100127.diff
- vdr-1.7.13
- NVIDIA Grafikkarte (Gainward GT210)
- Fernsehempfang über DVB-T (HD-Wiedergabe konnte ich also nicht testen)
- 1920x1080p@50Hz
- Vermeiden von Video Tearing: SyncToVBlank muss eingeschaltet sein (nvidia-settings -a GPUScaling=1,1 -a SyncToVBlank=1)
Falls Ihr mir danken möchtet, dann bedankt Euch bitte bei meiner Ehefrau. Sie musste einige Wochen lang meine Experimente ertragen...
Ich habe mittlerweile noch ein paar Fehler behoben. Hier die Änderungsliste:
20100328:
- Initiale Version
20100404:
- Darstellungsfehler behoben falls das OSD im Fenstermodus benutzt wird
- Darstellungsartefakte entfernt falls das yaepg Plugin im Fenstermodus benutzt wird