Servus zusammen,
aufbauend auf diesen Thread (Hardwarevoraussetzungen, Grundsoftwareauswhal,..)
Wie bekomme ich ein lauffähiges System für xineliboutput mit vdpau?
habe ich mir die letzten beiden Wochen mal das vdr-xine-plugin-0.9.3 angesehen und getestet.
Der Thread soll wieder eine „kleine“ Zusammenfassung meiner bisherigen Erfahrungen mit dem vdr-xine-plugin (Danke an R. Nissl an dieser Stelle!) sein.
Vorneweg, => ich bin begeistert, was Stabilität, Umschaltverhalten und Konfigurationsmöglichkeiten angeht.
Dieses Plugin hat grundsätzlich die gleichen Möglichkeiten der Ausgabe des VDR-Bildes über HDMI, DVI und VGA. Im Vergleich zu xineliboutput fehlt eigentlich nichts,
mit dem externalplayer-Plugin ist es auch möglich, den VDR im Hintergrund „schlafen“ zu legen und im Vordergrund eine andere „Oberfläche“ (z.B. xbmc, mmsv2, Browser, Mail-Client) laufen zu lassen.
Das Plugin ist eine andere Variante eines Softdecoders, hat also nichts mit xineliboutput zu tun.
1. Hardware => siehe Signatur, oder Teil 1 des obigen Links
2. Software:
2.1. Beispielgrundkonfiguration (BS und Grundtreiber):
- Debian – Lenny von der Netinstall
- eigengebauter Kernel: 2.6.30.2 mit SMP-Unterstützung
- Nvidia-Treiber: 185.18.36
- xine-plugin-0.9.3:
http://www.vdr-wiki.de/wiki/index.php/Xine-plugin
2.2 VDR-Versions-Auswahl:
- VDR-1.7.9 mit ext-Patch72
- mark-ad-Plugin
- In der Kombination mit dem vdr-xine-Plugin-0.9.3 keine Umschaltprobleme, keine Tonprobleme
2.3 Konfiguration der Komponenten (xine-vdpau, xine-ui, vdr-xine-plugin)
2.3.1 Grundsätzliches:
Auch hier kann man zwei Wege gehen, um die passenden Komponenten zusammen zu bekommen. Ausgehend von der passenden xine-lib, also entweder die xine-lib-1.2 (experimenteller Zweig) oder xine-vdpau (originaler Entwicklerzweig).
Unterschiede der beiden Versionen => siehe Link von oben, Punkt 2.4.2
2.3.1.1 Übersicht, was brauche ich alles um mit der xine-lib-1.2 zu kompilieren:
1. Vorbereitung der xine-lib-1.2:
cd /usr/local/src
wget http://www.jusst.de/vdpau/files/xine-lib-1.2/xine-lib-1.2-vdpau-r278.diff.bz2
bzip2 -d xine-lib-1.2-vdpau-r278.diff.bz2
gunzip xine-vdpau-xine-lib-1.2-r278-crop-v9.diff.gz
hg clone http://hg.debian.org/hg/xine-lib/xine-lib-1.2
cd xine-lib-1.2
##alle Patches liegen in /usr/local/src
patch -p1 < ../xine-lib-1.2-vdpau-r278.diff
patch -p1 < ../xine-vdpau-xine-lib-1.2-r278-crop-v9.diff
##xcb-bug in xine_video_out_vdpau.c aktivieren
Patch dazu:
--- xine-lib-1.2/src/video_out/video_out_vdpau.c.orig 2009-06-22 10:03:11.000000000 +0300
+++ xine-lib-1.2/src/video_out/video_out_vdpau.c 2009-06-22 10:04:37.000000000 +0300
@@ -59,8 +59,8 @@
#define NUM_FRAMES_BACK 1
-/*#define LOCKDISPLAY*/ /*define this if you have a buggy libX11/xcb*/
-
+/*define this if you have a buggy libX11/xcb*/
+#define LOCKDISPLAY
#define DEINT_BOB 1
#define DEINT_HALF_TEMPORAL 2
Alles anzeigen
2. Kompilieren xine-lib-1.2
cd /usr/local/src/xine-lib-1.2
make clean
./autogen.sh --prefix=/usr --with-external-ffmpeg --disable-dxr3 --enable-w32dll --with-w32-path=/usr/lib/win32
make
make install
ldconfig
3. Kompilieren des Xine-Forntends xine-ui:
cd /usr/local/src/xine-ui
make clean
./autogen.sh --prefix=/usr --enable-vdr-keys
make
make install
ldconfig
4. Kompilieren der VDR-Plugins:
Hier sollte man auch das xineliboutput-plugin-cvs vorbereitet haben, => passenden DF-Patch auf des Plugin: aktuell xineliboutput-head-vdpau-support-v8.diff. Hintergrund ist hier das autocropping, das muß ich allerdings noch testen, welche Parameter man dazu braucht. Das autocropping geht deshalb, da das xine-plugin auch die Post-Teile des xineliboutput-plugins nutzen kann!
Zudem muß dass xine-plugin-0.9.3 ein wenig angepasst werden, um das Plugin inkl. Forntend automatisch zu starten. Die Anpassung erfolgt in der Datei xine.c, Zeile 233:
…...
bool cPluginXine::Start(void)
{
// Start any background activities the plugin shall perform.
if (!PluginXine::cXineDevice::Open())
return false;
+pid_t cpid;
+switch (cpid = fork()){
+case 0: SystemExec("xine -f -V vdpau -A alsa --post vdr --post vdr_video --post vdr_audio --aspect-ratio=anamorphic --verbose=2 --no-logo --no-splash vdr:/tmp/vdr-xine/stream#demux:mpeg_pes");
+}
return true;
}
…...
Alles anzeigen
ODER
Ergänzung 13.11.2009: Autocrop für vdr-xine-plugin mit df-Patches für xineliboutput =>
Hiermit wird das automatische Aufziehen bei Sendern mit hässlichen Schwarzen Balken oben und unten im vdr-xine-plugin ergänzt. Dem vdr-xine-plugin ist es möglich die post-plugins des xineliboutput-Plugins zu nutzen, deshalb geht das auch mit dem vdr-xine-plugin.
bool cPluginXine::Start(void)
{
// Start any background activities the plugin shall perform.
if (!PluginXine::cXineDevice::Open())
return false;
+ pid_t cpid;
+ switch (cpid = fork()){
+ case 0: SystemExec("xine -f -V vdpau -A alsa --post vdr --post vdr_video --post vdr_audio --post autocrop:enable_autodetect=0,enable_subs_detect=1,soft_start=1,stabilize=1 --aspect-ratio=anamorphic --verbose=2 --no-logo --no-splash vdr:/tmp/vdr-xine/stream#demux:mpeg_pes");
+ }
return true;
}
Alles anzeigen
cd /usr/local/src/VDR
make clean-plugins
make plugins
cd /usr/local/src/vdr-1.7.9/PLUGINS/src/vdr-xineliboutput
make install
cd /usr/local/src/vdr-1.7.9/PLUGINS/lib
strip *.*
cp /usr/local/src/vdr-1.7.9/PLUGINS/lib/*.* /usr/vdr/plugins/
Die locale-Dateien nicht vergessen an den richtigen Platz zu kopieren.
Alles anzeigen
Mit dieser Variante, = xine-lib-1.2, hatte ich allerdings bei gleichen Paramtern in der xine-config und setup.conf bei hohen Bildraten im HD-Bereich immer wieder Framedrops.
Um es gleich zu sagen, das gibt’s bei der nächsten Variante mit xine-vdpau nicht!
2.3.1.2 Übersicht, was brauche ich alles um mit dem xine-vdpau-zweig zu kompilieren:
Abweichend zur obigen Variante, geht hier der Weg fast gleich, aber man nutzt halt den originalen Entwicklerzweig von xine-vdpau. Auch hier der komplette Installweg.
1. xine-vdpau holen und mit xine-lib.patch patchen/df-patch patchen
cd /usr/local/src
#rm -r /usr/local/src/xine-vdpau
#svn co svn://jusst.de/xine-vdpau -r 284
svn co svn://jusst.de/xine-vdpau
cd /usr/local/src/xine-vdpau
find /usr/local/src/VDR/PLUGINS/src/xine-0.9.3 -name xine-lib.patch -exec patch -p1 -i \{} \;
cp /usr/local/src/meine_patches/xine-vdpau-r284-crop-v9.diff /usr/local/src/xine-vdpau/
patch < /usr/local/src/xine-vdpau/xine-vdpau-r284-crop-v9.diff
## per Hand /usr/local/src/xine-vdpau/src/combined/ffmpeg/ff_video_decoder.c
## "dort gibt es 2 Eintraege mit RGBA32 dies aendern in RGB32"
2. xine-vdpau kompilieren und installieren:
cd /usr/local/src/xine-vdpau
make clean
./autogen.sh
./configure --prefix=/usr --with-external-ffmpeg --disable-dxr3 --enable-w32dll --with-w32-path=/usr/lib/win32
make
make install
ldconfig -v
3. Kompilieren des Xine-Forntends xine-ui:
cd /usr/local/src/
#wget http://home.vrweb.de/~rnissl/xine-ui-cvs-20090617220000.tar.bz2
#tar xivf xine-ui-cvs-20090617220000.tar.bz2
cd xine-ui
make clean
./autogen.sh --prefix=/usr --enable-vdr-keys
make
make install
ldconfig -v
4. Kompilieren der VDR-Plugins:
Hier sollte man auch das xineliboutput-plugin-cvs vorbereitet haben, => passenden DF-Patch auf des Plugin: aktuell xineliboutput-head-vdpau-support-v8.diff. Hintergrund ist hier das autocropping, das muß ich allerdings noch testen, welche Parameter man dazu braucht. Das autocropping geht deshalb, da das xine-plugin auch die Post-Teile des xineliboutput-plugins nutzen kann!
Zudem muß dass xine-plugin-0.9.3 ein wenig angepasst werden, um das Plugin inkl. Forntend automatisch zu starten. Die Anpassung erfolgt in der Datei xine.c, Zeile 233 :
…...
bool cPluginXine::Start(void)
{
// Start any background activities the plugin shall perform.
if (!PluginXine::cXineDevice::Open())
return false;
+pid_t cpid;
+switch (cpid = fork()){
+case 0: SystemExec("xine -f -V vdpau -A alsa --post vdr --post vdr_video --post vdr_audio --aspect-ratio=anamorphic --verbose=2 --no-logo --no-splash vdr:/tmp/vdr-xine/stream#demux:mpeg_pes");
+}
return true;
}
…...
Alles anzeigen
ODER
Ergänzung 13.11.2009: Autocrop für vdr-xine-plugin mit df-Patches für xineliboutput =>
Hiermit wird das automatische Aufziehen bei Sendern mit hässlichen Schwarzen Balken oben und unten im vdr-xine-plugin ergänzt. Dem vdr-xine-plugin ist es möglich die post-plugins des xineliboutput-Plugins zu nutzen, deshalb geht das auch mit dem vdr-xine-plugin.
bool cPluginXine::Start(void)
{
// Start any background activities the plugin shall perform.
if (!PluginXine::cXineDevice::Open())
return false;
+ pid_t cpid;
+ switch (cpid = fork()){
+ case 0: SystemExec("xine -f -V vdpau -A alsa --post vdr --post vdr_video --post vdr_audio --post autocrop:enable_autodetect=0,enable_subs_detect=1,soft_start=1,stabilize=1 --aspect-ratio=anamorphic --verbose=2 --no-logo --no-splash vdr:/tmp/vdr-xine/stream#demux:mpeg_pes");
+ }
return true;
}
Alles anzeigen
cd /usr/local/src/VDR
make clean-plugins
make plugins
cd /usr/local/src/VDR/PLUGINS/src/xineliboutput
make install
cd /usr/local/src/VDR/PLUGINS/lib
strip *.*
cp *.* /usr/vdr/plugins
Diese Variante löppert 100%-ig sauber, ohne Aussetzer und Framedrops bei hohen Bildraten im HD-Bereich.
Zudem ist das Umschaltverhalten sehr schnell.
2.3.2 Startaufruf mit dem VDR, Einstellungen in der setup.conf des VDR’s und in der config zum xine-plugin-0.9.3:
Alle Einstellungen beim gestopptem VDR!
2.3.2.1 Startaufruf mit dem VDR:
….\"-Pxine -r\" ...
2.3.2.2 Einstellungen in der setup.conf des VDR:
...
xine.autoPrimaryDeviceMode = autoPrimaryDeviceOn
xine.image16:9.zoomX = 100
xine.image16:9.zoomY = 100
xine.image4:3.zoomX = 100
xine.image4:3.zoomY = 100
xine.interactWithEitScannerMode = interactWithEitScannerOff
xine.modeLiveTV.monitoringDuration = 10
xine.modeLiveTV.monitoringMode = monitoringOnce
xine.modeLiveTV.prebufferFramesAudio = 4
xine.modeLiveTV.prebufferFramesVideoHD = 8
xine.modeLiveTV.prebufferFramesVideoSD = 4
xine.modeLiveTV.prebufferHysteresis = 8
xine.muteMode = muteIgnore
xine.osdExtent.X = 1920
xine.osdExtent.Y = 1080
xine.osdGammaCorrection = 123
xine.osdMode = osdBlendScaledAuto
...
Alles anzeigen
2.3.2.3 Einstellungen in der config zum xine-plugin-0.9.3 (nur Änderungen von der Grunddatei):
Die Datei liegt in der Regel im Benutzerverzeichnis unter dem der VDR läuft (bei mir /root/.xine/. Ich benutze den PassThroughMode für die Ausgabe des Tones via HDMI des onboard-Spdif an eine Geforce GT220 an den LCD (Durchschleifen).
...
# Deinterlacing automatisch aktivieren
# bool, default: 0
gui.deinterlace_by_default:1
...
# Erfahrenheit einstellen
# { Beginner Advanced Expert Master of the known universe }, default: 0
gui.experience_level:Master of the known universe
...
# Gerät für Monoausgabe
# string, default: default
audio.device.alsa_default_device:hw:0,1
# Gerät für Stereoausgabe
# string, default: plug:front:default
audio.device.alsa_front_device:hw:0,1
# ALSA Mixergerät
# string, default: PCM
#audio.device.alsa_mixer_name:PCM
# Soundkarte unterstützt mmap
# bool, default: 0
audio.device.alsa_mmap_enable:1
# Gerät für 5.1-Kanalausgabe
# string, default: iec958:AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2
audio.device.alsa_passthrough_device:hw:0,1
# Gerät für 4-Kanalausgabe
# string, default: plug:surround40:0
audio.device.alsa_surround40_device:hw:0,1
# Gerät für 5.1-Kanalausgabe
# string, default: plug:surround51:0
audio.device.alsa_surround51_device:hw:0,1
# Lautsprecherplazierung
# { Mono 1.0 Stereo 2.0 Headphones 2.0 Stereo 2.1 Surround 3.0 Surround 4.0 Surround 4.1 Surround 5.0 Surround 5.1 Surround 6.0 Surround 6.1 Surround 7.1 Pass Through }, default: 1
audio.output.speaker_arrangement:Pass Through
...
# Methode für Audio/Videosynchronisation
# { metronom feedback resample }, default: 0
audio.synchronization.av_sync_method:resample
# Wenn !=0, immer auf diese Rate anpassen
# numeric, default: 0
audio.synchronization.force_rate:48000
# Resampling benutzen
# { auto off on }, default: 0
audio.synchronization.resample_mode:on
...
# Zu benutzender Videotreiber
# { auto vdpau xv raw opengl xshm aa none xxmc sdl vidixfb vidix fb xvmc }, default: 0
video.driver:vdpau
# vdpau: HD deinterlace method
# { bob half temporal half temporal_spatial temporal temporal_spatial }, default: 3
video.output.vdpau_deinterlace_method:temporal
# vdpau: Try to recreate progressive frames from pulldown material
# bool, default: 1
#video.output.vdpau_enable_inverse_telecine:1
# vdpau: disable deinterlacing when progressive_frame flag is set
# bool, default: 0
#video.output.vdpau_honor_progressive:1
# vdpau: restrict enabling video properties for SD video only
# { none noise sharpness noise+sharpness }, default: 0
video.output.vdpau_sd_only_properties:noise+sharpness
# vdpau: disable advanced deinterlacers chroma filter
# bool, default: 0
#video.output.vdpau_skip_chroma_deinterlace:0
# Anzahl der Audiopuffer
# numeric, default: 230
engine.buffers.audio_num_buffers:250
# Anzahl der Videopuffer
# numeric, default: 500
engine.buffers.video_num_buffers:1800
# Standardanzahl von Videobildern
# numeric, default: 15
engine.buffers.video_num_frames:22
Alles anzeigen
So, das wars, HD-OSD und auch Darstellung sind absolut top mit dem xine-Plugin. Die Konfiguration läuft auf beiden Systemen einwandfrei. Mit der 9400GT sollte man allerdings „bob“ als Deinterlacer in der config wählen (Framedrops).
Die Einstellungen für den X-Server sind im obigen Thread beschrieben.
Wer Ergänzungen, Vorteile, und Nachteile nennen kann, nur her damit, dann pflege ich das hier ein. Auch Lob und Tadel sind willkommen.
Ws mir jetzt noch fehlt, ist ein passender Patch gegen xine-vdpau/xine-plugin-0.9.3 um in Live das Bild dargestellt zu bekommen. Leider gibt es den Patch nur für die xine-lib-1.2-Variante.
Gruß
Wolfgang