Softdevice-plugin

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Tipps: - hardcodet)
(Detaillierte Beschreibung)
 
(99 dazwischenliegende Versionen von 53 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
 
'''Autor:''' Torgeir Veimo, Martin Wache, Stefan Lucke, Harald Milz
 
'''Autor:''' Torgeir Veimo, Martin Wache, Stefan Lucke, Harald Milz
  
Das Plugin dient der [[MPEG|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.
+
Dieses Plugin ist ein Ausgabe-Plugin für den VDR.
  
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:
+
===Status===
*Quasi-Hardwaredekodierung über XvMC ("XVideo Motion Compensation"), recht geringe CPU-Last (~30%, prozessorunabhängig), bisher leider nur in Planung.  
+
Letztes Update 04/2008
 +
 
 +
===Detaillierte Beschreibung===
 +
 
 +
Das Plugin dient der [[MPEG|MPEG-2]]-Decodierung in Software, wie auch das [[xine-plugin]]. Es wird vom [[VDR]] als vollwertiges Ausgabegerät erkannt, 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 [[DVB-Karte]] aufbauen.
 +
 
 +
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 (spezieller Operationsmodus der Grafikkarte) auszugeben. Dafür gibt es verschiedene Verfahrensweisen:
 +
*Quasi-Hardwaredekodierung über [[XvMC]] ("XVideo Motion Compensation"), recht geringe CPU-Last (~30%, prozessorunabhängig), bisher leider nur in Planung.  
 
Unter anderem unterstützt von NVidia Grafikkarten (GF4MX400 sowie >= GF5), S3 Unichrome (u.a. auf VIA Epia Boards) und vielleicht
 
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!)
 
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
+
*Dekodierung in Software, Ausgabe auf Overlay via [http://en.wikipedia.org/wiki/X_video_extension Xv] ("XVideo"), unterstützt von wohl allen AGP-Karten, laden über ''option "v4l"'' in XF86config.
''option "v4l"'' in XF86config.
+
 
*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
 
*Alles komplett über Treiber mit Hardwarebeschleunigung über DirectFB und Libsoftmpeg leider noch nicht unterstützt, da die libsoftmpeg noch entwickelt wird)
 
*Alles komplett über Treiber mit Hardwarebeschleunigung über DirectFB und Libsoftmpeg leider noch nicht unterstützt, da die libsoftmpeg noch entwickelt wird)
 
===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.
 
  
 
==Bilder==
 
==Bilder==
[[Bild:softdevice-plugin.jpg|thumb|none|''XV'']]
+
{|
 
+
|[[Bild:softdevice-plugin-00.jpg|thumb|none|''XV'']]
==Hardwareanforderungen==
+
|[[Bild:softdevice-plugin-01.jpg|thumb|none|''XV'']]
Hier sind einige Beispielkonfigurationen ('''bitte ergänzen'''):
+
 
+
{| border=1 cellpadding=4 cellspacing=0 style="empty-cells:show;"
+
|- bgcolor=#efefef
+
! CPU@MHz / RAM
+
! Grafikkarte
+
! CPU-Last
+
! Ausgabe
+
! Sonstiges
+
|-
+
| K6/2@450 / 128      || Matrox G200      || ~100%  ||      || ruckelt mächtig
+
|-
+
| Athlon@500 / 640    || Nvidia GF2MX400  || ~50-70% || Xv    || flüssige Darstellung
+
|-
+
| G4@1000 / 512        || ATI Radeon 9200  || ~50-70% || Xv    || flüssige Darstellung, Ton gestört
+
|-
+
| P3@600 / 128        || Matrox G450      || ~50%    ||      || flüssige Darstellung
+
|-
+
| Athlon@800 / 512    || ATI Radeon VE    ||        || Xv    || ruckelt
+
|-
+
| AthlonXP@1533 / 512  || ATI Radeon VE    ||  ~35 %  || Xv    || flüssige Darstellung
+
|-
+
| Athlon@1100 / 512    || Nvidia GF2MX200  || ~ 50%  ||      || flüssige Darstellung
+
|-
+
| Athlon@1333 / 512    || Nvidia GF FX5900 || ~30-40% || Xv    || flüssige Darstellung
+
|-
+
| AthlonXP@1900 / 512  || Nvidia FX5200    || ~23 %  ||      || flüssige Darstellung
+
|-
+
| AthlonXP@2000 / 512  || Nvidia FX5900XT  || ~14-18% || Xv    || flüssige Darstellung
+
|-
+
| AthlonXP@2200 / 512  || ATI Radeon 9500  || ~8%    || Vidix || flüssige Darstellung
+
|-
+
| Athlon64@3800 / 1024 || Nvidia GF FX5600 || ~11-16% || Xv    || flüssige Darstellung
+
 
|}
 
|}
 
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.
 
 
Desweiteren sind nvidia-Karten ab GF4 aufgrund von XvmC, das ein Teil der Videoverarbeitung übernimmt gut geeignet.
 
  
 
==Softwareanforderungen==
 
==Softwareanforderungen==
* ffmpeg >= '''0.4.8'''
+
* {{wikipedia|ALSA}}
* ALSA
+
* {{wikipedia|FFmpeg}}
 +
* {{wikipedia|Pkg-config}}
  
 
==Installation==
 
==Installation==
Ist ein wenig unterteilt, je nach dem was man möchte. Die ALSA Installation ist bereits hier beschrieben: [[LFS ALSA]].
+
===Optionen===
Wer ein Debian System nutzt, und ALSA nicht aus den Quellen bauen möchte, muss zusätzlich zu alsa-base noch "libasound2-dev" installieren.
+
{| class="wikitable"
 
+
===Basis (beinhaltet FB/XV Support)===
+
<pre>
+
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
+
</pre>
+
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:
+
<pre>
+
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
+
</pre>
+
 
+
Bei neueren cvs-Versionen von ffmpeg muss anstelle von <pre>make installlib</pre> folgendes eingegeben werden:
+
<pre>
+
make install-libs
+
</pre>
+
 
+
===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:
+
<pre>
+
./configure --prefix=/usr/local \
+
            --enable-shared \
+
            --enable-pp \
+
            --enable-gpl \
+
            --enable-a52
+
</pre>
+
+
===DirectFB Support===
+
<pre>
+
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
+
</pre>
+
 
+
===Vidix Support===
+
<pre>
+
cd $SOURCEDIR
+
tar xvzf vidix-cvs.tar.gz
+
cd vidix
+
./configure --prefix=/usr/local
+
make
+
make install
+
ldconfig
+
</pre>
+
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.
+
 
+
==Optionen==
+
{| border=1 cellpadding=2 cellspacing=0
+
 
|-
 
|-
| bgcolor=#efefef|XV_SUPPORT=1
+
| bgcolor=#efefef | XV_SUPPORT=1
 
| XV support von Stefan Lucke
 
| XV support von Stefan Lucke
 
|-
 
|-
| bgcolor=#efefef|DFB_SUPPORT=1
+
| bgcolor=#efefef | DFB_SUPPORT=1
| DFB ist sehr experimentel (funktioniert nur mit meiner matrox G200, kommentare erwünscht)
+
| DFB ist sehr experimentell (funktioniert nur mit meiner matrox G200, Kommentare erwünscht)
 
|-
 
|-
| bgcolor=#efefef|FB_SUPPORT=1
+
| bgcolor=#efefef | FB_SUPPORT=1
 
| FB ist nicht beschleunigt und sollte mit jedem FB mit 16bit Farbtiefe funtionieren
 
| FB ist nicht beschleunigt und sollte mit jedem FB mit 16bit Farbtiefe funtionieren
 
|-
 
|-
| bgcolor=#efefef|VIDIX_SUPPORT=1
+
| bgcolor=#efefef | VIDIX_SUPPORT=1
| Vidix support von Vadim Catana
+
| Vidix Unterstützung von Vadim Catana
 
|-
 
|-
| bgcolor=#efefef|LIBXDPMS_SUPPORT=1
+
| bgcolor=#efefef | LIBXDPMS_SUPPORT=1
 
| Set this if you want to use DPMS
 
| Set this if you want to use DPMS
 
|-
 
|-
| bgcolor=#efefef|PP_LIBAVCODEC=1
+
| bgcolor=#efefef | PP_LIBAVCODEC=1
 
| Enable the usage from some deinterlacing pp-filters of libavcodec
 
| Enable the usage from some deinterlacing pp-filters of libavcodec
 
|-
 
|-
| bgcolor=#efefef|SUSPEND_BY_KEY=1
+
| bgcolor=#efefef | SUSPEND_BY_KEY=1
 
| Set this if you want to be able to toggle suspend mode by keyboard XV only
 
| Set this if you want to be able to toggle suspend mode by keyboard XV only
 
|-
 
|-
| bgcolor=#efefef|USE_SUBPLUGINS=1
+
| bgcolor=#efefef | USE_SUBPLUGINS=1
 
| if you want output methods build as a single lib
 
| if you want output methods build as a single lib
 
|}
 
|}
  
<!-- ==Patches== -->
+
 
  
 
==Konfiguration==
 
==Konfiguration==
==Matrox G550 mit DVI-Ausgang und DirectFB==
+
Im Makefile muss eingestellt werden, welche Treiber-Variante man benutzen will und wo sich die benötigten [[Bibliothek]]en / [[Headerfile]]s befinden.
Folgende Konfiguration funktioniert bei mir sehr schön mit einer Matrox G550 Dual Head (DVI = Head1, VGA = Head2), derzeit nur einer Budget-Karte vom Typ Fujitsu Activy DVB-s, softdevice-0.2.0-CVS von letzter Woche mit dem Timing-Patch (softdevice.syncTimerMode = 2), directfb-0.9.22, ffmpeg-0.4.9, einem normalen DVI-D-Kabel und einem TV-Gerät BenQ DV3250 mit DVI/HDCP-Eingang:
+
  
{{Box Datei|/etc/fb.modes|
+
Dieses hat über das configure Skript des Plugins zu erfolgen.
<pre>
+
mode "1280x720-60"
+
  # D: 74.25 MHz, H: 45.00 kHz, V: 60.00 Hz
+
  geometry 1280 720 1280 720 32
+
  timings 13468 220 110 20 5 40 5
+
endmode
+
</pre>
+
}}
+
  
{{Box Datei|/etc/directfbrc|
+
shell> cd [[Struktur|$SOURCEDIR]]/VDR/PLUGINS/src/softdevice
<pre>
+
shell> sh configure (--help)
mode=1280x720
+
depth=32
+
pixelformat=ARGB
+
disable-module=keyboard
+
disable-module=joystick
+
disable-module=keyboard
+
disable-module=mutouch
+
disable-module=ps2mouse
+
disable-module=sdlinput
+
disable-module=serialmouse
+
disable-module=sonypi
+
</pre>
+
}}
+
  
Man beachte: es ist alles deselektiert außer LIRC (siehe Abschnitt zu LIRC weiter unten).
+
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.
  
AC3 über ALSA geht mit meinem Board (Asus A7V8X mit VT8235 und dem Asus-SPDIF-Blech) ganz prima. Dazu der '''Startaufruf in [[runvdr]]:'''
 
<pre>
 
VDRCMD="$VDRCMD -P 'softdevice -ao alsa:pcm=plug:spdif#ac3=plug:spdif# -vo dfb:'"
 
</pre>
 
 
Damit schickt das Softdevice-Modul alle Audio-Daten über plug:spdif.
 
 
Diese Mimik mit einem Athlon XP-M 2400+ (Barton Core) getaktet auf FSB333 und 2167 MHz (entsprechend einem Athlon XP 3000+) läuft damit auf 50-60% CPU-Last. Das [[Osdpip-plugin]] läuft damit nicht mehr flüssig! Bisweilen läuft AV-Sync etwas aus dem Ruder; dann hilft nur ein Neustart des VDR (Menu -> Einstellungen -> Neustart). Die Übertaktung steckt der XP-M locker weg, er läuft im Normalbetrieb mit ca. 47°C Kerntemperatur (Kühler: Arctic Copper Silent 2). Das Board selbst läuft damit innerhalb seiner Spezifikation.
 
 
(Anmerkung zu dem syncTimerMode-Patch: Ohne den spielt Softdevice nicht mit [[NVRAM_WakeUp]] zusammen, weil beide versuchen, über /dev/rtc an die Echtzeituhr zu kommen...)
 
 
Viel Spaß! (hmilz, 13.11.2005)
 
  
==IR Fernbedienung mit LIRC==
+
===IR Fernbedienung mit LIRC===
 
Wenn man [[LIRC]] nutzen will, um softdevice-dfb zu bedienen, muss man einige Tipps beachten.  
 
Wenn man [[LIRC]] nutzen will, um softdevice-dfb zu bedienen, muss man einige Tipps beachten.  
 
Zwingend nötig ist diese Vorgehensweise für die Cropping-Funktion mit einer Taste.  
 
Zwingend nötig ist diese Vorgehensweise für die Cropping-Funktion mit einer Taste.  
Zeile 271: Zeile 119:
 
"F3" ist hierbei die Taste "User3"; im Softdevice-Menu -> Cropping ist nach dem Lernen der Tasten entsprechend "User3" als Taste für "Bildausschnitt-Taste" zu konfigurieren. '''Vorsicht:''' dieses Beispiel könnt Ihr nicht einfach so nehmen, da die Hexcodes je nach Fernbedienung unterschiedlich sind. Das dient nur als Beispiel für die Namen der Einträge.  
 
"F3" ist hierbei die Taste "User3"; im Softdevice-Menu -> Cropping ist nach dem Lernen der Tasten entsprechend "User3" als Taste für "Bildausschnitt-Taste" zu konfigurieren. '''Vorsicht:''' dieses Beispiel könnt Ihr nicht einfach so nehmen, da die Hexcodes je nach Fernbedienung unterschiedlich sind. Das dient nur als Beispiel für die Namen der Einträge.  
  
Um die Tasten zu lernen, alle Einträge mit '''softdevice-dfb.*''' aus '''[[Struktur|$VDRCONFIG]]/[[remote.conf]]''' löschen und VDR starten. Ist alles richtig konfiguriert, kann man mit der als "User3" definierten Taste zyklisch durch die Cropping-Modi wechseln (Aus -> 4:3 -> 16:9 -> 14:9 -> Aus -> ...). Spaß macht das insbesondere, wenn man einen "echten" 16:9-Fernseher benutzt. :-)
+
Um die Tasten zu lernen, alle Einträge mit '''softdevice-dfb.*''' aus '''[[Struktur|$VDRCONFIG]]/[[remote.conf]]''' löschen und VDR starten. Ist alles richtig konfiguriert, kann man mit der als "User3" definierten Taste zyklisch durch die Cropping-Modi wechseln (Aus -> 4:3 -> 16:9 -> 14:9 -> Aus -> ...).
  
