HEVC Main 10 Profile decoding using VDPAU unsupported on GTX 950 (361.28) ?

Dear all,

I’m currently evaluating the performance of the hardware decoding capabilities of the GeForce GTX 950 especially on HEVC UHD streams. According my understanding, it should be able to support the full hardware accelerated decoding of HEVC Main and Main 10 profile. However while processing, I’ve noticed that Main 10 profile is reported as unsupported by VDPAU. Is that a limitation of the GPU itself or of the driver or do I have missed something?

I’m running under Debian Linux 8 (64 bits), with NVidia drivers 361.28 and VPDAU 1.1.1. vdpauinfo is reporting the following:

display: :0   screen: 0
API version: 1
Information string: NVIDIA VDPAU Driver Shared Library  361.28  Wed Feb  3 15:14:38 PST 2016

Video surface:

name   width height types
-------------------------------------------
420     4096  4096  NV12 YV12
422     4096  4096  UYVY YUYV

Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
MPEG1                           0 65536  4080  4080
MPEG2_SIMPLE                    3 65536  4080  4080
MPEG2_MAIN                      3 65536  4080  4080
H264_BASELINE                  41 65536  4096  4096
H264_MAIN                      41 65536  4096  4096
H264_HIGH                      41 65536  4096  4096
VC1_SIMPLE                      1  8190  2048  2048
VC1_MAIN                        2  8190  2048  2048
VC1_ADVANCED                    4  8190  2048  2048
MPEG4_PART2_SP                  3  8192  2048  2048
MPEG4_PART2_ASP                 5  8192  2048  2048
DIVX4_QMOBILE                   0  8192  2048  2048
DIVX4_MOBILE                    0  8192  2048  2048
DIVX4_HOME_THEATER              0  8192  2048  2048
DIVX4_HD_1080P                  0  8192  2048  2048
DIVX5_QMOBILE                   0  8192  2048  2048
DIVX5_MOBILE                    0  8192  2048  2048
DIVX5_HOME_THEATER              0  8192  2048  2048
DIVX5_HD_1080P                  0  8192  2048  2048
H264_CONSTRAINED_BASELINE      41 65536  4096  4096
H264_EXTENDED                  41 65536  4096  4096
H264_PROGRESSIVE_HIGH          41 65536  4096  4096
H264_CONSTRAINED_HIGH          41 65536  4096  4096
H264_HIGH_444_PREDICTIVE       41 65536  4096  4096
HEVC_MAIN                      153 36864  4096  2304
HEVC_MAIN_10                   --- not supported ---
HEVC_MAIN_STILL                --- not supported ---
HEVC_MAIN_12                   --- not supported ---
HEVC_MAIN_444                  --- not supported ---

Output surface:

name              width height nat types
----------------------------------------------------
B8G8R8A8         16384 16384    y  Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8
R10G10B10A2      16384 16384    y  Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8

Bitmap surface:

name              width height
------------------------------
B8G8R8A8         16384 16384
R8G8B8A8         16384 16384
R10G10B10A2      16384 16384
B10G10R10A2      16384 16384
A8               16384 16384

Video mixer:

feature name                    sup
------------------------------------
DEINTERLACE_TEMPORAL             y
DEINTERLACE_TEMPORAL_SPATIAL     y
INVERSE_TELECINE                 y
NOISE_REDUCTION                  y
SHARPNESS                        y
LUMA_KEY                         y
HIGH QUALITY SCALING - L1        y
HIGH QUALITY SCALING - L2        -
HIGH QUALITY SCALING - L3        -
HIGH QUALITY SCALING - L4        -
HIGH QUALITY SCALING - L5        -
HIGH QUALITY SCALING - L6        -
HIGH QUALITY SCALING - L7        -
HIGH QUALITY SCALING - L8        -
HIGH QUALITY SCALING - L9        -

parameter name                  sup      min      max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH              y         1     4096
VIDEO_SURFACE_HEIGHT             y         1     4096
CHROMA_TYPE                      y
LAYERS                           y         0        4

attribute name                  sup      min      max
-----------------------------------------------------
BACKGROUND_COLOR                 y
CSC_MATRIX                       y
NOISE_REDUCTION_LEVEL            y      0.00     1.00
SHARPNESS_LEVEL                  y     -1.00     1.00
LUMA_KEY_MIN_LUMA                y
LUMA_KEY_MAX_LUMA                y

