Giter Club home page Giter Club logo

vdr-plugin-vaapidevice's Introduction

Copyright (C) 2011 - 2013 by Johns. All Rights Reserved.
Copyright (C) 2018 by pesintta, rofafor.

SPDX-License-Identifier: AGPL-3.0-only

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.

A VA-API output device plugin for VDR.

    o Based on softhddevice by Johns: http://projects.vdr-developer.org/projects/plg-softhddevice
    o Video decoder CPU / VAAPI
    o Video output VAAPI
    o Audio FFMpeg / Alsa / Analog / Digital
    o HDMI/SPDIF pass-through
    o VDR ScaleVideo API
    o Autocrop
    o Grab image (no OSD!)
    o Suspend / Detach
    o Letterbox, Stretch and Center cut-out video display modes

Install:
--------

	git clone https://github.com/pesintta/vdr-plugin-vaapidevice.git
	cd vdr-plugin-vaapidevice
	make
	make install

	You can edit Makefile to enable/disable Alsa support.
	The default is to autodetect as much as possible.

Issues/bugs:
------------

	If any issues or bugs arise, please, open an Github issue here:
	https://github.com/pesintta/vdr-plugin-vaapidevice/issues

	Remember to include your system report into the Github issue by
	the included script:

	export DISPLAY=:0.0
	./generate_system_report.sh

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

Setup: /etc/vdr/setup.conf
------
	Following is supported:

	vaapidevice.MakePrimary = 0
	0 = no change, 1 make vaapidevice primary at start

	vaapidevice.HideMainMenuEntry = 0
	0 = show vaapidevice main menu entry, 1 = hide entry

	vaapidevice.Osd.Width = 0
	0 = auto (=display, unscaled) n = fixed osd size scaled for display
	vaapidevice.Osd.Height = 0
	0 = auto (=display, unscaled) n = fixed osd size scaled for display

	<res> of the next parameters is 576i, 720p, 1080i, 1080p, or 2160p.

	vaapidevice.<res>.Scaling = 0
	0 = normal, 1 = fast, 2 = HQ, 3 = anamorphic

	vaapidevice.<res>.Deinterlace = 0
	0 = disabled, 1 = bob, 2 = weave, 3 = motion adaptive, 4 = motion compensated

	vaapidevice.<res>.Denoise = 0
	0 .. 1000 noise reduction level (0 off, 1000 max)

	vaapidevice.<res>.Sharpness = 0
	-1000 .. 1000 sharpness level (0 off, -1000 max blur,
	    1000 max sharp)

	vaapidevice.<res>.CutTopBottom = 0
	Cut 'n' pixels at at top and bottom of the video picture.

	vaapidevice.<res>.CutLeftRight = 0
	Cut 'n' pixels at at left and right of the video picture.

	vaapidevice.AudioDelay = 0
	+n or -n ms
	delay audio or delay video

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

	vaapidevice.AudioDownmix = 0
	0 = none, 1 = downmix
	Use ffmpeg/libav downmix of AC-3/EAC-3 audio to stereo.

	vaapidevice.AudioSoftvol = 0
	0 = off, use hardware volume control
	1 = on, use software volume control

	vaapidevice.AudioNormalize = 0
	0 = off, 1 = enable audio normalize

	vaapidevice.AudioMaxNormalize = 0
	maximal volume factor/1000 of the normalize filter

	vaapidevice.AudioCompression = 0
	0 = off, 1 = enable audio compression

	vaapidevice.AudioMaxCompression = 0
	maximal volume factor/1000 of the compression filter

	vaapidevice.AudioStereoDescent = 0
	reduce volume level (/1000) for stereo sources

	vaapidevice.AudioBufferTime = 0
	0 = default (336 ms)
	1 - 1000 = size of the buffer in ms

	vaapidevice.AutoCrop.Interval = 0
	0 disables auto-crop
	n each 'n' frames auto-crop is checked.

	vaapidevice.AutoCrop.Delay = 0
	if auto-crop is over 'n' intervals the same, the cropping is
	used.

	vaapidevice.AutoCrop.Tolerance = 0
	if detected crop area is too small, cut max 'n' pixels at top and
	bottom.

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

	vaapidevice.Suspend.Close = 0
	1 suspend closes x11 window, connection and audio device.
	(use svdrpsend plug vaapidevice RESU to resume, if you have no lirc)

	vaapidevice.Suspend.X11 = 0
	1 suspend stops X11 server (not working yet)

	vaapidevice.60HzMode = 0
	0 disable 60Hz display mode
	1 enable 60Hz display mode

	vaapidevice.SoftStartSync = 0
	0 disable soft start of audio/video sync
	1 enable soft start of audio/video sync

	vaapidevice.Video4to3DisplayFormat = 1
	0 pan and scan
	1 letter box
	2 center cut-out

	vaapidevice.VideoOtherDisplayFormat = 1
	0 pan and scan
	1 pillar box
	2 center cut-out

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
	other		to use alsa audio module (if compiled with alsa
			support)

	-t trace_mode

	Sets the default tracing bitmask for debug message categories. The
	available categories can be found in the "misc.h" header file.

SVDRP:
------

	Use 'svdrpsend plug vaapidevice 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:

	@vaapidevice Blue 1 0		disable pass-through
	@vaapidevice Blue 1 1		enable pass-through
	@vaapidevice Blue 1 2		toggle pass-through
	@vaapidevice Blue 1 3		decrease audio delay by 10ms
	@vaapidevice Blue 1 4		increase audio delay by 10ms
	@vaapidevice Blue 1 5		toggle ac3 mixdown
	@vaapidevice Blue 2 0		disable fullscreen
	@vaapidevice Blue 2 1		enable fullscreen
	@vaapidevice Blue 2 2		toggle fullscreen
	@vaapidevice Blue 2 3		disable auto-crop
	@vaapidevice Blue 2 4		enable auto-crop
	@vaapidevice Blue 2 5		toggle auto-crop
	@vaapidevice Blue 3 0		stretch 4:3 to display
	@vaapidevice Blue 3 1		letter box 4:3 in display
	@vaapidevice Blue 3 2		center cut-out 4:3 to display
	@vaapidevice Blue 3 9		rotate 4:3 to display zoom mode
	@vaapidevice Blue 4 0           stretch other aspect ratios to display
	@vaapidevice Blue 4 1           letter box other aspect ratios in display
	@vaapidevice Blue 4 2           center cut-out other aspect ratios to display
	@vaapidevice Blue 4 9           rotate other aspect ratios to display zoom mode
	@vaapidevice Blue 5 0		toggle debug statistics osd

Running:
--------

	Click into video window to toggle fullscreen/window mode, only if you
	have a window manager running.

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

	media-video/ffmpeg (version >=3.2)
		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

	x11-libs/libva (version >=2.0.0)
		Video Acceleration (VA) API for Linux
		http://www.freedesktop.org/wiki/Software/vaapi

	x11-libs/libva-intel-driver (version >=2.0.0)
		HW video decode support for Intel integrated graphics
		http://www.freedesktop.org/wiki/Software/vaapi

	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

vdr-plugin-vaapidevice's People

Contributors

9000h avatar e-tobi avatar gentoolinux avatar j1rie avatar johns-q avatar jojo61 avatar pesintta avatar rofafor avatar ua0lnj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vdr-plugin-vaapidevice's Issues

Jump to last mark -> segfault

