Softdevice-plugin

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Beschreibung

Autor: Torgeir Veimo, Martin Wache, Stefan Lucke

Das Plugin dient der MPEG-2-Decodierung in Software, wie auch das xine-plugin. Es wird vom VDR als Ausgabegerät erkannt und ersetzt den Hardwaredecoder der DVB-Karte. Die Ausgabe erfolgt dann auf dem Monitor bzw. über den TV-Out-Anschluss der Grafikkarte. Dabei wird der VDR direkt auf der Textkonsole (Framebuffer) dargestellt. In Verbindung mit dem streamdev-plugin lässt sich damit ein Client ohne Fullfeatured DVB-Karte aufbauen. Außerdem dürfte es bis auf weiteres neben ähnlichen Projekten die einzige Chance auf HDTV sein.

Das Grundprinzip des Plugins besteht darin, den MPEG-2 codierten Videostrom von VDR zu übernehmen, zu dekodieren, zu skalieren, in das RGB-Format zu bringen und auf dem Framebuffer-Device (spezielle Art, die Graka anzusprechen) auszugeben. Dafür gibt es verschiedene Verfahrensweisen:

  • Quasi-Hardwaredekodierung über XvMC ("XVideo Motion Compensation"), recht geringe CPU-Last (~30%, prozessorunabhängig).

Unter anderem unterstützt von NVidia Grafikkarten (GF4MX400 sowie >= GF5), S3 Unichrome (u.a. auf VIA Epia Boards) und vielleicht anderen, laden über option "XvMC" in XF86config, falls installiert (Distribution checken!)

  • Dekodierung in Software, Ausgabe auf Overlay via Xv ("XVideo"), unterstützt von wohl allen AGP-Karten, laden über

option "v4l" in XF86config.

  • Dekodierung, Skalierung, YUV2RGB in Software, Ausgabe auf (VESA)-Framebuffer (sehr CPU-lastig)
  • Dekodierung in Software, Skalierung und YUV2RGB über Vidix-Treiber oder DirectFB mit kartenabhängiger Hardwarebeschleunigung
  • Alles komplett über Treiber mit Hardwarebeschleunigung über DirectFB und Libsoftmpeg leider noch nicht unterstützt, da die libsoftmpeg noch entwickelt wird)

Bilder

Hardwareanforderungen

Hier sind einige Beispielkonfigurationen (bitte ergänzen):

CPU@MHz / RAM Grafikkarte Last Sonstiges
K6/2@450 / 128 Matrox G200 ~100% ruckelt mächtig
Athlon@500 / 640 Nvidia GF2MX400 ~50-70% flüssige Darstellung (Xv)
P@600 / 128 Matrox G450 ~50% flüssige Darstellung
Athlon@800 / 512 ATI Radeon VE ruckelt
Athlon@1100 / 512 Nvidia GF2MX200 ~ 50% flüssige Darstellung
Athlon@1333 / 512 Nvidia GF FX5900 ~30-40% flüssige Darstellung (Xv, v0.0.8)
AthlonXP@1900 / 512 Nvidia FX5200 ~23 % flüssige Darstellung
Athlon64@3800 / 1024 Nvidia GF FX5600 ~11-16% flüssige Darstellung (Xv, v0.1.0)
AthlonXP@2000 / 512 Nvidia FX5900XT ~14-18% flüssige Darstellung (Xv)

Optimal wären natürlich Grafikkarten, welche einen Teil der Videoverarbeitung übernehmen können. So gibt es Karten, welche IDCT, MC sowie BES in Hardware beherrschen. Leider rücken die Hersteller nur spärliche Informationen zur Open Source Treiberentwicklung heraus.

Für das Plugin sind Matrox-Karten sehr gut geeignet, speziell G200, G400 und G450, da hier der Hersteller unter anderem die Informationen zur Programmierung des BES zur Verfügung gestellt hat.