Viel Spaß! (hmilz, 13.11.2005)
 
  
<!-- ==Einstellungen== -->
+
===Parameter===
 
+
{| class="wikitable"
==Parameter==
+
|-
{| border=1 cellpadding=2 cellspacing=0
+
|- bgcolor=#efefef
+
 
!Parameter
 
!Parameter
 
!Beschreibung
 
!Beschreibung
Zeile 286: Zeile 131:
 
|-
 
|-
 
| -ao alsa:ac3=dev_name# || Alsa ausgabe Gerät für AC3 passthrough
 
| -ao alsa:ac3=dev_name# || Alsa ausgabe Gerät für AC3 passthrough
 +
|-
 +
| -ao oss:              || Ausgabe über das Open Sound System
 
|-
 
|-
 
| -ao dummy:            || Dummy ausgabe Gerät
 
| -ao dummy:            || Dummy ausgabe Gerät
Zeile 311: Zeile 158:
 
| -vo vidix:            || Ausgabe über Vidix-Treiber
 
| -vo vidix:            || Ausgabe über Vidix-Treiber
 
|-
 
|-
| -vo dummy              || Ausgabe über Dummy-Gerät
+
| -vo shm:              || Ausgabe in den SharedMemory. Anzeige (über X11/XVideo) nur, wenn das separate Programm ShmClient gestartet ist.
 +
|-
 +
| -vo dummy:             || Ausgabe über Dummy-Gerät
 
|-
 
|-
 
| -L <plugin_path_name>  || Suchpfad für das Laden der Subplugins (siehe Optionen: '''USE_SUBPLUGINS=1''')
 
| -L <plugin_path_name>  || Suchpfad für das Laden der Subplugins (siehe Optionen: '''USE_SUBPLUGINS=1''')
 
|}
 
|}
  