Hi,

while opening a recording (as usual) pressing 9 - 7 to check cutting it is ok,
vdr already vanishes pressing just "9" (jump to end):

kernel: [111280.279359] vdr[15926]: segfault at d8 ip 00007f3ef0166899 sp 00007f3e62ffc190 error 4 in libdrm_intel.so.1.0.0[7f3ef0160000+22000]
[and again and ...]
kernel: [111751.696539] vdr[16491] segfault at d8 ip 00007f18f79dc899 sp 00007f18837fd190 error 4 in libdrm_intel.so.1.0.0[7f18f79d6000+22000]

with SD and/or HD recordings.

System-Info

VAAPIDEVICE SYSTEM INFORMATION REPORT

inxi
System:    Kernel: 4.14.10-dvb x86_64 bits: 64 gcc: 7.2.0 Console: tty 2 Distro: Debian GNU/Linux buster/sid
Machine:   Device: desktop Mobo: ASRock model: J3160-ITX serial: <filter>
           UEFI [Legacy]: American Megatrends v: P1.30 date: 03/30/2016
CPU:       Quad core Intel Celeron J3160 (-MCP-) arch: Airmont rev.4 cache: 1024 KB
           flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 12800
           clock speeds: max: 2240 MHz 1: 1600 MHz 2: 1600 MHz 3: 1600 MHz 4: 1600 MHz
Graphics:  Card: Intel Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller
           bus-ID: 00:02.0
           Display Server: X.Org 1.19.6 driver: i915 Resolution: 1920x1080
           OpenGL: renderer: Mesa DRI Intel HD Graphics 400 (Braswell)
           version: 4.5 Mesa 17.3.6 Direct Render: Yes
Audio:     Card Intel Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series High Definition Audio Controller
           driver: snd_hda_intel bus-ID: 00:1b.0
           Sound: Advanced Linux Sound Architecture v: k4.14.10-dvb
vainfo
vainfo: VA-API version: 1.1 (libva 2.1.0)
vainfo: Driver version: Intel i965 driver for Intel(R) CherryView - 2.0.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264MultiviewHigh      : VAEntrypointVLD
      VAProfileH264MultiviewHigh      : VAEntrypointEncSlice
      VAProfileH264StereoHigh         : VAEntrypointVLD
      VAProfileH264StereoHigh         : VAEntrypointEncSlice
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointEncPicture
      VAProfileVP8Version0_3          : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointVLD
ffmpeg
ffmpeg version 3.4.2-1+b1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7 (Debian 7.3.0-4)
libavutil      55. 78.100 / 55. 78.100
libavcodec     57.107.100 / 57.107.100
libavformat    57. 83.100 / 57. 83.100
libavdevice    57. 10.100 / 57. 10.100
libavfilter     6.107.100 /  6.107.100
libavresample   3.  7.  0 /  3.  7.  0
libswscale      4.  8.100 /  4.  8.100
libswresample   2.  9.100 /  2.  9.100
libpostproc    54.  7.100 / 54.  7.100
gcc
7
svdrpsend
220 <filter> SVDRP VideoDiskRecorder 2.3.8; Thu Mar 15 01:03:06 2018; UTF-8
900- Frames: missed(0) duped(299) dropped(6) total(7438) PTS(10:32:40.783) drift(-10) audio(442) video(0)
900- Video: h264/vaapi_vld 1920x1080i 16:9 @ 1920x1080 - Intel i965 driver for Intel(R) CherryView - 2.0.0
900- Audio: ac3 48000Hz 6 channels
900 Command: vaapidevice -a stereo -p hdmi:CARD=PCH,DEV=2,AES0=0x06 -g 1920x1080+0+0 -v va-api -w alsa-driver-broken -w alsa-close-open-delay
221 <filter> closing connection

video jerks on opi0 (h3, armhf, 32 bit)

Hi,

softhddevice does not play video smoothly on the Orange Pi Zero (is a 32-bit armhf SoC with vdpau).
Here is an example output:
http://sgerwk.altervista.org/output.mpg

The transport stream coming from the dvb stick looks like this:
http://sgerwk.altervista.org/input.ts
(same channels, a few seconds later).

mpv has no problem playing dvb:// with vdpau.

Maybe the problem is with the timing of playing of the frames. A quick hack is to increase the delay from 1 * 1000 to 18 * 1000 in video.c:

if (!decoded) {                     // nothing decoded, sleep
    // FIXME: sleep on wakeup
    usleep(18 * 1000);
}

This only avoid frames being shown too quickly, is not a real solution. Maybe the problem is with the SoC being 32 bits.

compile warning