Softwareanforderungen

  • ffmpeg (Version >= 0.4.8)
  • ALSA

Installation

Ist ein wenig unterteilt, je nach dem was man möchte. Die ALSA Installation ist bereits hier beschrieben: LFS ALSA.

Basis (beinhaltet FB/XV Support)

cd $SOURCEDIR
tar xvzf ffmpeg-<VERSION>.tar.gz
ln -s ffmpeg-<VERSION> ffmpeg
cd ffmpeg
./configure --prefix=/usr/local \
            --enable-shared
make
make install
ldconfig

Falls Plugin softdevice-0.0.7pre2 oder höher zum Einsatz kommt. Siehe Makefile für die "deinterlacing pp-filters", ist ffmpeg mit zusätzlichen Optionen zu übersetzen:

ln -s ffmpeg-<VERSION> ffmpeg
cd ffmpeg
./configure --prefix=/usr/local \
            --enable-shared \
            --enable-pp \
            --enable-gpl
cd libavcodec/libpostproc
make
mkdir -p /usr/local/include/postproc
install -m 644 postprocess.h /usr/local/include/postproc/postprocess.h
cp libpostproc.a /usr/local/lib
cd -
make
make install
make installlib
ldconfig

AC3 Dekodierungs Support

Ab softdevice-0.1.1 kann das Softdevice auch mit Hilfe von libavcodec ac3 dekodieren. Dazu muss ffmpeg mit AC3 Unterstützung kompiliert werden, also anstatt der entsprechenden Zeile oben configure mit den folgenden Optionen aufrufen:

./configure --prefix=/usr/local \
            --enable-shared \
            --enable-pp \
            --enable-gpl \
            --enable-a52

DirectFB Support

cd $SOURCEDIR
tar xvzf DirectFB-<VERSION>.tar.gz
cd DirectFB-<VERSION>
./configure --help (für den passenden driver ???)
./configure --prefix=/usr/local \
            --with-gfxdrivers=???
make
make install

cd -
tar xvzf DFB++-<VERSION>.tar.gz
cd DFB++-<VERSION>
./configure --prefix=/usr/local
make
make install

Vidix Support

cd $SOURCEDIR
tar xvzf vidix-cvs.tar.gz
cd vidix
./configure --prefix=/usr/local
make
make install
ldconfig

Im Makefile muss eingestellt werden, welche Treiber-Variante man benutzen will und wo sich die benötigten Bibliotheken / Headerfiles befinden. Das Framebufferdevice muss existieren und ansprechbar sein. Dazu muss entweder beim Systemstart der VESA-Framebuffer aktiviert werden oder bei unterstützten Grafikkarten das entsprechende Framebuffer Modul geladen sein. Beim Kernel 2.4 und einer Matrox-Karte ist das z.B. das Modul matroxfb-base (modprobe matroxfb-base) Mit fbset wird dann eine passende Auflösung eingestellt, z.B. 768x576 bei 100Hz und 32bit Farbtiefe. Ein entsprechender Eintrag muss in der Datei /etc/fb.modes existieren.

Optionen

XV_SUPPORT=1 XV support von Stefan Lucke
DFB_SUPPORT=1 DFB ist sehr experimentel (funktioniert nur mit meiner matrox G200, kommentare erwünscht)
FB_SUPPORT=1 FB ist nicht beschleunigt und sollte mit jedem FB mit 16bit Farbtiefe funtionieren
VIDIX_SUPPORT=1 Vidix support von Vadim Catana
LIBXDPMS_SUPPORT=1 Set this if you want to use DPMS
PP_LIBAVCODEC=1 Enable the usage from some deinterlacing pp-filters of libavcodec
SUSPEND_BY_KEY=1 Set this if you want to be able to toggle suspend mode by keyboard XV only
USE_SUBPLUGINS=1 if you want output methods build as a single lib

Parameter

