1
0
mirror of https://github.com/jojo61/vdr-plugin-softhdcuvid.git synced 2023-10-10 13:37:41 +02:00
Go to file
2018-10-08 22:15:10 +02:00
po Initial commit 2018-08-19 11:45:46 +02:00
.gitignore Removed unused Konfigs 2018-08-22 21:04:52 +02:00
AGPL-3.0.txt Initial commit 2018-08-19 11:45:46 +02:00
audio.c Initial commit 2018-08-19 11:45:46 +02:00
audio.h Initial commit 2018-08-19 11:45:46 +02:00
ChangeLog Initial commit 2018-08-19 11:45:46 +02:00
codec.c fixed SURFACES full 2018-10-08 17:02:12 +02:00
codec.h improve OSD with screenresize 2018-09-28 17:02:56 +02:00
common.h Initial commit 2018-08-19 11:45:46 +02:00
iatomic.h Initial commit 2018-08-19 11:45:46 +02:00
Makefile enable DPMS 2018-10-05 09:54:04 +02:00
misc.h Initial commit 2018-08-19 11:45:46 +02:00
openglosd.cpp more DETA fixes 2018-09-30 13:20:34 +02:00
openglosd.h Aspect fix for SD and more mutex for OSD 2018-09-25 16:29:03 +02:00
README.md GRAB enabled 2018-10-04 16:49:06 +02:00
README.txt GRAB enabled 2018-10-04 16:49:06 +02:00
ringbuffer.c Initial commit 2018-08-19 11:45:46 +02:00
ringbuffer.h Initial commit 2018-08-19 11:45:46 +02:00
shaders.h GRAB enabled 2018-10-04 16:49:06 +02:00
shaders.txt Initial commit 2018-08-19 11:45:46 +02:00
softhdcuvid.cpp fixed SURFACES full 2018-10-08 17:02:12 +02:00
softhddev.c more debug for UHD 2018-10-07 15:51:51 +02:00
softhddev.h more Frame Statistik 2018-10-07 13:31:52 +02:00
softhddevice_service.h Initial commit 2018-08-19 11:45:46 +02:00
softhddevice.h Initial commit 2018-08-19 11:45:46 +02:00
video.c fixed memory leak in grab 2018-10-08 22:15:10 +02:00
video.h more Frame Statistik 2018-10-07 13:31:52 +02:00

@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 CPU / VDPAU
o Video output opengl
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 Autocrop
o Suspend / Dettach
o PIP (Picture-in-Picture) (not working yet)

To compile you must have the 'requires' installed.

This is a fork of johns original softhddevice work and I reworked ist to support HEVC with CUDA and opengl output. Currently I have tested it with a GTX 1050 from NVIDIA. HD and UHD ist working, but SD ist instable.

Current Status NVIDA: 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 ompatible screen. This is a restriction from NVIDIA.

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 9.1

Unfortunatly FFMEG has a bug with deinterlacing cuda frames. So you have to patch the file in libavcodec/cuviddec.c

Somewhere near line 860 depending on your release: old: ctx->frame_queue = av_fifo_alloc(ctx->nb_surfaces * sizeof(CuvidParsedFrame));

new: ctx->frame_queue = av_fifo_alloc((ctx->nb_surfaces + 2 ) * sizeof(CuvidParsedFrame));

Good luck jojo61

Quickstart:

Just type make and use.

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>..  -v cuvid'

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 Stream not working very well
RESUME starts wirh black screen (channelswitch needed)

Requires:

media-video/vdr (version >=1.7.xx)
	Video Disk Recorder - turns a pc into a powerful set top box
	for DVB.
	http://www.tvdr.de/

media-video/ffmpeg (version >=0.7)
	Complete solution to record, convert and stream audio and
	video. Includes libavcodec and libswresample.
	http://ffmpeg.org
media-libs/alsa-lib
	Advanced Linux Sound Architecture Library
	http://www.alsa-project.org
or
kernel support for oss/oss4 or alsa oss emulation

x11-libs/libva (deprecated)
	Video Acceleration (VA) API for Linux
	http://www.freedesktop.org/wiki/Software/vaapi
x11-libs/libva-intel-driver
	HW video decode support for Intel integrated graphics
	http://www.freedesktop.org/wiki/Software/vaapi
or
x11-libs/vdpau-video
	VDPAU Backend for Video Acceleration (VA) API
	http://www.freedesktop.org/wiki/Software/vaapi
or
x11-libs/xvba-video
	XVBA Backend for Video Acceleration (VA) API
	http://www.freedesktop.org/wiki/Software/vaapi

x11-libs/libvdpau
	VDPAU wrapper and trace libraries
	http://www.freedesktop.org/wiki/Software/VDPAU

x11-libs/libxcb,
	X C-language Bindings library
	http://xcb.freedesktop.org
x11-libs/xcb-util,
x11-libs/xcb-util-wm,
x11-libs/xcb-util-keysyms
	X C-language Bindings library
	http://xcb.freedesktop.org
	Only versions >= 0.3.8 are good supported

x11-libs/libX11
	X.Org X11 library
	http://xorg.freedesktop.org

GNU Make 3.xx
	http://www.gnu.org/software/make/make.html

Optional: