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