Softhddevice-plugin
Inhaltsverzeichnis |
Beschreibung
Autor: Johns
Ein HDTV Ausgabe Plugin für VDR mit GPU Unterstützung.
- Video VA-API/VA-API (mit Intel, NVIDIA und AMD Unterstützung)
- Video CPU/VA-API
- Video VDPAU/VDPAU
- Video CPU/VDPAU
- Audio FFMpeg/Alsa/Analog
- Audio FFMpeg/Alsa/Digital
- Audio FFMpeg/OSS/Analog
- HDMI/SPDIF Passthrough
- VA-API bob software deinterlace
- Auto-crop
Status
Letztes Update 03/2013
Softwareanforderungen
- ffmpeg >=0.7
- alsa-lib or alsa oss emulation
- Video Acceleration (VA) API for Linux (libva)
Einen der folgenden Treiber
- x11-libs/libva-intel-driver - HW video decode support for Intel integrated graphics
- x11-libs/vdpau-video - VDPAU Backend for Video Acceleration (VA) API
- x11-libs/xvba-video - XVBA Backend for Video Acceleration (VA) API
und
- x11-libs/libxcb - X C-language Bindings library
- x11-libs/xcb-util
- x11-libs/xcb-util-wm
- x11-libs/xcb-util-keysyms >= 0.3.8 - X C-language Bindings library
- x11-libs/libX11 - X.Org X11 library
Warning: libav is not supported, expect many bugs with it.
Installation
cd vdr-plugin-softhddevice make VDRDIR=<path-to-your-vdr-files> LIBDIR=.
gentoo:
make VDRDIR=/usr/include/vdr LIBDIR=.
- tarball
Download latest version from: [1]
tar vxf vdr-softhddevice-*.tar.bz2 cd softhddevice-* make VDRDIR=<path-to-your-vdr-files> LIBDIR=.
You can edit Makefile to enable/disable VDPAU / VA-API / Alsa / OSS support.
Konfiguration
Parameter
Parameter | Beschreibung |
---|---|
-a audio_device | Selects audio output module and device (fe. alsa: hw:0,0 oss: /dev/dsp) "" - to disable audio output |
-p audio_device | audio device for pass-through (hw:0,1 or /dev/dsp1) |
-c channel_name | audio mixer channel name (fe. PCM) |
-d display | display of x11 server (fe. :0.0) |
-D | start plugin detached, meaning it does not open a window on the X server. svdrp command ATTA shows the window (This information comes from YaVDR part of VDR portal |
-f | start with fullscreen window (only with window manager) |
-g geometry | x11 window geometry WxH+X+Y |
-v device | video device (va-api, vdpau, noop) |
-s | start in suspended mode |
-x | start x11 server |
-w workaround | enable/disable workarounds no-hw-decoder - disable hw decoder, use software decoder only |
xorg.conf(.d)
Der X Server sollte so konfiguriert werden, dass Power Magament deaktiviert ist und der Bildschirm/TV mit genau 50Hz non-interlaced arbeitet.
Section "ServerLayout" ... Option "NoPM" "true" Option "BlankTime" "0" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "0" EndSection
Die Bildwiederholrate lässt sich z.B. mit xrandr prüfen (Stern = aktuelle Auflösung). Bei Bedarf lässt sich die Auflösung durch Einfügen einer passenden Modeline in die xorg.conf ändern.
xrandr Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 16384 x 16384 DVI-I-0 disconnected primary (normal left inverted right x axis y axis) VGA-0 disconnected (normal left inverted right x axis y axis) DVI-I-1 disconnected (normal left inverted right x axis y axis) HDMI-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 1150mm x 650mm 1920x1080 60.00 + 59.94 50.00* 29.97 25.00 23.97 60.05 60.00 50.04 1280x1024 60.02 1280x720 60.96 60.00 59.94 50.00 1024x768 60.00 800x600 60.32 720x576 50.00 50.08 720x480 59.94 640x480 59.95 59.94 59.93
Beispiel einer 1920x1080 Modeline
Section "Monitor" (..) Modeline "1920x1080_50" 148.500 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync EndSection
Hinweis: Die Wiederholrate ergibt sich im Beispiel aus einem Pixelclock von 148.5MHz und 2640 Pixeln je Zeile und 1125 Zeilen je Frame: 148.5MHz / (2640 * 1125) = 50Hz. Aus einer Modeline kann also unmittelbar die Bild-Wiederholrate berechnet werden.
Einstellungen
remote.conf
Add "XKeySym." definitions to $VDRCONFIG/remote.conf to control the vdr and plugin with the connected input device. fe.
XKeySym.Up Up XKeySym.Down Down ...
Additional to the x11 input sends the window close button "Close".
fe.
XKeySym.Power Close
keymacros.conf
The following macros can be used for the PIP feature:
<Taste> @softhddevice 1 # Enable detached mode <Taste> @softhddevice 2 # Toggle on/off <Taste> @softhddevice 3 # PIP Zap Mode (not implemented) <Taste> @softhddevice 4 # PIP Channel+ <Taste> @softhddevice 5 # PIP Channel- <Taste> @softhddevice 6 # PIP on/swap channels <Taste> @softhddevice 7 # PIP Swap position <Taste> @softhddevice 8 # PIP Close
Umgebungsvariablen
DISPLAY=:0.0 | X11 Display Name |
NO_HW=1 | wenn 1, keine Hardwaredekoder verwenden |
NO_MPEG_HW=1 | wenn 1, keine Hardwaredekoder für MPEG1/2 verwenden |
STUDIO_LEVELS=1 | wenn 1, dann Studio Levels mit VDPAU verwenden (veraltet, nun als Plugin-Setupparameter (setup.conf) verfügbar) |
folgende Variablen nur bei Verwendung von ALSA: | |
ALSA_DEVICE=default | ALSA PCM Gerätename |
ALSA_AC3_DEVICE= | ALSA Gerät für AC3 Pass-Through |
ALSA_MIXER=default | ALSA-Mixer Gerätname |
ALSA_MIXER_CHANNEL=PCM | ALSA-Mixer Kanalname |
folgende Variablen nur bei Verwendung von OSS: | |
OSS_AUDIODEV=/dev/dsp | OSS DSP Gerätename |
OSS_AC3_AUDIODEV= | OSS AC3 Pass-Through Gerätename |
OSS_MIXERDEV=/dev/mixer | OSS-Mixer Gerätename |
OSS_MIXER_CHANNEL=pcm | OSS-Mixer Kanalname |
setup.conf
softhddevice.MakePrimary = 1 | 0 = unverändert, 1 softhddevice wird Primärgerät beim Start |
softhddevice.HideMainMenuEntry = 0 | 0 = zeige Hauptmenüeintrag von softhddevice, 1 = verstecke Eintrag |
<res> der folgenden Paramenter ist 576i, 720p, 1080i_fake oder 1080i. 1080i_fake sind "krumme" Auflösungen wie 1280x1080 oder 1440x1080 |
|
softhddevice.<res>.Scaling = 0 | 0 = normal, 1 = fast, 2 = HighQuality, 3 = anamorphic |
softhddevice.<res>.Deinterlace = 0 | 0 = bob, 1 = weave, 2 = temporal, 3 = temporal_spatial, 4 = software
(bei VAAPI nur 0 und 1 unterstützt) |
softhddevice.<res>.SkipChromaDeinterlace = 0 | 0 = nicht verwendet, 1 = verwendet (für weniger leistungsfähige Grafikkarten, schlechtere Qualität) |
softhddevice.<res>.Denoise = 0 | 0 .. 1000 Rauschreduzierung (0 aus, 1000 maximal) |
softhddevice.<res>.Sharpness = 0 | -1000 .. 1000 Schärfeneinstellung (0 aus, -1000 maximal unscharf, 1000 maximal scharf) |
softhddevice.AudioDelay = 0 | Tonversatz +n oder -n in ms |
softhddevice.AudioPassthrough = 0 | 0 = nicht verwendet, 1 = AC-3, für AC-3 wird das Pass-Through Gerät verwendet. |
softhddevice.AutoCrop.Interval = 0 | 0 deaktiviert Autocrop
n: Autocrop prüft alle 'n' Frames. |
softhddevice.AutoCrop.Delay = 0 | Sofern 'n' geprüfte Intervalle gleich sind, wird der erkannte Crop-Bereich abgeschnitten. Je größer desto länger dauert es das umgeschaltet wird. |
softhddevice.AutoCrop.Tolerance = 0 | Wenn der ermittelte Crop-Bereich zu klein ist, werden maximal 'n' Pixel oben und unten abgeschnitten. Je größer desto mehr Pixel können weggeschnitten werden, wenn nicht 100% 16:9 oder 14:9. |
softhddevice.SkipLines = 0 | Schneide 'n' Pixel Zeilen oben und unten des Videos weg. |
softhddevice.StudioLevels = 0 | 0 verwende PC Levels (0-255) mit VDPAU. 1 verwende Studiolevels (16-235)mit vdpau. |
softhddevice.Suspend.Close = 0 | 1 stoppt softhddevice und schliesst das X11 Fenster, Verbindungen und das Audiogerät.
(nutze svdrpsend plug softhddevice RESU zum Fortsetzen, wenn LIRC nicht verwendet wird) |
softhddevice.Suspend.X11 = 0 | 1 beendet ebenfalls den X11-Server beim Stoppen von softhddevice (derzeit noch ohne Funktion) |
softhddevice.60HzMode = 0 | 0 deaktiviert den 60Hz-Modus, 1 aktiviert den 60Hz-Modus (z.B. für LC-Displays) |
softhddevice.SoftStartSync = 0 | 0 deaktiviert eine weiche Video/Audiosyncronisation, 1 aktiviert diese |
VideoDisplayFormat = ? | Auswahl des Modus der Videoanzeige: 0 pan and scan 1 letter box 2 center cut-out (VDR-Einstellung) |
SVDRP Befehle
Parameter | Beschreibung |
---|---|
SUSP | Suspend plugin. The plugin is suspended to save energie. Depending on the setup 'softhddevice.Suspend.Close = 0' only the video and audio output is stopped or with 'softhddevice.Suspend.Close = 1' the video and audio devices are closed. If 'softhddevice.Suspend.X11 = 1' is set and the X11 server was started by the plugin, the X11 server would also be closed. (Stopping X11 while suspended isn't supported yet) |
RESU | Resume plugin. Resume the suspended plugin. The plugin could be suspended by the command line option '-s' or by a previous SUSP command. If the x11 server was stopped by the plugin, it will be restarted. |
DETA | Dettach plugin. The plugin will be detached from the audio, video and DVB devices. Other programs or plugins can use them now. |
ATTA <-d display> <-a audio> <-p pass> | Attach plugin. Attach the plugin to audio, video and DVB devices. Use: -d display display of x11 server (fe. :0.0) -a audio audio device (fe. alsa: hw:0,0 oss: /dev/dsp) -p pass audio device for pass-through (hw:0,1 or /dev/dsp1) |
PRIM <n> | Make <n> the primary device. <n> is the number of device. Without number softhddevice becomes the primary device. If becoming primary, the plugin is attached to the devices. If loosing primary, the plugin is detached from the devices. |
HOTK <key> | Execute hotkey. <key> is the hotkey number, following are supported: 10: disable audio pass-through 11: enable audio pass-through 12: toggle audio pass-through 13: decrease audio delay by 10ms 14: increase audio delay by 10ms 20: disable fullscreen 21: enable fullscreen 22: toggle fullscreen 23: disable auto-crop 24: enable auto-crop 25: toggle auto-crop 30: stretch 4:3 to display 31: pillar box 4:3 in display 32: center cut-out 4:3 to display 39: rotate 4:3 to display zoom mode 40: stretch other aspect ratios to display 41: letter box other aspect ratios in display 42: center cut-out other aspect ratios to display 49: rotate other aspect ratios to display zoom mode |
STAT | Display SuspendMode of the plugin. reply code is 910 + SuspendMode SUSPEND_EXTERNAL == -1 (909) NOT_SUSPENDED == 0 (910) SUSPEND_NORMAL == 1 (911) SUSPEND_DETACHED == 2 (912) |
3DOF | turns 3D OSD off. |
3DTB | enable 3D OSD Top and Bottom. |
3DSB | enable 3D OSD Side by Side. |
HELP <command> | prints out HELP for <command> |
Sonstiges
Tipps
Audio
- Kein Ton bei 6 Kanal Ton
- Entweder kann die Soundkarte kein 6 Kanalton oder libav/ffmpeg hat Probleme beim Umwandeln. Dazu im .asoundrc im Heimverzeichnis des VDR Benutzers oder global zu /etc/asound.conf hinzufügen:
pcm.51to20 { type route slave.pcm { type hw card <deine karte> device <dein device> channels 2 } ttable.0.0 1 # front links -> links ttable.1.1 1 # front rechts -> rechts ttable.2.0 0.707 # hinten links -> links, Dämpfung 3dB ttable.3.1 0.707 # hinten rechts -> rechts, Dämpfung 3dB ttable.4.0 0.5 # zentrum -> links, Dämpfung 6dB ttable.4.1 0.5 # zentrum -> rechts, Dämpfung 6dB ttable.5.0 0.5 # basskanal -> links, Dämpfung 6dB ttable.5.1 0.5 # basskanal -> rechts, Dämpfung 6dB }
Dann bei vdr Argument fürs plugin '--plugin="softhddevice ... -a pcm.51to20 ..."' hinzufügen oder ändern. Dann im Menu -> Setup -> Plugins -> softhddevice -> Audio pass-through None stellen.
- Keine Lautstärkenregelung möglich
- Analog
softhddevice regelt den "PCM" Regler automatisch. Wenn dieser anders heißt, kann man dies softhddevice mitteilen. Dazu mit "alsamixer" nachsehen wie dieser nun heißt. "Master" regelt alle Eingänge, zur Not kann man diesen nehmen. Bei Rechnern mit 6 Analogen Ausgängen ist es meist "Front". Das Vdr Startscript um
export ALSA_MIXER_CHANNEL=Front
ergänzen.
- Digital
Digitale Ausgänge kann softhddevice nicht regeln. (noch nicht)
Mit diesem Eintrag in asound.conf kann man den Digitalen Ausgang trotzdem regeln.
pcm.!default hdmi_complete pcm.hdmi_hw { type hw card 1 # <- Hier die Nummer der Karte device 7 # <- Nummer des Device } pcm.hdmi_formatted { type plug slave { pcm hdmi_hw #rate 48000 # <- Optional! Hier die gewünschte Rate. #channels 2 # <- Optional! Anzahl der Kanäle. } } pcm.hdmi_complete { type softvol slave.pcm hdmi_formatted control.name hdmi_volume control.card 1 # <- Hier die Nummer der Karte }
Nun muß man noch softhddevice mitteilen, welchen Regler es regeln soll. Dazu das Vdr Startscript um
export ALSA_MIXER_CHANNEL=hdmi_volume
ergänzen.
Logmeldungen zum Timing
z.b. im Syslog
Jul 12 01:43:20 [vdr] video: TT:TT:TT.TTT +SS AAAA DDD/\ms BB+C v-buf
TT:TT:TT.TTT Ist der aktuelle Videozeitstempel, damit man Fehler in Aufnahmen wiederfindet. Wenn der Fehler immer an der gleichen Stelle auftritt.
+SS Das ist der aktuelle Audio Video Abstand in ms. Ob nun bei + der Ton vor dem Bild ist oder umgekehrt keine Ahnung. Die 0 ist nicht wirklich der optimale Wert, da durch Verzögerungen im Kernel oder Treibern, sowohl Bild als Ton verzögert werden können. Auch ein Fernseher mit seinen Bildverbessern oder ein A/V Receiver hat noch zusätzliche unbekannte Verzögerungen. Dieser Wert sollte sich nach max 1 min auf einen konstanten Wert einbendeln. +8888 sagt das kein A/V Sync mehr versucht wird.
AAAA Dies ist die Größe des Audiobuffers in ms. Enthält den Plugin Buffer und Kernel Buffer. Je kleiner desto schneller ging und geht das Umschalten, Bei zu kleinen Werten gibt es Audioaussetzer und diese führen zu Bild Mikrorucklern.
DDD Dieser Wert zeigt den max. Fehler bei den Zeitstempeln in ms an. Normalerweise erwartet man, das ein Bild alle 20ms kommt. Kommt eins früher oder später dann wird der Fehler gemerkt und hier angezeigt. Manche Sender haben einen konstanten Fehler, dieser kommt so vom Sender und wird von ffmpeg/libav nicht abgefangen. Kann aber auch bei Störungen entstehen.
BB Wieviel undekodiertes Video gebuffert ist.
C Wieviele fertig dekodierte Bilder gebuffert sind. Sind im Moment max 8 für Interlaced und 4 für 720p.
Siehe: Ton und Bild asynchron
Bugs und Wünsche
GIT Snapshot
git clone git://projects.vdr-developer.org/vdr-plugin-softhddevice.git
Hier gibt es einen Fork mit HEVC Unterstützung.
git clone https://github.com/jojo61/vdr-plugin-softhddevice.git
Und folgender Fork unterstützt VA-API, HEVC und aktuelle ffmpeg-Versionen:
git clone https://github.com/pesintta/vdr-plugin-softhddevice.git