I was wondering the same thing. I thought this GPU was supposed to support that as well as HEVC_MAIN_444 which mine also reports that is not supported. Is this a driver issue or hardware limitation?

try 355.11 .

Today, the driver doesn’t support MAIN 10, although the hardware does (hence why MAIN 10 works on windows). It will require major vdpau changes to fully support as vdpau assumes 8bit surfaces throughout its pipeline and that will need to change.

Thanks for the information philipl! It’s surprisingly difficult to find specifics on what HEVC profiles the hardware even supports (GTX960 in my case) not to mention the software side of things whether for Linux or Windows but that’s probably just my unfamiliarity with the terminology and/or not really knowing where to look.

"DXVA2 VP9 Hardware Acceleration

Late last year Microsoft published a specification on VP9 DXVA2 hardware acceleration. Shortly after, both Intel and NVIDIA started to support this in their hardware.
This version of LAV Video enables using the hardware acceleration in the latest NVIDIA GPUs (GTX950/960), and recent Intel GPUs (Braswell and Skylake)

Please note that only VP9 Profile 0 is supported, 4:2:0 8-bit."

Sadly no VP9 hardware decoding support yet on Unix based OSes eventhough it’s fully functional on Windows.

Hopefully the Nvidia driver and VDPAU will be updated with HEVC Main10 and VP9 support.

Phoronix tested a Pascal GP104 GTX 1080 and it still doesn’t support HEVC Main10/Main12 hardware decoding yet in driver or VDPAU. Pascal is impressive though, it supports 8192 x 8192 res @ 30FPS for HEVC decoding.

display: :0   screen: 0
API version: 1
Information string: NVIDIA VDPAU Driver Shared Library  367.18  Mon May 16 17:35:48 PDT 2016

Video surface:

name   width height types
-------------------------------------------
420     8192  8192  NV12 YV12 
422     8192  8192  UYVY YUYV 

Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
MPEG1                           0 65536  4096  4096
MPEG2_SIMPLE                    3 65536  4096  4096
MPEG2_MAIN                      3 65536  4096  4096
H264_BASELINE                  41 65536  4096  4096
H264_MAIN                      41 65536  4096  4096
H264_HIGH                      41 65536  4096  4096
VC1_SIMPLE                      1  8190  2048  2048
VC1_MAIN                        2  8190  2048  2048
VC1_ADVANCED                    4  8190  2048  2048
MPEG4_PART2_SP                  3  8192  2048  2048
MPEG4_PART2_ASP                 5  8192  2048  2048
DIVX4_QMOBILE                   0  8192  2048  2048
DIVX4_MOBILE                    0  8192  2048  2048
DIVX4_HOME_THEATER              0  8192  2048  2048
DIVX4_HD_1080P                  0  8192  2048  2048
DIVX5_QMOBILE                   0  8192  2048  2048
DIVX5_MOBILE                    0  8192  2048  2048
DIVX5_HOME_THEATER              0  8192  2048  2048
DIVX5_HD_1080P                  0  8192  2048  2048
H264_CONSTRAINED_BASELINE      41 65536  4096  4096
H264_EXTENDED                  41 65536  4096  4096
H264_PROGRESSIVE_HIGH          41 65536  4096  4096
H264_CONSTRAINED_HIGH          41 65536  4096  4096
H264_HIGH_444_PREDICTIVE       41 65536  4096  4096
HEVC_MAIN                      153 262144  8192  8192
HEVC_MAIN_10                   --- not supported ---
HEVC_MAIN_STILL                --- not supported ---
HEVC_MAIN_12                   --- not supported ---
HEVC_MAIN_444                  --- not supported ---

Output surface:

name              width height nat types
----------------------------------------------------
B8G8R8A8         32768 32768    y  Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8 
R10G10B10A2      32768 32768    y  Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8 

Bitmap surface:

name              width height
------------------------------
B8G8R8A8         32768 32768
R8G8B8A8         32768 32768
R10G10B10A2      32768 32768
B10G10R10A2      32768 32768
A8               32768 32768

Video mixer:

feature name                    sup
------------------------------------
DEINTERLACE_TEMPORAL             y
DEINTERLACE_TEMPORAL_SPATIAL     y
INVERSE_TELECINE                 y
NOISE_REDUCTION                  y
SHARPNESS                        y
LUMA_KEY                         y
HIGH QUALITY SCALING - L1        y
HIGH QUALITY SCALING - L2        -
HIGH QUALITY SCALING - L3        -
HIGH QUALITY SCALING - L4        -
HIGH QUALITY SCALING - L5        -
HIGH QUALITY SCALING - L6        -
HIGH QUALITY SCALING - L7        -
HIGH QUALITY SCALING - L8        -
HIGH QUALITY SCALING - L9        -

parameter name                  sup      min      max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH              y         1     8192
VIDEO_SURFACE_HEIGHT             y         1     8192
CHROMA_TYPE                      y  
LAYERS                           y         0        4

attribute name                  sup      min      max
-----------------------------------------------------
BACKGROUND_COLOR                 y  
CSC_MATRIX                       y  
NOISE_REDUCTION_LEVEL            y      0.00     1.00
SHARPNESS_LEVEL                  y     -1.00     1.00
LUMA_KEY_MIN_LUMA                y  
LUMA_KEY_MAX_LUMA                y

Hey guys just a quick question about the current situation:

I am using an skylake dual core (pentium 4400) and a gtx 950 with Linux mint 64bit and Kodi (current version).

I downloaded an 4k sample video @hevc and its stuttering like hell. When I monitor the system-load Kodi says that both cores are at 100% so I figure the gtx950 doesn’t help a bit.

Note that I probably use an older driver so I was wondering if it’s worth trying to update my drivers (I only do so if really necessary because I find it not as easy with Linux as with Windows).

Will the gtx950 support 4k/hevc decoding with all current drivers installed or is it still to come?

THX!

10bit video (HEVC Main 10) is still not supported. So if your videos are 10bit, you’re out of luck.

But 8bit video (HEVC Main) should work. Just run vdpauinfo like the people above did, it will tell you whether HEVC_MAIN is supported on your machine. If it isn’t, then either your driver or your libvdpau are too old.

It seems that HEVC Main10 hardware decoding is supported via the CUDA (CUVID) API, even on Linux - so you can use CUVID instead of VDPAU in your applications if you really need access to Main10 right this second. (mpv has added support for it in the last few days)

Unfortunately, it still dithers down to 8-bit, so it’s not a true replacement for software decoding, but for people with slower hardware it should definitely help.

haasn, tell please what can I do to get HEVC Main10 hardware decoding via the CUDA (CUVID) API on Windows (I like XP, but Windows7x64 good enough for begining). HEVC 3840x2160 8bit hardware decoding via CUVID works pretty well on Windows XP with cheap (~100$) Palit GTX 750 1GB on GM206-150-A1 chip (I tried with last 368.81 driver) in MPC-HC HomeCinema x86 (KMPlayer, DVBViewer) with LAV Video Decoder 0.68.1 (not last beta of decoder) - NVIDIA CUVID in Hardware Acceleration tab. But I need HEVC 3840x2160 10bit so almost all SAT (excluding NASA and Hispasat 4K) UHD channels I can receive are 10bit.
PS. HEVC Main10 hardware decoding works well with DXVA2 native in LAV Video Decoder on Windows7x64 on EVR, but once more I like WindowsXP with VMR7windowed - it never stuttering video when I manually set frequency of monitor equal (when interlaced) or double (on movies with MadVR better then with VMR7w) video frequency (i.e. 47,952Hz = 2*23,978Hz)

So if VDPAU does not support the Main10, and CUVID is the only option…then how can I implement it to be available via MPV player ?

You will need to build ffmpeg from git (as linking against cuda is not believed to be GPL compatible - no one can build and distribute binaries with the feature enabled) with cuvid enabled, and then build mpv from git using that ffmpeg.

If you do that, you’ll have a ‘cuda’ hwdec available in mpv and off you go.

philipl
What about Windows (I am about implementation in LAV Video Decoder)? If you can tell anything useful answer please here https://devtalk.nvidia.com/default/topic/965840

