Softdevice-plugin
(Beispielkonfigurationen) |
(M) |
||
Zeile 30: | Zeile 30: | ||
===Basis (beinhaltet FB/XV Support)=== | ===Basis (beinhaltet FB/XV Support)=== | ||
− | <pre>cd $SOURCEDIR | + | <pre> |
+ | cd $SOURCEDIR | ||
tar xvzf ffmpeg-<VERSION>.tar.gz | tar xvzf ffmpeg-<VERSION>.tar.gz | ||
ln -s ffmpeg-<VERSION> ffmpeg | ln -s ffmpeg-<VERSION> ffmpeg | ||
cd ffmpeg | cd ffmpeg | ||
− | ./configure --prefix=/usr/local --enable-shared | + | ./configure --prefix=/usr/local \ |
+ | --enable-shared | ||
make | make | ||
make install | make install | ||
− | ldconfig</pre> | + | ldconfig |
+ | </pre> | ||
Falls Plugin softdevice-0.0.7pre2 oder höher zum Einsatz kommt. | 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: | Siehe Makefile für die "deinterlacing pp-filters", ist ffmpeg mit zusätzlichen Optionen zu übersetzen: | ||
− | <pre>ln -s ffmpeg-<VERSION> ffmpeg | + | <pre> |
+ | ln -s ffmpeg-<VERSION> ffmpeg | ||
cd ffmpeg | cd ffmpeg | ||
./configure --enable-shared --enable-pp --enable-gpl | ./configure --enable-shared --enable-pp --enable-gpl | ||
Zeile 60: | Zeile 64: | ||
cd DirectFB-<VERSION> | cd DirectFB-<VERSION> | ||
./configure --help (für den passenden driver ???) | ./configure --help (für den passenden driver ???) | ||
− | ./configure --prefix=/usr/local --with-gfxdrivers=??? | + | ./configure --prefix=/usr/local \ |
+ | --with-gfxdrivers=??? | ||
make | make | ||
make install | make install | ||
Zeile 79: | Zeile 84: | ||
make | make | ||
make install | make install | ||
− | ldconfig</pre> | + | ldconfig |
+ | </pre> | ||
Im Makefile muss eingestellt werden, welche Treiber-Variante man benutzen will und wo sich die benötigten [[Library|Bibliotheken]] / [[Headerfile|Headerfiles]] befinden. | Im Makefile muss eingestellt werden, welche Treiber-Variante man benutzen will und wo sich die benötigten [[Library|Bibliotheken]] / [[Headerfile|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. | 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. |
Version vom 16. Oktober 2004, 23:10 Uhr
Inhaltsverzeichnis |
Beschreibung
Das Plugin wurde von Roland Praml geschrieben und dient der MPEG-2-Decodierung in Software. 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 preisgünstiger und leiser Client aufbauen. Ausserdem 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)
Hardwareanforderungen
Hier sind einige Beispielkonfigurationen (bitte ergänzen):
- PIII 600MHz, 128MB, Matrox G450: ca. 50% Last, flüssige Darstellung
- K6/2 450MHz, 128MB, Matrox G200: 100% Last und ruckelt mächtig
- Dicker Prozessor (?), VESA 2.0 Karte: ......
- Athlon 800 Mhz, 512MB, ATI Radeon VE ruckelt
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)
Installation
Ist ein wenig unterteilt, je nach dem was man möchte.
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 --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 ldconfig
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 |
Parameter
Parameter | Beschreibung |
---|---|
-vo xv: | Ausgabe über X11-Xv |
-vo xv:aspect=wide | 16:9 Format (1024x576) |
-vo xv:aspect=normal | 4:3 Format (768x576) |
-vo fb: | Ausgabe über Framebuffer Gerät |
-vo dfb: | Ausgabe über directFB |
-vo vidix: | Ausgabe über vidix Treiber |
Probleme
- Übersetzen klappt nicht. Nicht gleich aufgeben, es liegt meistens an den Einstellungen im Makefile. Es 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!
Ausblick
So wie die meisten Plugins ist auch dieses noch stark in Entwicklung. Am meisten erhoffe ich mir von der Einbindung der libsoftmpeg, da die Entwickler die maximal verfügbare Hardwareunterstützung einbauen wollen.
Vielen Dank an Roland für die großartige Leistung.
CVS
cvs -z3 -d:pserver:anonymous@cvs.softdevice.berlios.de:/cvsroot/softdevice co softdevice
Links
[1] | http://www.mplayerhq.hu | Homepage -> MPlayer |
[2] | http://www.directfb.org | Homepage -> DirectFB |
[3] | http://www.linuxtv.org/libsoftmpeg | Homepage -> Libsoftmpeg |
[4] | http://vidix.sourceforge.net | VIDIX is (VID)eo (I)nterface for *n(iX) |
[5] | http://ffmpeg.sourceforge.net | Homepage -> ffmpeg |
[6] | http://www.k13zoo.de/vdr | Homepage des Plugins |
[7] | http://www.lucke.in-berlin.de | Homepage des Plugins (Xv) |
[8] | http://softdevice.berlios.de | Homepage des Plugins |