Parameter Beschreibung
-ao alsa:devicename Alsa ausgabe Device
-ao dummy: Dummy ausgabe Device
-vo xv: Ausgabe über X11-Xv
-vo xv:aspect=wide 16:9 Format (1024x576)
-vo xv:aspect=normal 4:3 Format (768x576)
-vo xv:max-area use maximum available area
-vo xv:full Start in Vollbild
-vo fb: Ausgabe über Framebuffer Gerät
-vo dfb: Ausgabe über directFB
-vo vidix: Ausgabe über vidix Treiber
-L <plugin_path_name> search path for loading subplugins

Tipps

VDR stellt das OSD auf der ersten Karte mit Decoder dar.
Mit dem Plugin gibt es ein weiteres Device (inc. Decoder), es ist immer das letzte.
Deshalb ist bei dem Betrieb mit einer (oder mehreren) FF Karten, ein höheres Device zu wählen. (das letzte verfügbare im Menü)

Einstellungen / Setup
    DVB
        Primäres DVB Interface / Primary DVB interface

Oder via "sed", VDR ist vorher zu beenden, einfach schauen welches wir haben (+1).

#~ grep ^PrimaryDVB /etc/vdr/setup.conf
PrimaryDVB = 3
#~ sed -i "s/^PrimaryDVB.*/PrimaryDVB = 4/" /etc/vdr/setup.conf

Probleme

  • Übersetzen klappt nicht. Nicht gleich aufgeben, es liegt meistens an den Einstellungen im Makefile. Bei eingeschaltetem VIDIX werden die Dateien vidix.h, vidixlib.h und forcc.h zum übersetzen benötigt. Nach Änderungen am Makefile sollte man make distclean aufrufen (clean lässt das .depfile liegen)
  • Bei der G450 Karte waren die Farben vertauscht (obwohl z.b. der MPlayer die Farben richtig dargestellt hatte). Das habe ich so gelöst, in der Datei video-vidix.c nach YUV suchen und die Argumente Pu und Pv vertauschen.
  • Ich hatte unter Debian das Problem, dass keine /etc/ld.so.conf existierte, da ich weder X11 noch sonstigen Kram installiert hatte (was eigentlich die Datei anlegt). Es äusserte sich in der Fehlermeldung, dass libavcodec.h nicht gefunden wurde. (Nachzulesen unter: http://www.vdr-portal.de/board/thread.php?sid=&postid=189219) Lösung: Einfach die Datei /etc/ld.so.conf anlegen, /usr/local/lib/ reinschreiben, "ldconfig" ausführen => feddich!
  • Wer einen 2.6er Kernel hat und VDR immer abstütrzt, sollte eine version >= 0.0.8 verwenden.

Ausblick

So wie die meisten Plugins ist auch dieses noch in Entwicklung, wengleich der XV-Modus (im Gegensatz zum FB-Modus) schon sehr gut funktioniert. Am meisten erhoffe ich mir von der Einbindung der libsoftmpeg, da die Entwickler die maximal verfügbare Hardwareunterstützung einbauen wollen.

CVS

cvs -z3 -d:pserver:anonymous@cvs.softdevice.berlios.de:/cvsroot/softdevice co softdevice

Links

[1] http://softdevice.berlios.de Homepage des Plugins (aktuelle Versionen)
[2] http://www.lucke.in-berlin.de Homepage des Plugins (ältere Versionen)
[3] http://www.k13zoo.de/vdr Homepage des Plugins (die ersten Versionen)
[4] http://www.mplayerhq.hu Homepage -> MPlayer
[5] http://www.directfb.org Homepage -> DirectFB
[6] http://www.linuxtv.org/libsoftmpeg Homepage -> Libsoftmpeg
[7] http://vidix.sourceforge.net VIDIX is (VID)eo (I)nterface for *n(iX)
[8] http://ffmpeg.sourceforge.net Homepage -> ffmpeg
[9] http://www.alsa-project.org ALSA Homepage