378 lines
11 KiB
Markdown
378 lines
11 KiB
Markdown
@file README.txt @brief A software HD output device for VDR
|
||
|
||
Copyright (c) 2011 - 2013 by Johns. All Rights Reserved.
|
||
Copyright (c) 2018 by jojo61. All Rights Reserved.
|
||
|
||
Contributor(s):
|
||
|
||
jojo61
|
||
|
||
License: AGPLv3
|
||
|
||
This program is free software: you can redistribute it and/or modify
|
||
it under the terms of the GNU Affero General Public License as
|
||
published by the Free Software Foundation, either version 3 of the
|
||
License.
|
||
|
||
This program is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU Affero General Public License for more details.
|
||
|
||
$Id: 5267da021a68b4a727b479417334bfbe67bbba14 $
|
||
|
||
A software and GPU emulated UHD output device plugin for VDR.
|
||
|
||
o Video decoder CUVID or VAAPI
|
||
o Video output opengl or DRM
|
||
o Audio FFMpeg / Alsa / Analog
|
||
o Audio FFMpeg / Alsa / Digital
|
||
o Audio FFMpeg / OSS / Analog
|
||
o HDMI/SPDIF pass-through
|
||
o Software volume, compression, normalize and channel resample
|
||
o VDR ScaleVideo API
|
||
o CUDA deinterlacer
|
||
o Suspend / Dettach
|
||
o Support for ambilight
|
||
o Support for Screencopy
|
||
o PIP (Picture-in-Picture) (only for CUVID)
|
||
|
||
|
||
To compile you must have the 'requires' installed.
|
||
|
||
|
||
This is a fork of johns original softhddevice work and I reworked it to support HEVC with CUDA and opengl output.
|
||
Currently I have tested it with a GTX 1050 from NVIDIA. SD, HD and UHD is working.
|
||
|
||
Current Status NVIDIA:
|
||
The CUDA driver supports HEVC with 8 Bit and 10 Bit up to UHD resolution. Opengl is able to output also 10 Bit, but NVIDIA does not support to output 10 Bit via HDMI.
|
||
Only via DisplayPort you can get 10 Bit output to a compatible screen. This is a restriction from NVIDIA.
|
||
|
||
Current Status with VAAPI:
|
||
I tested it with Intel VAAPI. If you have problmes with the shaders then copy the drirc file in your home directory as .drirc
|
||
AMD VAAPI is broken by AMD and will not work currently.
|
||
|
||
You have to adapt the Makefile to your needs. I use FFMPEG 4.0
|
||
The Makefile expects the CUDA SDK in /usr/local/cuda. Currently it is tested with CUDA 10
|
||
|
||
This Version supports building with libplacebo. https://github.com/haasn/libplacebo
|
||
You have to enable it in the Makefile and install libplacebo yourself.
|
||
|
||
It also needs the NVIDIA driver 410.48 or newer as well as CUDA 10.
|
||
|
||
I recommend to use libplacebo. It has much better scaler and does colorconversion for HDR the correct way.
|
||
|
||
If your FFMEG supports it then you can enable YADIF in the Makefile and select between the buildin NVIDIA CUDA deinterlacer and the YADIF cuda deinterlacer.
|
||
|
||
Good luck
|
||
jojo61
|
||
|
||
Quickstart:
|
||
-----------
|
||
|
||
You have to adapt the Makefile. There are 3 possible Version that you can build:
|
||
|
||
softhdcuvid
|
||
This is for NVIDA cards and uses cuvid as decoder. It uses xcb for output and needs a X Server to run.
|
||
|
||
softhdvaapi
|
||
This is for INTEL cards and uses Vaapi as decoder. It uses xcb for output and needs a X Server to run.
|
||
|
||
softhddrm
|
||
This is for INTEL cards and also uses Vaapi as decoder. It uses the DRM API for output and
|
||
runs without X Server. There are several commandline options to select the resolution and refresh rate.
|
||
|
||
Install:
|
||
--------
|
||
1a) git
|
||
|
||
git clone git://github.com/jojo61/vdr-plugin-softhdcuvid.git
|
||
cd vdr-plugin-softhdcuvid
|
||
make
|
||
make install
|
||
|
||
You can edit Makefile to enable/disable Alsa / OSS
|
||
support. The default is to autodetect as much as possible.
|
||
|
||
You have to start vdr with -P 'softhdcuvid -d :0.0 ..<more option>.. '
|
||
|
||
Beginners Guide for libplacebo:
|
||
-------------------------------
|
||
When using libplacebo you will find several config options.
|
||
|
||
First of all you need to set the right scaler for each resolution:
|
||
Best you beginn with setting all to "bilinear". If that works ok for you, you can try to change them for more advanced scaler. I use ewa_robidouxsharp on my GTX1050, but your mileage may vary. Unfortunatly on INTEL not all scalers may work or crash.
|
||
|
||
You can enable a Scaler Test feature. When enabled then the screen is split.On the left half you will see the scaler defined by Scaler Test and on the right side you will see the scaler defined at the Resolution setting. There is as small black line between the halfs to remaind you that Scaler Test is activ.
|
||
|
||
Then you should set the Monitor Colorspace to "sRGB". This guarantees you the best colors on your screen.
|
||
At the moment all calculations internaly are done in RGB space and all cards output also RGB.
|
||
|
||
If you are colorblind you could try to remedy this with the Colorblind Settings. Realy only needed in rare cases.
|
||
|
||
All other settings can be in their default state.
|
||
|
||
|
||
|
||
Setup: environment
|
||
------
|
||
Following is supported:
|
||
|
||
DISPLAY=:0.0
|
||
x11 display name
|
||
|
||
only if alsa is configured
|
||
ALSA_DEVICE=default
|
||
alsa PCM device name
|
||
ALSA_PASSTHROUGH_DEVICE=
|
||
alsa pass-though (AC-3,E-AC-3,DTS,...) device name
|
||
ALSA_MIXER=default
|
||
alsa control device name
|
||
ALSA_MIXER_CHANNEL=PCM
|
||
alsa control channel name
|
||
|
||
only if oss is configured
|
||
OSS_AUDIODEV=/dev/dsp
|
||
oss dsp device name
|
||
OSS_PASSTHROUGHDEV=
|
||
oss pass-though (AC-3,E-AC-3,DTS,...) device name
|
||
OSS_MIXERDEV=/dev/mixer
|
||
oss mixer device name
|
||
OSS_MIXER_CHANNEL=pcm
|
||
oss mixer channel name
|
||
|
||
Setup: /etc/vdr/setup.conf
|
||
------
|
||
Following is supported:
|
||
|
||
softhddevice.MakePrimary = 0
|
||
0 = no change, 1 make softhddevice primary at start
|
||
|
||
softhddevice.HideMainMenuEntry = 0
|
||
0 = show softhddevice main menu entry, 1 = hide entry
|
||
|
||
softhddevice.Osd.Width = 0
|
||
0 = auto (=display, unscaled) n = fixed osd size scaled for display
|
||
softhddevice.Osd.Height = 0
|
||
0 = auto (=display, unscaled) n = fixed osd size scaled for display
|
||
|
||
<res> of the next parameters is 576i, 720p, 1080i_fake or 1080i.
|
||
1080i_fake is 1280x1080 or 1440x1080
|
||
1080i is "real" 1920x1080
|
||
|
||
softhddevice.<res>.Scaling = 0
|
||
0 = normal, 1 = fast, 2 = HQ, 3 = anamorphic
|
||
|
||
softhddevice.<res>.Deinterlace = 0
|
||
0 = bob, 1 = weave, 2 = temporal, 3 = temporal_spatial, 4 = software
|
||
(only 0, 1, 4 supported with VA-API)
|
||
|
||
softhddevice.<res>.SkipChromaDeinterlace = 0
|
||
0 = disabled, 1 = enabled (for slower cards, poor qualit<69>t)
|
||
|
||
softhddevice.<res>.InverseTelecine = 0
|
||
0 = disabled, 1 = enabled
|
||
|
||
softhddevice.<res>.Denoise = 0
|
||
0 .. 1000 noise reduction level (0 off, 1000 max)
|
||
|
||
softhddevice.<res>.Sharpness = 0
|
||
-1000 .. 1000 noise reduction level (0 off, -1000 max blur,
|
||
1000 max sharp)
|
||
|
||
softhddevice.<res>.CutTopBottom = 0
|
||
Cut 'n' pixels at at top and bottom of the video picture.
|
||
|
||
softhddevice.<res>.CutLeftRight = 0
|
||
Cut 'n' pixels at at left and right of the video picture.
|
||
|
||
softhddevice.AudioDelay = 0
|
||
+n or -n ms
|
||
delay audio or delay video
|
||
|
||
softhddevice.AudioPassthrough = 0
|
||
0 = none, 1 = PCM, 2 = MPA, 4 = AC-3, 8 = EAC-3, -X disable
|
||
|
||
for PCM/AC-3/EAC-3 the pass-through device is used and the audio
|
||
stream is passed undecoded to the output device.
|
||
z.b. 12 = AC-3+EAC-3, 13 = PCM+AC-3+EAC-3
|
||
note: MPA/DTS/TrueHD/... aren't supported yet
|
||
negative values disable passthrough
|
||
|
||
softhddevice.AudioDownmix = 0
|
||
0 = none, 1 = downmix
|
||
Use ffmpeg/libav downmix of AC-3/EAC-3 audio to stereo.
|
||
|
||
softhddevice.AudioSoftvol = 0
|
||
0 = off, use hardware volume control
|
||
1 = on, use software volume control
|
||
|
||
softhddevice.AudioNormalize = 0
|
||
0 = off, 1 = enable audio normalize
|
||
|
||
softhddevice.AudioMaxNormalize = 0
|
||
maximal volume factor/1000 of the normalize filter
|
||
|
||
softhddevice.AudioCompression = 0
|
||
0 = off, 1 = enable audio compression
|
||
|
||
softhddevice.AudioMaxCompression = 0
|
||
maximal volume factor/1000 of the compression filter
|
||
|
||
softhddevice.AudioStereoDescent = 0
|
||
reduce volume level (/1000) for stereo sources
|
||
|
||
softhddevice.AudioBufferTime = 0
|
||
0 = default (336 ms)
|
||
1 - 1000 = size of the buffer in ms
|
||
|
||
softhddevice.AutoCrop.Interval = 0
|
||
0 disables auto-crop
|
||
n each 'n' frames auto-crop is checked.
|
||
|
||
softhddevice.AutoCrop.Delay = 0
|
||
if auto-crop is over 'n' intervals the same, the cropping is
|
||
used.
|
||
|
||
softhddevice.AutoCrop.Tolerance = 0
|
||
if detected crop area is too small, cut max 'n' pixels at top and
|
||
bottom.
|
||
|
||
softhddevice.Background = 0
|
||
32bit RGBA background color
|
||
(Red * 16777216 + Green * 65536 + Blue * 256 + Alpha)
|
||
or hex RRGGBBAA
|
||
grey 127 * 16777216 + 127 * 65536 + 127 * 256 => 2139062016
|
||
in the setup menu this is entered as (24bit RGB and 8bit Alpha)
|
||
(Red * 65536 + Green * 256 + Blue)
|
||
|
||
softhddevice.StudioLevels = 0
|
||
0 use PC levels (0-255) with vdpau.
|
||
1 use studio levels (16-235) with vdpau.
|
||
|
||
softhddevice.Suspend.Close = 0
|
||
1 suspend closes x11 window, connection and audio device.
|
||
(use svdrpsend plug softhddevice RESU to resume, if you have no lirc)
|
||
|
||
softhddevice.Suspend.X11 = 0
|
||
1 suspend stops X11 server (not working yet)
|
||
|
||
softhddevice.60HzMode = 0
|
||
0 disable 60Hz display mode
|
||
1 enable 60Hz display mode
|
||
|
||
softhddevice.SoftStartSync = 0
|
||
0 disable soft start of audio/video sync
|
||
1 enable soft start of audio/video sync
|
||
|
||
softhddevice.BlackPicture = 0
|
||
0 disable black picture during channel switch
|
||
1 enable black picture during channel switch
|
||
|
||
softhddevice.ClearOnSwitch = 0
|
||
0 keep video und audio buffers during channel switch
|
||
1 clear video and audio buffers on channel switch
|
||
|
||
softhddevice.Video4to3DisplayFormat = 1
|
||
0 pan and scan
|
||
1 letter box
|
||
2 center cut-out
|
||
|
||
softhddevice.VideoOtherDisplayFormat = 1
|
||
0 pan and scan
|
||
1 pillar box
|
||
2 center cut-out
|
||
|
||
softhddevice.pip.X = 79
|
||
softhddevice.pip.Y = 78
|
||
softhddevice.pip.Width = 18
|
||
softhddevice.pip.Height = 18
|
||
PIP pip window position and size in percent.
|
||
|
||
softhddevice.pip.VideoX = 0
|
||
softhddevice.pip.VideoY = 0
|
||
softhddevice.pip.VideoWidth = 0
|
||
softhddevice.pip.VideoHeight = 0
|
||
PIP video window position and size in percent.
|
||
|
||
softhddevice.pip.Alt.X = 0
|
||
softhddevice.pip.Alt.Y = 50
|
||
softhddevice.pip.Alt.Width = 0
|
||
softhddevice.pip.Alt.Height = 50
|
||
PIP alternative pip window position and size in percent.
|
||
|
||
softhddevice.pip.Alt.VideoX = 0
|
||
softhddevice.pip.Alt.VideoY = 0
|
||
softhddevice.pip.Alt.VideoWidth = 0
|
||
softhddevice.pip.Alt.VideoHeight = 50
|
||
PIP alternative video window position and size in percent.
|
||
|
||
|
||
Setup: /etc/vdr/remote.conf
|
||
------
|
||
|
||
Add "XKeySym." definitions to /etc/vdr/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
|
||
|
||
Commandline:
|
||
------------
|
||
|
||
Use vdr -h to see the command line arguments supported by the plugin.
|
||
|
||
-a audio_device
|
||
|
||
Selects audio output module and device.
|
||
"" to disable audio output
|
||
/... to use oss audio module (if compiled with oss
|
||
support)
|
||
other to use alsa audio module (if compiled with alsa
|
||
support)
|
||
|
||
SVDRP:
|
||
------
|
||
|
||
Use 'svdrpsend.pl plug softhddevice HELP'
|
||
or 'svdrpsend plug softhddevice HELP' to see the SVDRP commands help
|
||
and which are supported by the plugin.
|
||
|
||
Keymacros:
|
||
----------
|
||
|
||
See keymacros.conf how to setup the macros.
|
||
|
||
This are the supported key sequences:
|
||
|
||
@softhdcuvid Blue 1 0 disable pass-through
|
||
@softhdcuvid Blue 1 1 enable pass-through
|
||
@softhdcuvid Blue 1 2 toggle pass-through
|
||
@softhdcuvid Blue 1 3 decrease audio delay by 10ms
|
||
@softhdcuvid Blue 1 4 increase audio delay by 10ms
|
||
@softhdcuvid Blue 1 5 toggle ac3 mixdown
|
||
@softhdcuvid Blue 2 0 disable fullscreen
|
||
@softhdcuvid Blue 2 1 enable fullscreen
|
||
@softhdcuvid Blue 2 2 toggle fullscreen
|
||
|
||
Running:
|
||
--------
|
||
|
||
Click into video window to toggle fullscreen/window mode, only if you
|
||
have a window manager running.
|
||
|
||
|
||
Known Bugs:
|
||
-----------
|
||
SD Streams not working very well on vaapi
|
||
|
||
|
||
|