<!-- ==Bedienung== -->
+
===Tipps===
 
+
====Device ''erzwingen''====
==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 äußerte 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 ihm VDR immer abstürzt, sollte eine Version >= 0.0.8 verwenden.
+
 
+
* bei Debian/Ubuntu kann es zu dem Fehler "libvdr-softdevice.so.1.3.44: undefined symbol: dts_init" beim starten kommen, in diesem Fall einfach bei den FFMPEGLIBS noch -ldts anhängen
+
 
+
==Tipps==
+
 
VDR stellt das OSD auf der ersten Karte mit Decoder dar.<br>
 
VDR stellt das OSD auf der ersten Karte mit Decoder dar.<br>
 
Mit dem Plugin gibt es ein weiteres Device (inc. Decoder), es ist immer das letzte.<br>
 
Mit dem Plugin gibt es ein weiteres Device (inc. Decoder), es ist immer das letzte.<br>
Zeile 344: Zeile 181:
 
  #~ sed -i "s/^PrimaryDVB.*/PrimaryDVB = 4/" [[Struktur|$VDRCONFIG]]/setup.conf
 
  #~ sed -i "s/^PrimaryDVB.*/PrimaryDVB = 4/" [[Struktur|$VDRCONFIG]]/setup.conf
  
 +
====[[LIRC]]-Lernmodus====
 +
