Softdevice-plugin

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(+ deinterlacing pp-filters)
(+ vidix)
Zeile 4: Zeile 4:
 
==Hardwareanforderungen==
 
==Hardwareanforderungen==
 
Hier sind einige Beispielkonfigurationen (bitte ergänzen):
 
Hier sind einige Beispielkonfigurationen (bitte ergänzen):
 
 
* PIII 600MHz, 128MB, Matrox G450: ca. 50% Last, flüssige Darstellung
 
* PIII 600MHz, 128MB, Matrox G450: ca. 50% Last, flüssige Darstellung
 
* K6/2 450MHz, 128MB, Matrox G200: 100% Last und ruckelt mächtig
 
* K6/2 450MHz, 128MB, Matrox G200: 100% Last und ruckelt mächtig
Zeile 15: Zeile 14:
 
==Softwareanforderungen==
 
==Softwareanforderungen==
 
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:
 
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:
 
 
*Dekodierung, Skalierung, YUV2RGB in Software, Ausgabe auf (VESA)-Framebuffer (sehr CPU-lastig)
 
*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
 
*Dekodierung in Software, Skalierung und YUV2RGB über Vidix-Treiber oder DirectFB mit kartenabhängiger Hardwarebeschleunigung
Zeile 21: Zeile 19:
  
 
Die Softwaredekodierung wird von libavcodec übernommen, die natürlich installiert sein muss. Evtl. muss DirectFB installiert werden.
 
Die Softwaredekodierung wird von libavcodec übernommen, die natürlich installiert sein muss. Evtl. muss DirectFB installiert werden.
 
Die Vidix-Treiber kann man dem MPlayer-Quelltext entnehmen.
 
  
 
==Installation==
 
==Installation==
Zeile 30: Zeile 26:
 
Die Bibliothek libavcodec findet sich im Quelltextpfad des
 
Die Bibliothek libavcodec findet sich im Quelltextpfad des
 
[http://ffmpeg.sourceforge.net ffmpeg]-Paketes.
 
[http://ffmpeg.sourceforge.net ffmpeg]-Paketes.
 
Die Vidix-Treiber findet man im
 
[http://www.mplayerhq.hu/homepage/design7/news.html MPlayer]-Quelltext (cd vidix/driver/; make).
 
  
 
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.
Zeile 38: Zeile 31:
  
 
Jetzt sollte sich das Plugin normal übersetzen und starten lassen.
 
Jetzt sollte sich das Plugin normal übersetzen und starten lassen.
<pre>tar xvzf ffmpeg-0.4.8.tar.gz
+
<pre>cd /usr/local/src
 +
tar xvzf ffmpeg-0.4.8.tar.gz
 
ln -s ffmpeg-0.4.8 ffmpeg
 
ln -s ffmpeg-0.4.8 ffmpeg
 
cd ffmpeg
 
cd ffmpeg
Zeile 47: Zeile 41:
 
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 Optionen zu übersetzen:
 
Siehe Makefile für die "deinterlacing pp-filters", ist ffmpeg mit Optionen zu übersetzen:
<pre>
+
<pre>ln -s ffmpeg-0.4.8 ffmpeg
ln -s ffmpeg-0.4.8 ffmpeg
+
 
cd ffmpeg
 
cd ffmpeg
 
./configure --enable-shared --enable-pp --enable-gpl
 
./configure --enable-shared --enable-pp --enable-gpl
Zeile 62: Zeile 55:
 
ldconfig
 
ldconfig
  
 +
cd /usr/local/src
 
tar xvzf DirectFB-0.9.20.tar.gz
 
tar xvzf DirectFB-0.9.20.tar.gz
 +
cd DirectFB-0.9.20
 
./configure --help (für den passenden driver ???)
 
./configure --help (für den passenden driver ???)
./configure --with-gfxdrivers=???
+
./configure --prefix=/usr/local --with-gfxdrivers=???
 
make
 
make
 
make install
 
make install
  
 
tar xvzf DFB++-0.9.20.tar.gz
 
tar xvzf DFB++-0.9.20.tar.gz
./configure
+
cd DFB++-0.9.20
 +
./configure --prefix=/usr/local
 
make
 
make
make install</pre>
+
make install
 +
 
 +
cd -
 +
tar xvzf vidix-cvs.tar.gz
 +
cd vidix
 +
./configure --prefix=/usr/local
 +
make
 +
make install
 +
ldconfig</pre>
 
==Probleme==
 
==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)  
 
* Ü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)  
  
* Plugin startet nicht. Zum Starten müssen die shared libraries (z.B. libvidix.so und mga_vid.so) gefunden werden können. Der Pfad zum vidix-Treiber wird sogar in das Plugin einkompiliert. Bei mir wurde die libvidix.so vermisst, die ich aus dem MPlayerquellcode folgendermaßen bekommen habe:
+
* 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.
** cd vidix
+
** make
+
** gcc -shared vidixlib.o -Wl,-soname=libvidix.so -o libvidix.so
+
** cp libvidix.so /usr/lib
+
 
+
* 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.
+
  
 
==Ausblick==
 
==Ausblick==

Version vom 19. August 2004, 18:50 Uhr

Inhaltsverzeichnis

Beschreibung

Das SoftDevice-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 direct 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.

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: ......

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

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:

  • 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)

Die Softwaredekodierung wird von libavcodec übernommen, die natürlich installiert sein muss. Evtl. muss DirectFB installiert werden.

Installation

Die aktuellste Plugin-Version findet sich hier. Es bestehen einig externe Abhängigkeiten, so dass die Installation nicht ganz so einfach ist, wie bei anderen Plugins.

Die Bibliothek libavcodec findet sich im Quelltextpfad des ffmpeg-Paketes.

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.

Jetzt sollte sich das Plugin normal übersetzen und starten lassen.

cd /usr/local/src
tar xvzf ffmpeg-0.4.8.tar.gz
ln -s ffmpeg-0.4.8 ffmpeg
cd ffmpeg
./configure --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 Optionen zu übersetzen:

ln -s ffmpeg-0.4.8 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

cd /usr/local/src
tar xvzf DirectFB-0.9.20.tar.gz
cd DirectFB-0.9.20
./configure --help (für den passenden driver ???)
./configure  --prefix=/usr/local --with-gfxdrivers=???
make
make install

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

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

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.

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.

Links

[1] http://www.mplayerhq.hu MPlayer Homepage
[2] http://www.directfb.org DirectFB
[3] http://vidix.sourceforge.net VIDIX is (VID)eo (I)nterface for *n(iX)
[4] http://ffmpeg.sourceforge.net FFmpeg Homepage
[5] http://www.k13zoo.de/vdr Homepage des Plugins
[6] http://www.lucke.in-berlin.de Homepage des Plugins (Xv)