cc -g -O3 -Wall -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I/usr/include/alsa -I/usr/include/x86_64-linux-gnu -DPLUGIN_NAME_I18N='"vaapidevice"' -D_GNU_SOURCE -DAV_INFO -DAV_INFO_TIME=3000	  -DGIT_REV='"15b6190"'  -g -W -Wall -Wextra -Winit-self -Wdeclaration-after-statement -Wno-unused-parameter -std=c99   -c -o audio.o audio.c
audio.c: In function ‘AudioInit’:
audio.c:2154:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
    if (AudioChannelsInHw[4]) {
       ^
audio.c:2158:7: note: here
       case 4:
       ^~~~
audio.c:2159:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
    if (AudioChannelsInHw[5]) {
       ^
audio.c:2163:7: note: here
       case 5:
       ^~~~
audio.c:2164:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
    if (AudioChannelsInHw[6]) {
       ^
audio.c:2168:7: note: here
       case 6:
       ^~~~
audio.c:2169:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
    if (AudioChannelsInHw[7]) {
       ^
audio.c:2173:7: note: here
       case 7:
       ^~~~
audio.c:2174:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
    if (AudioChannelsInHw[8]) {
       ^
audio.c:2178:7: note: here
       case 8:
       ^~~~

sorry for bring this up again but it looks not nice at compile time

missing AudioSetBufferTime

--- softhddevice.cpp.orig	2018-02-04 12:57:36.165055247 +0100
+++ softhddevice.cpp	2018-02-04 12:59:10.080184504 +0100
@@ -3345,6 +3345,7 @@
     }
     if (!strcasecmp(name, "AudioBufferTime")) {
 	ConfigAudioBufferTime = atoi(value);
+	AudioSetBufferTime(ConfigAudioBufferTime);
 	return true;
     }
     if (!strcasecmp(name, "AudioAutoAES")) {

Info statements not consistant

Info("Changing to %d forward reference surfaces for postprocessing", tmp_forwardRefCount);

it's not the only one

Mar 15 21:53:56 acer533 vdr: [10512] VAAPI: video/vaapi: allocating 1 forward reference surfaces for postprocessing
Mar 15 21:53:56 acer533 vdr: [10512] VAAPI: video/vaapi: allocating 0 backward reference surfaces for postprocessing
Mar 15 21:53:56 acer533 vdr: [10512] VAAPI: Changing to 0 forward reference surfaces for postprocessing

center cut-out broken latest version

Hi,

center cut-out is broken in the latest Versions, this happens with HD and SD recordings.
I have updated my vaapidevice installation from 1.0.0-GIT6372704 to 1.0.0-GIT7ef6ad5. I have recognized that center cut-out is broken.
I have attached 3 Pictures from a SD recording, this recording is a TS recording, but it also happens with PES recordings.

Original
original
Working
working_center_cut-out
Not working
not_working_center_cut_out

replace pthread_yield with POSIX sched_yield

it's form the BSD port
https://linux.die.net/man/3/pthread_yield

--- a/PLUGINS/src/softhddevice/audio.c
+++ b/PLUGINS/src/softhddevice/audio.c
@@ -48,6 +48,7 @@
 #include <inttypes.h>
 #include <string.h>
 #include <math.h>
+#include <sched.h>

 #include <libintl.h>
 #define _(str) gettext(str)            ///< gettext shortcut
@@ -1584,7 +1585,7 @@
        if (err < 0) {                  // underrun error
            return -1;
        }
-       pthread_yield();
+       sched_yield();
        usleep(OssFragmentTime * 1000); // let fill/empty the buffers
        return 0;
     }

Screensaver inhibitor

The original softhddevice plugin has code to turn off DPMS and some screensavers (e.g. the gnome screensaver). Apparently this code was removed from vaapidevice.

I believe it would be good to add again code to inhibit screensavers (maybe it can be done more generically, since the code in softhddevice seems only to tackle DPMS and some screensavers, but not all)-

Cluttered image when resizing window

When I resize the vaapidevice window, sometimes the image becomes cluttered with strange artefacts on it. As soon as I either display the OSD, or change window size again, the artefacts disappear again and everything seems normal.

P.S. I should add that this issue has appeared recently. It was not present in the old softhddevice pesintta code (before the project was renamed to vaapidevice and a lot of code was changed).

vaapidevice-cluttered-image-when-resizing

VAAPIDEVICE SYSTEM INFORMATION REPORT

inxi
System:    Kernel: 4.13.0-36-generic x86_64 (64 bit gcc: 5.4.0)
           Desktop: Cinnamon 3.6.7 (Gtk 3.18.9) Distro: Linux Mint 18.3 Sylvia
Machine:   Mobo: MSI model: B150M MORTAR (MS-7972) v: 2.0
           Bios: American Megatrends v: C.90 date: 11/03/2016
CPU:       Quad core Intel Core i5-7500 (-MCP-) cache: 6144 KB
           flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 27264
           clock speeds: max: 3800 MHz 1: 3400 MHz 2: 3400 MHz 3: 3400 MHz
           4: 3400 MHz
Graphics:  Card: Intel Device 5912 bus-ID: 00:02.0
           Display Server: X.Org 1.18.4 drivers: (unloaded: fbdev,vesa)
           Resolution: [email protected]
           GLX Renderer: Mesa DRI Intel HD Graphics 630 (Kaby Lake GT2)
           GLX Version: 3.0 Mesa 17.2.8 Direct Rendering: Yes
Audio:     Card-1 Intel Sunrise Point-H HD Audio
           driver: snd_hda_intel bus-ID: 00:1f.3
           Card-2 Micronas Composite USB-Device
           driver: USB Audio usb-ID: 001-003
           Sound: Advanced Linux Sound Architecture v: k4.13.0-36-generic
Network:   Card: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
           driver: r8169 v: 2.3LK-NAPI port: e000 bus-ID: 02:00.0
vainfo
vainfo: VA-API version: 0.39 (libva 1.7.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Kabylake - 1.7.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264MultiviewHigh      :	VAEntrypointVLD
      VAProfileH264MultiviewHigh      :	VAEntrypointEncSlice
      VAProfileH264StereoHigh         :	VAEntrypointVLD
      VAProfileH264StereoHigh         :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
ffmpeg
ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
configuration: --prefix=/opt/ffmpeg-3.4.2 --enable-shared --enable-gpl
libavutil      55. 78.100 / 55. 78.100
libavcodec     57.107.100 / 57.107.100
libavformat    57. 83.100 / 57. 83.100
libavdevice    57. 10.100 / 57. 10.100
libavfilter     6.107.100 /  6.107.100
libswscale      4.  8.100 /  4.  8.100
libswresample   2.  9.100 /  2.  9.100
libpostproc    54.  7.100 / 54.  7.100

VPP-Branch / VA-API 2.0 Compile Error

Hi,

after getting vaapi 2.0 by debian buster update, softhddevice stops working and recompiling fails with:
[..]
In file included from video.c:172:0:
/usr/include/x86_64-linux-gnu/libavcodec/vaapi.h:56:29: note: declared here
struct attribute_deprecated vaapi_context {
^~~~~~~~~~~~~
video.c: In function ‘VaapiInit’:
video.c:2772:5: error: too few arguments to function ‘vaSetErrorCallback’
vaSetErrorCallback(NULL);
^~~~~~~~~~~~~~~~~~
In file included from /usr/include/va/va_x11.h:27:0,
from video.c:136:
/usr/include/va/va.h:270:19: note: declared here
VAMessageCallback vaSetErrorCallback(VADisplay dpy, VAMessageCallback callback, void *user_context);
^~~~~~~~~~~~~~~~~~
video.c:2773:5: error: too few arguments to function ‘vaSetInfoCallback’
vaSetInfoCallback(NULL);
^~~~~~~~~~~~~~~~~
In file included from /usr/include/va/va_x11.h:27:0,
from video.c:136:
/usr/include/va/va.h:276:19: note: declared here
VAMessageCallback vaSetInfoCallback(VADisplay dpy, VAMessageCallback callback, void *user_context);
^~~~~~~~~~~~~~~~~

Scaling is not done when no (other) postprocessing filters are running

With current GIT state, vaapidevice does not scale the video to the needed size (of window or fullscreen) in a case when no postprocessing filters are running.

I am not sure where exactly the scaling should happen in video.c. With current state, it seems to happen only within the function VaapiApplyFilters(). In that function, there are two checks

if (!decoder->filter_n)
return NULL;
[...]
if (!filter_count)
return NULL; /* no postprocessing if no filters applied */

If at any of these, the condition is true, we return from the function. As a result, then the picture is shown in an unscaled way. Which means we only see the upper left extract.

vaapidevice-no-scaling-windowed

When in fullscreen and the screensize is larger than the video (like for me in 720p videos), then the video does not use the full screen anymore and there are strange artifacts around it.

vaapidevice-no-scaling-fullscreen

Please note that I believe that the code in VaapiApplyFilters() is likely correct. I believe somewhere else there is code missing or wrong that causes the scaling not to happen in any case.

I believe #86 and maybe also #89 are potentially consequences of this issue here.

false color issue

if you went in full screen mode to the vaapidevice plugin settings and then go back the video colors are wrong. If you switch then to windowed mode the colors are back to normal.
screenshot from 2018-03-08 20-41-25

debug fix

--- video.c.orig	2018-02-16 21:03:16.727705393 +0100
+++ video.c	2018-02-16 21:04:46.180034575 +0100
@@ -1725,7 +1725,7 @@
 
     if (vaCreateSurfaces(decoder->VaDisplay, VA_RT_FORMAT_YUV420, width, height, decoder->PostProcSurfacesRb,
 	    POSTPROC_SURFACES_MAX, NULL, 0) != VA_STATUS_SUCCESS) {
-	Fatal("video/vaapi: can't create %d postproc surfaces", VIDEO_SURFACES_MAX);
+	Fatal("video/vaapi: can't create %d postproc surfaces", POSTPROC_SURFACES_MAX);
     }
 
 }

skindesigner not working with latest commit

After updating to the latest set of commits, OSD is not longer shown with skindesigner.
VDR-native OSD (i.e. LCARS) is ok.

Digging in the log, this may give a hint.
Mar 04 20:07:36 vdrtwo vdr[6575]: [6575] ERROR: cOsd::SetAreas returned 5 (wrong alignment)
Mar 04 20:07:36 vdrtwo vdr[6575]: [6575] skindesigner: Error initiating displaychannel view - aborting

avcodec_decode_audio4 is deprecated

it can be replaced like

--- codec.c.orig        2018-02-03 20:52:17.250388421 +0100
+++ codec.c     2018-02-03 21:00:52.741757882 +0100
@@ -1497,7 +1497,32 @@

     if (!frame)
        return AVERROR(ENOMEM);
+#if 0
     ret = avcodec_decode_audio4(avctx, frame, &got_frame, avpkt);
+#else
+//  SUGGESTION
+//  Now that avcodec_decode_audio4 is deprecated and replaced
+//  by 2 calls (receive frame and send packet), this could be optimized
+//  into separate routines or separate threads.
+//  Also now that it always consumes a whole buffer some code
+//  in the caller may be able to be optimized.
+    ret = avcodec_receive_frame(avctx,frame);
+    if (ret == 0)
+        got_frame = true;
+    if (ret == AVERROR(EAGAIN))
+        ret = 0;
+    if (ret == 0)
+        ret = avcodec_send_packet(avctx, avpkt);
+    if (ret == AVERROR(EAGAIN))
+        ret = 0;
+    else if (ret < 0)
+    {
+        Debug(3, "codec/audio: audio decode error: %1 (%2)\n",av_make_error_string(error, sizeof(error), ret),got_frame);
+        return ret;
+    }
+    else
+        ret = avpkt->size;
+#endif
     if (ret >= 0 && got_frame) {
        int i, ch;
        int planar = av_sample_fmt_is_planar(avctx->sample_fmt);
@@ -1885,9 +1910,34 @@
 #endif

     got_frame = 0;
+#if 0
     n = avcodec_decode_audio4(audio_ctx, frame, &got_frame,
-       (AVPacket *) avpkt);
-
+        (AVPacket *) avpkt);
+#else
+//  SUGGESTION
+//  Now that avcodec_decode_audio4 is deprecated and replaced
+//  by 2 calls (receive frame and send packet), this could be optimized
+//  into separate routines or separate threads.
+//  Also now that it always consumes a whole buffer some code
+//  in the caller may be able to be optimized.
+    ret = avcodec_receive_frame(audio_ctx,frame);
+    if (ret == 0)
+        got_frame = 1;
+    if (ret == AVERROR(EAGAIN))
+        ret = 0;
+    if (ret == 0)
+        ret = avcodec_send_packet(audio_ctx, avpkt);
+    if (ret == AVERROR(EAGAIN))
+        ret = 0;
+    else if (ret < 0)
+    {
+        Debug(3, "codec/audio: audio decode error: %1 (%2)\n",av_make_error_string(error, sizeof(error), ret),got_frame);
+        return;
+    }
+    else
+        ret = avpkt->size;
+    n = ret; //FIXME: why n and not ret??
+#endif
     if (n != avpkt->size) {
        if (n == AVERROR(EAGAIN)) {
            Error(_("codec/audio: latm\n"));

avcodec_decode_video2 is deprecated

codec.c: In function ‘CodecVideoDecode’:
codec.c:617:5: warning: ‘avcodec_decode_video2’ is deprecated [-Wdeprecated-declarations]
used = avcodec_decode_video2(video_ctx, frame, &got_frame, pkt);
^

this can fully replace it

--- codec.c.orig	2018-02-03 20:52:17.250388421 +0100
+++ codec.c	2018-02-03 20:53:22.678721937 +0100
@@ -612,8 +612,25 @@
     *pkt = *avpkt;			// use copy
 
   next_part:
+#if 0
     // FIXME: this function can crash with bad packets
     used = avcodec_decode_video2(video_ctx, frame, &got_frame, pkt);
+#else
+         if (video_ctx->codec_type == AVMEDIA_TYPE_VIDEO ||
+             video_ctx->codec_type == AVMEDIA_TYPE_AUDIO) {
+             used = avcodec_send_packet(video_ctx, pkt);
+             if (used < 0 && used != AVERROR(EAGAIN) && used != AVERROR_EOF) {
+            } else {
+             if (used >= 0)
+                 pkt->size = 0;
+             used = avcodec_receive_frame(video_ctx, frame);
+             if (used >= 0)
+                 got_frame = 1;
+//             if (used == AVERROR(EAGAIN) || used == AVERROR_EOF)
+//                 used = 0;
+             }
+         }
+#endif
     Debug(4, "%s: %p %d -> %d %d\n", __FUNCTION__, pkt->data, pkt->size, used,
 	got_frame);
 

No config option to disable "ColorBalance" filter

As per @pesintta's comment in #79 ColorBalance filter "is currently always enabled and you cannot disable it from settings or from setup.conf."

Actually, it would be good to add the missing option to switch this filter on or off, same as it is possible for the other filters.

As a side effect, this would also make vaapidevice work out of the box with Ubuntu Xenial (their current LTS version) and distros based on Ubuntu Xenial (such as the current version of Mint). At the moment, these distros ship a pretty outdated version of libva that has a bug in the ColorBalance filter that produces "funny" line artefacts in the picture.

Broken SD-TV (720x576i) scaling (cutting / pause)

Hi,
if I cut SD Videos, e.g. seek Start and Stop of the movie with (1, 3, 4 and 6), I'll get an unscaled SD Picture in the top / left corner with some picture artifacts filling the rest of screen. Occasionally I too loose OSD temporary or completely.

Seems too me, as this is the same effect, that makes the HD picture "jumpy" in cutting mode...

Nevertheless, thanks for the plugin!

Regards,
Stefan

1080p videos take 1080i settings

Sorry for filing so many issues at the moment. I thought it is good filing everything that I noticed. This should be the last one for the moment :)

I noticed that for DVB-T2 channels, which are sent here in 1080p resolution, the picture is influenced by the settings that I do for 1080i. I was surprised that the settings for an interlaced resolution are actually applied here for a progressive one (even if the number of lines are the same). Actually, I thought the UHD settings would apply, although 1080p is also not UHD, so this would also not be the best fit. Maybe there should be separate settings for 1080p, or alternatively the 1080i section should be renamed to "1080i/1080p".

error: 'FF_INPUT_BUFFER_PADDING_SIZE' undeclared

Hi,

when compiling vdr-vaapidevice on fedora 28, i get this error message:

 + make 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -mcet -fcf-protection -fPIC' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -mcet -fcf-protection -fPIC' -j2
g++ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -mcet -fcf-protection -fPIC -I/usr/include/alsa    -I/usr/include/libdrm  -I/usr/include/ffmpeg  -I/usr/include/ffmpeg  -DPLUGIN_NAME_I18N='"vaapidevice"' -D_GNU_SOURCE -DAV_INFO -DAV_INFO_TIME=3000	 -DUSE_GLX   -g -W -Wall -Wextra -Winit-self -Werror=overloaded-virtual -Wno-unused-parameter   -c -o vaapidevice.o vaapidevice.cpp
cc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -mcet -fcf-protection -fPIC -I/usr/include/alsa    -I/usr/include/libdrm  -I/usr/include/ffmpeg  -I/usr/include/ffmpeg  -DPLUGIN_NAME_I18N='"vaapidevice"' -D_GNU_SOURCE -DAV_INFO -DAV_INFO_TIME=3000	 -DUSE_GLX   -g -W -Wall -Wextra -Winit-self -Wdeclaration-after-statement -Wno-unused-parameter -std=c99   -c -o vaapidev.o vaapidev.c
vaapidev.c: In function 'VideoNextPacket':
vaapidev.c:649:50: error: 'FF_INPUT_BUFFER_PADDING_SIZE' undeclared (first use in this function); did you mean 'AV_INPUT_BUFFER_PADDING_SIZE'?
     memset(avpkt->data + avpkt->stream_index, 0, FF_INPUT_BUFFER_PADDING_SIZE);
                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                  AV_INPUT_BUFFER_PADDING_SIZE
vaapidev.c:649:50: note: each undeclared identifier is reported only once for each function it appears in
vaapidev.c: In function 'PesInit':
vaapidev.c:1197:49: error: 'FF_INPUT_BUFFER_PADDING_SIZE' undeclared (first use in this function); did you mean 'AV_INPUT_BUFFER_PADDING_SIZE'?
     pesdx->Buffer = av_malloc(PES_MAX_PAYLOAD + FF_INPUT_BUFFER_PADDING_SIZE);
                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                 AV_INPUT_BUFFER_PADDING_SIZE
make: *** [<builtin>: vaapidev.o] Error 1

installed software:
gcc-c++-8.0.1-0.14.fc28.x86_64
compat-ffmpeg28-2.8.13-3.fc28.x86_64
ffmpeg-3.5-0.3.20180211git.fc28.x86_64
libva-2.1.0-1.fc28.x86_64
libva-intel-driver-2.1.0-1.fc28.x86_64

Picture from previous surface shown when jumping between marks (still picture)

Hi,

I just noticed something "weird" ... I have prepared the marks to cut the movie and wanted to check if the marks are correct. So I jumped via 7 to the first mark and it showed the first picture of the movie. About 1-2s later the last picture of the movie is shown and it remains there ... so I jumped to the end of the movie via 9 and it shows the end of the movie ... 1-2s later it showed the first picture.

Maybe it shows the picture that was in the buffer for deinterlacing? I need to double check if it happens on SD recordings as well but I noticed it on HD recording from ARD where I have deinterlacing set to NONE.

true author

The commit rofafor@45a7d48 is original from j1rie/softhddevice@5708242
It helped once during my experiments two years ago, but I never invested time to find out, if it was needed under regular conditions. That's why I did not propose it in my previous series of pull requests.
Just wanted to mention this.

C&P error in README

Hi,

        vaapidevice.<res>.Sharpness = 0
        -1000 .. 1000 noise reduction level (0 off, -1000 max blur,
            1000 max sharp)

Sharpness is probably not noise reduction :)

error handling

I'm not sure where this comes from, but it's maybe usefull

--- softhddevice.orig/video.c   2015-10-04 14:52:35.676357063 +0200
+++ softhddevice/video.c        2015-10-06 12:09:51.572035914 +0200
@@ -3347,6 +3347,10 @@
         vaSyncSurface(VaDisplay, frefs[*num_frefs - 1]);

     /* Skip postprocessing if queue is not deinterlaceable */
+    if (!*num_brefs) {
+        //Error("vaapi/vpp: Postprocessing without Backward Reference\n");
+        return VA_STATUS_ERROR_INVALID_PARAMETER;
+    }
     for (i = 0; i < *num_brefs; ++i) {
         va_status = vaQuerySurfaceStatus(VaDisplay, brefs[i], &va_surf_status);
         if (va_status != VA_STATUS_SUCCESS) {

No OSD with latest commit.

Hi,

I see different error messages ... I get (with latest commit):

Mar 05 00:11:24 [vdr] [18025] VAAPI: Device ready
Mar 05 00:11:24 [vdr] [18067] VAAPI-ERROR: video/vaapi: no osd subpicture yet
Mar 05 00:11:24 [vdr] [18067] VAAPI-ERROR: video: display buffer empty, duping frame (1/0) 0
Mar 05 00:11:24 [vdr] [18067] VAAPI-ERROR: video/vaapi: no osd subpicture yet
Mar 05 00:11:24 [vdr] [18067] VAAPI-ERROR: video: display buffer empty, duping frame (2/0) 0
Mar 05 00:11:24 [vdr] [18067] VAAPI-ERROR: video/vaapi: no osd subpicture yet

And after some time:

Mar 05 00:11:25 [vdr] [18067] VAAPI-ERROR: video/vaapi: no osd subpicture yet
Mar 05 00:11:25 [vdr] [18067] VAAPI-ERROR: video: display buffer empty, duping frame (585/0) 6
Mar 05 00:11:25 [vdr] [18067] VAAPI-ERROR: video/vaapi: can't destroy 8 surfaces
Mar 05 00:11:25 [vdr] [18067] VAAPI-ERROR: video/vaapi: can't destroy postproc context!
Mar 05 00:11:25 [vdr] [18067] VAAPI-ERROR: video/vaapi: can't destroy config!
Mar 05 00:11:25 [vdr] [18067] VAAPI: video/vaapi: supports video processing
Mar 05 00:11:25 [vdr] [18067] VAAPI-ERROR: video/vaapi: no osd subpicture yet
Mar 05 00:11:25 [vdr] [18067] VAAPI: video/vaapi: noise reduction supported

Best regards,

Space #

SD deinterlace issue?

can someone confirm the bad deinterlace issue on:

EURONEWS GERMAN SD;Globecast:12226:HC34M2S0:S19.2E:27500:2440=2:2445=deu@3:0:0:31230:1:1091:0

with the old softhddevice it's perfectly fine but did log
[softhddev] too short PES video packet
last: 3
last: 3
last: 3
last: 3

"Sharpening Support" reported but using it, will crash GPU

Hi,

I've a problem with sharpening support on Intel J3160 (CherryView 2):
If I enable Sharpening, e.g. switch from 0 -> 1, I'll get something like a frozen not-deinterlaced flickering picture (seems like three frames joined), crashing GPU some moments later. Need to detach/attach to resume.

vainfo:
error: XDG_RUNTIME_DIR not set in the environment.
libva info: VA-API version 1.0.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.0 (libva 2.0.0)
vainfo: Driver version: Intel i965 driver for Intel(R) CherryView - 2.0.0
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD

Logs:
[21959] VDR version 2.3.8 started
[21959] loading plugin: /usr/lib/vdr/plugins/libvdr-vaapidevice.so.2.3.8
video/vaapi: libva 1.0 (Intel i965 driver for Intel(R) CherryView - 2.0.0) initialized
video/vaapi: background-color is unsupported
video/vaapi: supports video processing
video/vaapi: supports unscaled osd
[vaapidevice] ready
..
codec: YUV 420 supported
Using entrypoint for vpp: 10
video/vaapi: can't destroy postproc context!
can't destroy config!
video/vaapi: noise reduction supported
video/vaapi: 0,00 - 1,00 ++ 0,03 = 0,50
Enabling denoise filter (pos = 0)
video/vaapi: deinterlacing supported
video/vaapi: bob deinterlace supported
motion adaptive deinterlace supported
motion compensated deinterlace supported
Enabling Deint (pos = 1)
video/vaapi: sharpening supported
video/vaapi: 0,00 - 1,00 ++ 0,03 = 0,50
Enabling sharpening filter (pos = 0)
video/vaapi: enabling color balance filters
Supported color balance filter count: 4
Hue (-180,00 - 180,00 ++ 1,00 = 0,00) (pos = 2)
Saturation (0,00 - 10,00 ++ 0,10 = 1,00) (pos = 2)
Brightness (-100,00 - 100,00 ++ 1,00 = 0,00) (pos = 2)
Contrast (0,00 - 10,00 ++ 0,10 = 1,00) (pos = 2)
video/vaapi: skin tone enhancement supported
video/vaapi: 0,00 - 4,00 ++ 1,00 = 0,00
Enabling skin tone filter (pos = 3)
Allocating 1 forward reference surfaces for postprocessing
Allocating 0 backward reference surfaces for postprocessing
video: display buffer empty, duping frame (46/0) 0
Surface 0 query status = 0x6: invalid VASurfaceID
Surface 0 query status = 0x6: invalid VASurfaceID
...

While switching on sharpening via menu
video/vaapi: gpu hung -4294949ms 78208

kernel: [53772.319113] [drm] GPU HANG: ecode 8:0:0x85ddfffb, in vdr [21959], reason: Hang on rcs0, action: reset
kernel: [53772.319118] [drm] GPU hangs can indicate a bug anywhere in the entire gfx stack, including userspace.
kernel: [53772.319120] [drm] Please file a new bug report on bugs.freedesktop.org against DRI -> DRM/Intel
kernel: [53772.319121] [drm] drm/i915 developers can then reassign to the right component if it's not a kernel issue.
kernel: [53772.319122] [drm] The gpu crash dump is required to analyze gpu hangs, so please always attach it.
kernel: [53772.319123] [drm] GPU crash dump saved to /sys/class/drm/card0/error
kernel: [53772.319136] i915 0000:00:02.0: Resetting rcs0 after gpu hang
kernel: [53776.454505] asynchronous wait on fence i915:vdr[21959]/0:38eff timed out
kernel: [53780.294596] i915 0000:00:02.0: Resetting rcs0 after gpu hang
kernel: [53788.294494] i915 0000:00:02.0: Resetting rcs0 after gpu hang
kernel: [53796.294490] i915 0000:00:02.0: Resetting rcs0 after gpu hang
`
Kernel is a 4.14.10.

FastForward / Rewind not working

Hi Antti, Hi Rolf,

thanks for all your hard work on vaapidevice. I just noticed one issue. If I FastForward or Rewind then the "position" clock is not updating and if you press play again you are at the same time where you started FastForward / Rewind ... even if you let FF/Rew run for quite some time ...

Not sure where this started ... my last "known good" commit (6372704) is also affected ...

Thanks and best regards,

Jochen

Playing old *.vdr recordings broken

If I play old *.vdr (1.6.x recordings), I only get about top 10% of picture, rest is more or less light grey.
It worked surely with git from around new year 2018, playing "A dinner for one" without problems.

Maybe caused by the new TS-Parser, as that are PES recordings?


Feb 12 01:05:15 vdr: video: slow down video, duping frame
Feb 12 01:05:15 vdr: video: 0:50:42.525 +65 625 0/\ms 182+5 v-buf
Feb 12 01:05:15 vdr: video: speed up video, droping frame
Feb 12 01:05:15 vdr: video: 0:50:42.525 +26 681 0/\ms 182+3 v-buf
Feb 12 01:05:15 vdr: audio/alsa: using device 'stereo'
Feb 12 01:05:15 vdr: audio/alsa: start delay 336ms
Feb 12 01:05:15 vdr: video: slow down video, duping frame
Feb 12 01:05:15 vdr: video: 0:51:42.285 +300 427 0/\ms 59+5 v-buf
Feb 12 01:05:15 vdr: [vaapidevice] empty video packet 56 bytes
Feb 12 01:05:15 vdr: video/vaapi: synced after 25 frames
Feb 12 01:05:15 vdr: video: slow down video, duping frame
Feb 12 01:05:15 vdr: video: speed up video, droping frame
Feb 12 01:05:15 vdr: video: 0:51:42.565 +20 587 0/\ms 182+3 v-buf
Feb 12 01:05:15 vdr: video: slow down video, duping frame
Feb 12 01:05:15 vdr: video: 0:51:42.645 +60 571 0/\ms 182+5 v-buf
Feb 12 01:05:16 vdr: video: speed up video, droping frame
Feb 12 01:05:16 vdr: video: 0:51:42.645 +20 675 0/\ms 182+3 v-buf
Feb 12 01:05:16 vdr: video: slow down video, duping frame
Feb 12 01:05:16 vdr: video: 0:51:42.725 +60 659 0/\ms 182+5 v-buf
Feb 12 01:05:16 vdr: video: speed up video, droping frame
Feb 12 01:05:16 vdr: video: 0:51:42.725 +20 643 0/\ms 182+3 v-buf
Feb 12 01:05:16 vdr: [vaapidevice] empty video packet 2048 bytes
Feb 12 01:05:16 vdr: [vaapidevice] empty video packet 1137 bytes
Feb 12 01:05:16 vdr: video: slow down video, duping frame
Feb 12 01:05:16 vdr: video: 0:51:42.805 +59 626 0/\ms 182+5 v-buf
Feb 12 01:05:16 vdr: [vaapidevice] empty video packet 2048 bytes
Feb 12 01:05:16 vdr: video: speed up video, droping frame
Feb 12 01:05:16 vdr: video: 0:51:42.805 +20 587 0/\ms 182+3 v-buf
Feb 12 01:05:16 vdr: [vaapidevice] empty video packet 2048 bytes
Feb 12 01:05:16 vdr: [vaapidevice] empty video packet 1498 bytes
Feb 12 01:05:16 vdr: video: slow down video, duping frame
Feb 12 01:05:16 vdr: video: 0:51:42.885 +60 619 0/\ms 182+5 v-buf
Feb 12 01:05:16 vdr: video: speed up video, droping frame
Feb 12 01:05:16 vdr: video: 0:51:42.885 +20 627 0/\ms 182+3 v-buf
Feb 12 01:05:16 vdr: audio/alsa: using device 'stereo'
Feb 12 01:05:16 vdr: video: slow down video, duping frame
Feb 12 01:05:16 vdr: video: 0:52:42.765 +256 360 0/\ms 45+5 v-buf
Feb 12 01:05:16 vdr: audio/alsa: start delay 336ms
Feb 12 01:05:16 vdr: [vaapidevice] empty video packet 26 bytes
[..]

CPU high io wait

high cpu io wait, which did probably not come from vaapidevice and is also no disk io
screenshot from 2018-03-07 21-49-05

Intel HD 4000

Hello
I need use this plugin on Intel HD 4000. Does this plugin support vaapi?

No picture

Hi, I didn't get a picture anymore.
For me, the last working commit is 6372704

Mar 10 16:52:30 vdr vdr: [4170] VAAPI: video/vaapi: supports unscaled osd
Mar 10 16:52:30 vdr vdr: [4170] VAAPI: audio: 'alsa' output module used
Mar 10 16:52:30 vdr vdr: [4170] VAAPI: audio/alsa: supports pause: yes
Mar 10 16:52:30 vdr vdr: [4365] VAAPI-ERROR: video/vaapi: can't destroy 8 surfaces
Mar 10 16:52:30 vdr vdr: [4365] VAAPI-ERROR: video/vaapi: can't destroy postproc context!
Mar 10 16:52:30 vdr vdr: [4365] VAAPI-ERROR: video/vaapi: can't destroy config!


             VAAPIDEVICE SYSTEM DEBUG INFORMATION REPORT                  

System: Kernel: 4.15.0-11-generic x86_64 bits: 64 gcc: 7.3.0 Console: tty 1
Distro: Ubuntu Bionic Beaver (development branch)
Machine: Device: desktop Mobo: ASRock model: J3455M serial: N/A UEFI: American Megatrends v: P1.40 date: 07/14/2017
CPU: Quad core Intel Celeron J3455 (-MCP-) arch: N/A cache: 1024 KB
flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 11980
clock speeds: max: 2300 MHz 1: 1618 MHz 2: 1768 MHz 3: 2018 MHz 4: 1523 MHz
Graphics: Card: Intel Device 5a85 bus-ID: 00:02.0
Display Server: N/A drivers: modesetting (unloaded: fbdev,vesa)
tty size: 136x28 Advanced Data: N/A out of X
Audio: Card Intel Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster
driver: snd_hda_intel bus-ID: 00:0e.0
Sound: Advanced Linux Sound Architecture v: k4.15.0-11-generic
Network: Card: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
driver: r8169 v: 2.3LK-NAPI port: e000 bus-ID: 01:00.0
Info: Processes: 239 Uptime: 1:04 Memory: 3664.5/7386.2MB Init: systemd runlevel: 5 Gcc sys: 7.3.0
Client: Shell (generate_system) inxi: 2.3.56


vainfo: VA-API version: 1.1 (libva 2.1.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Broxton - 2.0.0
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSlice
VAProfileHEVCMain10 : VAEntrypointVLD


              INCLUDE THIS REPORT INTO YOUR GITHUB ISSUE                  

driver issue ?

VAAPIDEVICE SYSTEM INFORMATION REPORT

inxi
System:    Kernel: 4.15.9-041509-generic x86_64 bits: 64 gcc: 7.2.0
           Console: tty 0 Distro: Ubuntu Bionic Beaver (development branch)
Machine:   Device: laptop System: Acer product: Aspire ES1-533 v: V1.12 serial: <filter>
           Mobo: Acer model: Stego_AP v: V1.12 serial: <filter>
           UEFI: Insyde v: V1.12 date: 10/18/2017
CPU:       Quad core Intel Pentium N4200 (-MCP-) arch: N/A cache: 1024 KB
           flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 8755
           clock speeds: max: 2500 MHz 1: 1789 MHz 2: 1927 MHz 3: 1813 MHz
           4: 1870 MHz
Graphics:  Card: Intel Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller
           bus-ID: 00:02.0
           Display Server: X.Org 1.19.6 driver: i915
           Resolution: [email protected]
           OpenGL: renderer: Mesa DRI Intel HD Graphics 505 (Broxton)
           version: 4.5 Mesa 18.0.0-rc4 Direct Render: Yes
Audio:     Card Intel Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster
           driver: snd_hda_intel bus-ID: 00:0e.0
           Sound: Advanced Linux Sound Architecture v: k4.15.9-041509-generic
vainfo
vainfo: VA-API version: 1.1 (libva 2.1.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Broxton - 2.0.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileH264MultiviewHigh      :	VAEntrypointVLD
      VAProfileH264MultiviewHigh      :	VAEntrypointEncSlice
      VAProfileH264StereoHigh         :	VAEntrypointVLD
      VAProfileH264StereoHigh         :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
ffmpeg
ffmpeg version 3.4.git-1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7 (Ubuntu 7.3.0-5ubuntu1)
libavutil      56.  7.100 / 56.  7.100
libavcodec     58.  9.100 / 58.  9.100
libavformat    58.  3.100 / 58.  3.100
libavdevice    58.  0.100 / 58.  0.100
libavfilter     7. 11.101 /  7. 11.101
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  0.101 /  5.  0.101
libswresample   3.  0.101 /  3.  0.101
libpostproc    55.  0.100 / 55.  0.100
gcc
7
svdrpsend
220 <filter> SVDRP VideoDiskRecorder 2.3.8; Sun Mar 11 19:46:12 2018; UTF-8
900- Frames: missed(0) duped(720) dropped(0) total(209) PTS( 8:00:30.592) drift(175) audio(441) video(0)
900- Video: h264/vaapi_vld 1280x720p 16:9 @ 1389x759 - Intel i965 driver for Intel(R) Broxton - 2.0.0
900- Audio: mp2 48000Hz 2 channels
900 Command: vaapidevice -d :0.0 -v va-api -a pulse -c softvol -w alsa-driver-broken
221 <filter> closing connection
INCLUDE THIS REPORT INTO YOUR GITHUB ISSUE

Also include any additional information (screen shots, log messages, etc) that could help with identifying and resolving the issue.
this was show up for the first time
WARNING: invalid surface provided for second field
vdr: gen8_mfd.c:558: gen8_mfd_avc_directmode_state: Assertion `obj_surface->bo && obj_surface->private_data' failed.
Magick: abort due to signal 6 (SIGABRT) "Abort"...
Aborted (core dumped)

Line artefacts in 1080p (HEVC, German DVB-T2) in window mode

I detected another issue that was not present for me with the old softhddevice/pesintta code before the rename to vaapidevice.

For DVB-T2 channels which are broadcast here in HEVC with 1080p resolution, in windowed mode, there are line artefacts in the picture. They disappear in fullscreen. Also in windowed mode, when I resize the window, sometimes they appear, sometimes they disappear (until I resize again the window). The problem does not happen with channels in other resolutions such as 1080i, 720p or SDTV. Only 1080p seems affected.

vaapidevice-artefacts-in-1080phevc

Implemente needed Patches

Please implemente needed Patches, related on the based softhddevice Fork:

--- softhddevice/codec.c.orig 2014-04-17 14:33:12.000000000 +0200
+++ softhddevice/codec.c 2014-04-28 20:58:15.850120324 +0200
@@ -59,6 +59,7 @@

#include <alsa/iatomic.h>
#include <libavcodec/avcodec.h>
+#include <libavutil/channel_layout.h>
#include <libavutil/mem.h>
// support old ffmpeg versions <1.0
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,18,102)

and

--- softhddevice-2014.04.17/Makefile.orig 2014-05-14 10:38:23.106431350 +0200
+++ softhddevice-2014.04.17/Makefile 2014-05-15 21:42:06.570275744 +0200
@@ -68,6 +68,7 @@

export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
+export PKG_CONFIG_PATH=/opt/ffmpeg/lib/pkgconfig

ifeq ($(CFLAGS),)
$(warning CFLAGS not set)

Compile/Link fixes for libva < 2.0.0

Hi,

the following patch makes vaapidevice compile with earlier version of libva (for me it compiles with this with libva 1.7.0):

--- video.c.orig	2018-02-21 10:59:01.807698117 +0100
+++ video.c	2018-02-21 14:51:50.527644830 +0100
@@ -81,9 +81,9 @@
 #endif
 
 #include <va/va_x11.h>
-#if !VA_CHECK_VERSION(1,0,0)
-#error "libva is too old - please, upgrade!"
-#endif
+//#if !VA_CHECK_VERSION(1,0,0)
+//#error "libva is too old - please, upgrade!"
+//#endif
 #include <va/va_vpp.h>
 #ifdef USE_GLX
 #include <va/va_glx.h>
@@ -2291,9 +2291,11 @@
     setenv("DISPLAY", display_name, 1);
 
 #ifndef DEBUG
+#if VA_CHECK_VERSION(0,40,0)
     vaSetErrorCallback(VaDisplay, NULL, NULL);
     vaSetInfoCallback(VaDisplay, NULL, NULL);
 #endif
+#endif
     if (vaInitialize(VaDisplay, &major, &minor) != VA_STATUS_SUCCESS) {
 	Error("video/vaapi: Can't inititialize VA-API on '%s'", display_name);
 	vaTerminate(VaDisplay);
@@ -2426,7 +2428,7 @@
 	    // intel: NV12 is native format for H.264 decoded surfaces
 	case AV_PIX_FMT_YUV420P:
 	case AV_PIX_FMT_YUVJ420P:
-	    fourcc = VA_FOURCC_I420;	// aka. VA_FOURCC_IYUV
+	    fourcc = VA_FOURCC_IYUV;	// orig. VA_FOURCC_I420
 	    break;
 	case AV_PIX_FMT_NV12:
 	    fourcc = VA_FOURCC_NV12;
@@ -4417,7 +4419,7 @@
 			= frame->data[2][i * frame->linesize[2] + x];
 		}
 	    }
-	} else if (decoder->Image->format.fourcc == VA_FOURCC_I420) {
+	} else if (decoder->Image->format.fourcc == VA_FOURCC_IYUV) {
 	    picture->data[0] = va_image_data + decoder->Image->offsets[0];
 	    picture->linesize[0] = decoder->Image->pitches[0];
 	    picture->data[1] = va_image_data + decoder->Image->offsets[1];

AMD/ATI Support

I currently run two VDRs, one based on Intel and the other with an AMD Radeon HD6450 graphics. I also gave now vaapidevice a try on the AMD one, but it only showed the OSD (which was "hanging"/not disappearing anymore) and no picture or sound. I have not done any further research (like checking the logs) so far since I am not sure if vaapidevice is supposed to work on AMD or not. Would be great if one of the devs can clarify if this plugin aims at supporting also AMD or if it is purely restricted to Intel graphics (which would be OK since the old softhddevice plugin with vdpau works reasonably well for AMD).

UHD channels not working since api change

UHD channels have only still image and blinking green screen here (8bit hevc channels in 1080p are fine)
issue did start here 192789d if remember right
screenshot from 2018-03-07 21-53-42

could not get a better screenshot showing the green flashing

deprecated function

video.c: In function ‘VideoSetPts’:
video.c:359:5: warning: ‘av_frame_get_pkt_duration’ is deprecated [-Wdeprecated-declarations]
     Debug8("video: %d/%d %" PRIx64 " -> %d", video_ctx->framerate.den, video_ctx->framerate.num,
     ^~~~~~
In file included from /usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:38:0,
                 from video.c:52:
/usr/include/x86_64-linux-gnu/libavutil/frame.h:591:9: note: declared here
 int64_t av_frame_get_pkt_duration         (const AVFrame *frame);
         ^~~~~~~~~~~~~~~~~~~~~~~~~

as there is no easy way to replace it could this be usesd to quiet the compile

FF_DISABLE_DEPRECATION_WARNINGS
Debug8("video: %d/%d %" PRIx64 " -> %d", video_ctx->fram.....
FF_ENABLE_DEPRECATION_WARNINGS

When switching to ZDF based transponder it takes several seconds until sound is heard

When switching to ZDF based transponder there is silence for several seconds, then the picture stops for a brief moment and then both sound and picture are available (in this case at 18:01:45):

Mar 11 18:01:37 [vdr] [10462] switching to channel 2 S19.2E-1-1011-11110 (ZDF HD)
Mar 11 18:01:37 [vdr] [10496] VAAPI: audio/alsa: using device 'hw:0,7'
Mar 11 18:01:37 [vdr] [10496] VAAPI: audio/alsa: start delay 336ms
Mar 11 18:01:45 [vdr] [10496] VAAPI: audio/alsa: using device 'hw:0,7'
Mar 11 18:01:45 [vdr] [10496] VAAPI: audio/alsa: start delay 336ms
Mar 11 18:01:45 [vdr] [10723] ERROR: TS packet not accepted in Transfer Mode
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8983/440) 0
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8984/440) 0
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8985/440) 0
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8986/440) 5
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8987/440) 0
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8988/440) 0
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8989/440) 0
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8990/440) 0
Mar 11 18:01:45 [vdr] [10505] VAAPI-ERROR: video: display buffer empty, duping frame (8991/440) 5