So kann man daß [[remote-plugin]] sparen und [[LIRC]]-Lernmodus und Steuerung direkt im Softdevice-Plugin (hier nur xv) implementieren. (video-xv.c / vdr-1.3.41)
  
So kann man daß Vdr-Remote-Plugin sparen und LIRC-Lernmodus und Steuerung direkt im Softdevice-Plugin (hier nur xv) implementieren. (video-xv.c/ vdr-1.3.41)
 
 
<pre>  
 
<pre>  
0) #include <vdr/lirc.h>
+
0) #include <vdr/lirc.h>
1) cLircRemote *xvLircRemote =NULL;
+
1) cLircRemote *xvLircRemote =NULL;
nach static cXvRemote *xvRemote = NULL;
+
nach static cXvRemote *xvRemote = NULL;
2) const char *LircDevice = NULL; und
+
2) const char *LircDevice = NULL; und
LircDevice = "/dev/lircd"; // hier ist es besser wenn man eine Option übergibt
+
LircDevice = "/dev/lircd"; // hier ist es besser wenn man eine Option übergibt
nach const char cursor_data[] = { 0x0 };
+
nach const char cursor_data[] = { 0x0 };
3) xvLircRemote = new cLircRemote(LircDevice);
+
3) xvLircRemote = new cLircRemote(LircDevice);
nach xvRemote = new cXvRemote ("softdevice-xv", this);
+
nach xvRemote = new cXvRemote ("softdevice-xv", this);
  
daliman.de
+
</pre>
</pre>  
+
====ShmClient====
<!-- ==Wunschliste== -->
+
  
==Snapshot==
+
Mittels der Option <pre>-vo shm:</pre> kann softdevice die Dekodierung in den shared Memory schreiben. Das bedeutet, es wird so lange nichts angezeigt, bis das externe (aber sich im Lieferumfang des Plugins befindliche) Programm <pre>ShmClient</pre> gestartet wird. Dieses  Programm liest die Daten dann aus dem shared Memory wieder aus und zeigt sie in einem X11-Fenster an. Sehr gut geeignet, wenn vdr beim Systemstart als Daemon gestartet werden soll und ab und an Fernsehen direkt am Bildschirm geschaut werden soll.
 +
 
 +
====Parameter in der setup.conf====
 +
Hier einige der Parameter und ihre Entsprechung im OSD-Menü von softdevice
 +
<pre>
 +
softdevice.bufferMode = 1
 +
0=sicher
 +
1=Suchlauf optimiert
 +
2=HDTV
 +
softdevice.Deinterlace Method = 1
 +
0=keine
 +
1=lavc
 +
2=FB-intern
 +
3=linblend
 +
4=linpol
 +
5=cubicipol
 +
6=median
 +
softdevice.PixelFormat = 2
 +
