Softdevice-plugin

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Beschreibung

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

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

Status

Letztes Update 04/2008

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)

Bilder

XV
XV

Softwareanforderungen

Installation

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


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.


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


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)

Tipps

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

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

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.

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


 

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.

Snapshot

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

Aktuelle Versionen

0.0.5

Links

  1. Homepage des Plugins