Best regards,

Jochen

VAAPIDEVICE SYSTEM INFORMATION REPORT

inxi
Resuming in non X mode: xdpyinfo not found. For package install advice run: inxi --recommends
System:    Kernel: 4.15.8-gentoo x86_64 bits: 64 gcc: 6.4.0 Console: tty 0
           Distro: Gentoo Base System release 2.4.1
Machine:   Device: desktop Mobo: ASUSTeK model: J3455M-E v: Rev X.0x serial: <filter>
           UEFI: American Megatrends v: 0604 date: 09/29/2017
CPU:       Quad core Intel Celeron J3455 (-MCP-) arch: N/A cache: 1024 KB
           flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 11980
           clock speeds: max: 2300 MHz 1: 1616 MHz 2: 1889 MHz 3: 1988 MHz
           4: 1582 MHz
Graphics:  Card: Intel Device 5a85 bus-ID: 00:02.0
           Display Server: X.org 1.19.5 driver: intel
           tty size: 140x50 Advanced Data: N/A for root
Audio:     Card Intel Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster
           driver: snd_hda_intel bus-ID: 00:0e.0
           Sound: Advanced Linux Sound Architecture v: k4.15.8-gentoo
vainfo
ffmpeg
ffmpeg version 3.3.6 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 6.4.0 (Gentoo 6.4.0-r1 p1.3)
libavutil      55. 58.100 / 55. 58.100
libavcodec     57. 89.100 / 57. 89.100
libavformat    57. 71.100 / 57. 71.100
libavdevice    57.  6.100 / 57.  6.100
libavfilter     6. 82.100 /  6. 82.100
libavresample   3.  5.  0 /  3.  5.  0
libswscale      4.  6.100 /  4.  6.100
libswresample   2.  7.100 /  2.  7.100
libpostproc    54.  5.100 / 54.  5.100
gcc
6.4.0
svdrpsend
220 <filter> SVDRP VideoDiskRecorder 2.3.8; Sun Mar 11 18:07:04 2018; UTF-8
900- Frames: missed(0) duped(24896) dropped(20) total(15907) PTS(22:41:30.581) drift(146) audio(423) video(0)
900- Video: h264/vaapi_vld 1280x720p 16:9 @ 1920x1080 - Intel i965 driver for Intel(R) Broxton - 2.1.0
900- Audio: mp2 48000Hz 2 channels
900 Command: vaapidevice -d :0.0 -v va-api -a hw:0,7 -f
221 <filter> closing connection
INCLUDE THIS REPORT INTO YOUR GITHUB ISSUE

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.