2=YUY2
 +
0=I420
 +
1=YV12
 +
softdevice.Postprocess Method = 0
 +
0=keine
 +
1=schnell
 +
2=standard
 +
softdevice.syncTimerMode = 1
 +
1=rtc
 +
2=sig
 +
0=usleep
 +
 
 +
 
 +
 +
</pre>
 +
====DirectFB und VDR non Root====
 +
Das Console Switching von DirectFB funktioniert nicht wenn der VDR nicht als Root ausgeführt wird. Im DirectFB Log sieht man dann z.B. folgendes
 +
<pre>(!) DirectFB/core/vt: VT_ACTIVATE failed!
 +
    --> Die Operation ist nicht erlaubt</pre>
 +
Dagegen hilft es im Quellcode des VDR (vdr.c) folgende Zeile
 +
  cap_t caps = cap_from_text("= cap_sys_time=ep");
 +
so zu ändern
 +
  cap_t caps = cap_from_text("= cap_sys_time,cap_sys_tty_config=ep");
 +
und dann den VDR mit der Option "-u" als User zu starten. Dadurch behält der VDR die notwendigen Konsolenrechte.
 +
 
 +
===Snapshot===
 
  cvs -z3 -d:pserver:anonymous@cvs.softdevice.berlios.de:/cvsroot/softdevice co softdevice
 
  cvs -z3 -d:pserver:anonymous@cvs.softdevice.berlios.de:/cvsroot/softdevice co softdevice
 +
 +
==Aktuelle Versionen==
 +
[http://developer.berlios.de/project/showfiles.php?group_id=2051&release_id=14504 0.0.5]
  
 
==Links==
 
==Links==
# [http://www.alsa-project.org ALSA]
+
# [http://softdevice.berlios.de Homepage des Plugins]
# [http://ffmpeg.sourceforge.net FFmpeg]
+
# [http://www.directfb.org DirectFB]
+
# [http://vidix.sourceforge.net VIDIX is (VID)eo (I)nterface for *n(iX)]
+
# [http://softdevice.berlios.de Homepage des Plugins (aktuelle Versionen)]
+
# [http://www.lucke.in-berlin.de Homepage des Plugins (ältere Versionen)]
+
# [http://www.k13zoo.de/vdr Homepage des Plugins (die ersten Versionen)]
+
# [http://www.linuxtv.org Libsoftmpeg]
+
  
[[Kategorie:Plugins]]
+
[[Kategorie:Veraltete Plugins]]
 
{{i18n|softdevice-plugin}}
 
{{i18n|softdevice-plugin}}

Aktuelle Version vom 1. September 2013, 10:23 Uhr

Inhaltsverzeichnis

[Bearbeiten] Beschreibung

Autor: Torgeir Veimo, Martin Wache, Stefan Lucke, Harald Milz

Dieses Plugin ist ein Ausgabe-Plugin für den VDR.

[Bearbeiten] Status

Letztes Update 04/2008

[Bearbeiten] Detaillierte Beschreibung

Das Plugin dient der MPEG-2-Decodierung in Software, wie auch das xine-plugin. Es wird vom VDR als vollwertiges Ausgabegerät erkannt, 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 DVB-Karte aufbauen.

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 (spezieller Operationsmodus der Grafikkarte) auszugeben. Dafür gibt es verschiedene Verfahrensweisen:

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

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)