I updated to latest vdpau version 1.4 and nvidia 440.82 on linux and since vdpau added 10 and 12 bit support ca. 3 weeks ago, it is still not available on Linux. Since the vdpau now supports 10/12 bit, it is on NVidia next to upgrade the linux drivers… (i assume)

display: :0   screen: 0
API version: 1
Information string: NVIDIA VDPAU Driver Shared Library  440.82  Wed Apr  1 19:39:06 UTC 2020

Video surface:

name   width height types
-------------------------------------------
420     8192  8192  NV12 YV12
422     8192  8192  UYVY YUYV
444     8192  8192  NV24 YV24

Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
MPEG1                           0 65536  4096  4096
MPEG2_SIMPLE                    3 65536  4096  4096
MPEG2_MAIN                      3 65536  4096  4096
H264_BASELINE                  51 65536  4096  4096
H264_MAIN                      51 65536  4096  4096
H264_HIGH                      51 65536  4096  4096
VC1_SIMPLE                      1  8190  2048  2048
VC1_MAIN                        2  8190  2048  2048
VC1_ADVANCED                    4  8190  2048  2048
MPEG4_PART2_SP                  3  8192  2048  2048
MPEG4_PART2_ASP                 5  8192  2048  2048
DIVX4_QMOBILE                   0  8192  2048  2048
DIVX4_MOBILE                    0  8192  2048  2048
DIVX4_HOME_THEATER              0  8192  2048  2048
DIVX4_HD_1080P                  0  8192  2048  2048
DIVX5_QMOBILE                   0  8192  2048  2048
DIVX5_MOBILE                    0  8192  2048  2048
DIVX5_HOME_THEATER              0  8192  2048  2048
DIVX5_HD_1080P                  0  8192  2048  2048
H264_CONSTRAINED_BASELINE      51 65536  4096  4096
H264_EXTENDED                  51 65536  4096  4096
H264_PROGRESSIVE_HIGH          51 65536  4096  4096
H264_CONSTRAINED_HIGH          51 65536  4096  4096
H264_HIGH_444_PREDICTIVE       51 65536  4096  4096
VP9_PROFILE_0                   1 262144  8192  8192
VP9_PROFILE_1                  --- not supported ---
VP9_PROFILE_2                  --- not supported ---
VP9_PROFILE_3                  --- not supported ---
HEVC_MAIN                      153 262144  8192  8192
HEVC_MAIN_10                   --- not supported ---
HEVC_MAIN_STILL                --- not supported ---
HEVC_MAIN_12                   --- not supported ---
HEVC_MAIN_444                  --- not supported ---
HEVC_MAIN_444_10               --- not supported ---
HEVC_MAIN_444_12               --- not supported ---

Output surface:

name              width height nat types
----------------------------------------------------
B8G8R8A8         32768 32768    y  Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8
R10G10B10A2      32768 32768    y  Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8

Bitmap surface:

name              width height
------------------------------
B8G8R8A8         32768 32768
R8G8B8A8         32768 32768
R10G10B10A2      32768 32768
B10G10R10A2      32768 32768
A8               32768 32768

Video mixer:

feature name                    sup
------------------------------------
DEINTERLACE_TEMPORAL             y
DEINTERLACE_TEMPORAL_SPATIAL     y
INVERSE_TELECINE                 y
NOISE_REDUCTION                  y
SHARPNESS                        y
LUMA_KEY                         y
HIGH QUALITY SCALING - L1        y
HIGH QUALITY SCALING - L2        -
HIGH QUALITY SCALING - L3        -
HIGH QUALITY SCALING - L4        -
HIGH QUALITY SCALING - L5        -
HIGH QUALITY SCALING - L6        -
HIGH QUALITY SCALING - L7        -
HIGH QUALITY SCALING - L8        -
HIGH QUALITY SCALING - L9        -

parameter name                  sup      min      max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH              y         1     8192
VIDEO_SURFACE_HEIGHT             y         1     8192
CHROMA_TYPE                      y
LAYERS                           y         0        4

attribute name                  sup      min      max
-----------------------------------------------------
BACKGROUND_COLOR                 y
CSC_MATRIX                       y
NOISE_REDUCTION_LEVEL            y      0.00     1.00
SHARPNESS_LEVEL                  y     -1.00     1.00
LUMA_KEY_MIN_LUMA                y
LUMA_KEY_MAX_LUMA                y