[Bearbeiten] Bilder

XV
XV

[Bearbeiten] Softwareanforderungen

[Bearbeiten] Installation

[Bearbeiten] Optionen

XV_SUPPORT=1 XV support von Stefan Lucke
DFB_SUPPORT=1 DFB ist sehr experimentell (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 Unterstützung 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


[Bearbeiten] Konfiguration

Im Makefile muss eingestellt werden, welche Treiber-Variante man benutzen will und wo sich die benötigten Bibliotheken / Headerfiles befinden.

Dieses hat über das configure Skript des Plugins zu erfolgen.

shell> cd $SOURCEDIR/VDR/PLUGINS/src/softdevice
shell> sh configure (--help)

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.


[Bearbeiten] IR Fernbedienung mit LIRC

Wenn man LIRC nutzen will, um softdevice-dfb zu bedienen, muss man einige Tipps beachten. Zwingend nötig ist diese Vorgehensweise für die Cropping-Funktion mit einer Taste.

Zunächst ist das Remote-plugin im Startskript runvdr zu deaktivieren. Als nächstes erzeugt man sich mit irrecord eine Datei lircd.conf. Entscheidend ist hierbei die richtige Wahl der Tastennamen. Damit Directfb diese richtig an Softdevice weitergeben kann, ist es nötig, die DIKS_-Namen aus include/directfb_keyboard.h zu verwenden und zwar ohne den vorangestellten String DIKS_. Meine lircd.conf sieht beispielsweise so aus

Datei
/etc/lircd.conf
      begin codes
          POWER                    0x4190
          CHANNEL_UP               0x4350
          CHANNEL_DOWN             0x4340
          F3                       0x3E00
          RED                      0x3DB0
          GREEN                    0x40B0
          YELLOW                   0x41B0
          BLUE                     0x3DA0
          1                        0x4140
          2                        0x4170
          3                        0x4160
          4                        0x4110
          5                        0x4100
          6                        0x4130
          7                        0x4120
          8                        0x41D0
          9                        0x41C0
          0                        0x4150
          CURSOR_UP                0x3FA0
          CURSOR_DOWN              0x3FB0
          CURSOR_RIGHT             0x3FC0
          OK                       0x3FD0
          CURSOR_LEFT              0x3FF0
          MENU                     0x3F80
          EXIT                     0x4240
          REWIND                   0x4300
          PLAY                     0x4200
          FASTFORWARD              0x4330
          RECORD                   0x4220
          STOP                     0x4230
          PAUSE                    0x43C0
      end codes


"F3" ist hierbei die Taste "User3"; im Softdevice-Menu -> Cropping ist nach dem Lernen der Tasten entsprechend "User3" als Taste für "Bildausschnitt-Taste" zu konfigurieren. Vorsicht: dieses Beispiel könnt Ihr nicht einfach so nehmen, da die Hexcodes je nach Fernbedienung unterschiedlich sind. Das dient nur als Beispiel für die Namen der Einträge.

Um die Tasten zu lernen, alle Einträge mit softdevice-dfb.* aus $VDRCONFIG/remote.conf löschen und VDR starten. Ist alles richtig konfiguriert, kann man mit der als "User3" definierten Taste zyklisch durch die Cropping-Modi wechseln (Aus -> 4:3 -> 16:9 -> 14:9 -> Aus -> ...).


[Bearbeiten] Parameter

Parameter Beschreibung
-ao alsa:pcm=dev_name# Alsa ausgabe Gerät für analog und PCM out
-ao alsa:ac3=dev_name# Alsa ausgabe Gerät für AC3 passthrough
-ao oss: Ausgabe über das Open Sound System
-ao dummy: Dummy ausgabe Gerät
-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 Nutze maximal verfügbare Fläche
-vo xv:full Start in Vollbild
-vo fb: Ausgabe über Framebuffer Gerät
-vo dfb: Ausgabe über directFB
-vo dfb:mgatv Ausgabe über directFB (Matrox-Karten)
-vo dfb:viatv output via Unichrome TV-out
-vo dfb:triple enables triple buffering on back end scaler
-vo vidix: Ausgabe über Vidix-Treiber
-vo shm: Ausgabe in den SharedMemory. Anzeige (über X11/XVideo) nur, wenn das separate Programm ShmClient gestartet ist.
-vo dummy: Ausgabe über Dummy-Gerät
-L <plugin_path_name> Suchpfad für das Laden der Subplugins (siehe Optionen: USE_SUBPLUGINS=1)

[Bearbeiten] Tipps

[Bearbeiten] Device erzwingen

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 $VDRCONFIG/setup.conf
PrimaryDVB = 3
#~ sed -i "s/^PrimaryDVB.*/PrimaryDVB = 4/" $VDRCONFIG/setup.conf

[Bearbeiten] LIRC-Lernmodus

So kann man daß remote-plugin sparen und LIRC-Lernmodus und Steuerung direkt im Softdevice-Plugin (hier nur xv) implementieren. (video-xv.c / vdr-1.3.41)

 
0) #include <vdr/lirc.h>
1) cLircRemote *xvLircRemote =NULL;
nach static cXvRemote *xvRemote = NULL;
2) const char *LircDevice = NULL; und
LircDevice = "/dev/lircd"; // hier ist es besser wenn man eine Option übergibt
nach const char cursor_data[] = { 0x0 };
3) xvLircRemote = new cLircRemote(LircDevice);
nach xvRemote = new cXvRemote ("softdevice-xv", this);

[Bearbeiten] ShmClient

Mittels der Option
-vo shm:
kann softdevice die Dekodierung in den shared Memory schreiben. Das bedeutet, es wird so lange nichts angezeigt, bis das externe (aber sich im Lieferumfang des Plugins befindliche) Programm
ShmClient
gestartet wird. Dieses Programm liest die Daten dann aus dem shared Memory wieder aus und zeigt sie in einem X11-Fenster an. Sehr gut geeignet, wenn vdr beim Systemstart als Daemon gestartet werden soll und ab und an Fernsehen direkt am Bildschirm geschaut werden soll.

[Bearbeiten] Parameter in der setup.conf

Hier einige der Parameter und ihre Entsprechung im OSD-Menü von softdevice

softdevice.bufferMode = 1
					0=sicher
					1=Suchlauf optimiert
					2=HDTV
softdevice.Deinterlace Method = 1			
					0=keine
					1=lavc
					2=FB-intern
					3=linblend
					4=linpol
					5=cubicipol
					6=median
softdevice.PixelFormat = 2
					2=YUY2
					0=I420
					1=YV12
softdevice.Postprocess Method = 0
					0=keine
					1=schnell
					2=standard
softdevice.syncTimerMode = 1
					1=rtc
					2=sig
					0=usleep


 

[Bearbeiten] DirectFB und VDR non Root

Das Console Switching von DirectFB funktioniert nicht wenn der VDR nicht als Root ausgeführt wird. Im DirectFB Log sieht man dann z.B. folgendes

(!) DirectFB/core/vt: VT_ACTIVATE failed!
    --> Die Operation ist nicht erlaubt

Dagegen hilft es im Quellcode des VDR (vdr.c) folgende Zeile

 cap_t caps = cap_from_text("= cap_sys_time=ep");

so zu ändern

 cap_t caps = cap_from_text("= cap_sys_time,cap_sys_tty_config=ep");

und dann den VDR mit der Option "-u" als User zu starten. Dadurch behält der VDR die notwendigen Konsolenrechte.

[Bearbeiten] Snapshot

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

[Bearbeiten] Aktuelle Versionen

0.0.5

[Bearbeiten] Links

  1. Homepage des Plugins
In anderen Sprachen