VDPAU Not Functional At 4K

The other day, I upgraded my GPU from a GeForce 740 to an EVGA Geforce 1050 TI SC and VDPAU is not functional with any video file above 1920 x 1080. I am still using a 1080P PC monitor from HP connected via DVI-D. When I play any 4K H.264 file, VLC (2.2.5.1) will not engage VDPAU at all and playback of HEVC files fails entirely, with no picture. VLC gives the message that any 4K H.264 file is level 5.0/5.1, above the decoding capabilities of the VDPAU decoder and it cannot engage VDPAU at all for HEVC decoding, failing to create any video output. I’ve also seen that some files such as the Jellyfish H.264 1080P test clip will not use VDPAU in VLC either, giving the same error message that the file is too advanced for VDPAU to decode, forcing software decode instead. Using mPlayer works with VDPAU for H.264 at both 1080P and 4K and won’t use VDPAU for HEVC, but it sometimes locks up after a bit, will not load any more files, or crashes after consecutively playing three or more video files using VDPAU. VDPAUINFO shows that the GPU won’t decode any H.264 content higher than profile 4.1 and HEVC decoding is completely broken at level 153, which is obviously not correct since this GPU is supposed to be capable of decoding pretty much anything you can throw at it. My driver version is 381.09 on 64-bit Ubuntu MATE 16.04.2, with all the latest updates.

Today, I tried the other two driver releases available to my system (378.13 and 375.39) and both have the same VDPAU defect. Removing and reinstalling the 381 drivers and VDPAU didn’t fix the issue either.

I think vdpau is pretty much dead when it comes to nvidia. Look for cuda/cuvid support for hardwaredec.

Unfortunately, that doesn’t help me since the guy who runs VLC and makes all the development decisions won’t allow CUVID to be added to the player’s capabilities and apparently nobody else has implemented it either, so my only choice is to use VDPAU or switch to Windows. To make matters worse, the versions of FFMPEG used in Ubuntu are the older 2.X release tree and not the newer ones with newer functions like CUVID, so I’m basically screwed.

Here’s the results of the VDPAUINFO, which matches what’s in the VDPAU tab of my Nvidia control panel. As you can see, the decoding capabilities of the 1050 TI are not fully exposed by the driver, so I can’t decode any 4K video file, because - according to the H.264 standards - all 4K files are considered level 5/5.1, which is above the decoding capabilities exposed by the driver and HEVC is broken with no real support. All three of the release drivers I tried, showed exactly what you see here…

API version: 1
Information string: NVIDIA VDPAU Driver Shared Library 381.09 Thu Mar 30 17:13:50 PDT 2017

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

The last thing that was added was hevc main level5.1 (=153). That was two years ago:
https://devtalk.nvidia.com/default/topic/821171/?comment=4493655

“Added support for VDPAU Feature Set F to the NVIDIA VDPAU driver.”
Feature Set F in this case:
http://us.download.nvidia.com/XFree86/FreeBSD-x86_64/355.06/README/vdpausupport.html#vdpau-implementation-limits-decoder
I don’t know why there has been no further development, might be lack of resources, flaw in vdpau design, patent/license issues or something completely different.
If you want a cuda enabled player for Linux look for mpv version>=0.21. YMMV

http://www.nvidia.com/download/driverResults.aspx/104284/en-us

“Added support for VDPAU Feature Set H to the NVIDIA VDPAU driver. GPUs with VDPAU Feature Set H are capable of hardware-accelerated decoding of 8192x8192 (8k) H.265/HEVC video streams.”

http://us.download.nvidia.com/XFree86/Linux-x86_64/381.09/README/vdpausupport.html#vdpau-implementation-limits

VDPAU Feature Set G

VDPAU Feature Set H

Please don’t post false misleading info if you don’t actually follow driver developments. What’s not yet enabled is HEVC Main10 & Main12 VDPAU hardware decoding support.

https://developer.nvidia.com/nvidia-video-codec-sdk

Still waiting for Video Codec SDK 8.0 to be released, then you can access the hardware decoder through NVDEC API while Nvidia gets VDPAU working for Main10/Main12.

I doubt Nvidia would abandon VDPAU. It’s one of the reasons why many Linux users choose their hardware for HTPCs to begin with. Anyway, I managed to get VDPAU working briefly with the latest mpv before it tanked due to VDPAU errors at 4K and then got mpv working perfectly with CUVID, but that player really is not my cup of tea since you can’t configure any settings in the actual player. I guess I’ll just have to make due until I get some fixed drivers.

Whoops, sorry. Didn’t actually care about the beta driver yet.
But there’s still the fact that capabilities hadn’t been updated for two years and the existing feature sets are far from complete. That’s not what I would call active development.

@LeggoTheEggo
As with mplayer, you can use different frontends with mpv: https://wiki.archlinux.org/index.php/mpv#Front_ends
Though they’re also not that feature-rich;)

I tried to get CUDA working with mpv and I thought I got it working by following the mpv options instructions and installing the appropriate CUDA toolkit and drivers, but it looks like I’m just using my quad-core CPU to decode the video cause they get used heavily while my GPU does little when playing vids through mpv. The dev-lit I read from the SDK subtly implies that they are ending VDPAU in favor of the NV-APIs and the VDPAU support on Pascal hasn’t really changed in a year, according to earlier driver VDPAUINFO tables that I found. Meh. I also poked the VLC devs again since they seemed to be fairly ignorant about the new APIs (and the former CUVID that they ignored in favor of VDPAU) and they certainly aren’t talking about them at all on their forums. With Linux laptops now shipping with Pascal and 4K displays, it’s important to get some functional 4K video decoding in the near future and they seem to be very much stuck in the mud when it comes to VLC development.

@LeggoTheEggo
HEVC decoding (incl. 4K Main10) via CUDA is fairly functional with mpv on Linux. Yes, it has some troubles with certain files, but it’s not clear if that’s the driver’s fault, or the file’s fault, or the player’s fault, or something. Neither Nvidia nor the community seems to be much interested in digging into that. However, generally, CUDA HW decoding is working rather well there.
If you have a trouble with CUDA on mpv – you’d better want to open a bug ticket at mpv’s github. I doubt you get any help about that on this forum.

I can’t say on Nvidia’s behalf, but I’m pretty much sure that VDPAU is dead.

At the moment neither Nvidia nor Linux itself are good for the latest trends in video playback. You can’t get HW decoding, high bit-depth output, HDR passthrough, etc. without real pain in the back. Software players are mediocre, at most. If video playback is what you want – you’ll be better off on Win.

vdpau broken with 381, 378 is still good.

Any news about HEVC support?

HEVC_MAIN_10 — not supported —
HEVC_MAIN_STILL — not supported —
HEVC_MAIN_12 — not supported —
HEVC_MAIN_444 — not supported —

Hello

Is NVIDIA going to do something with hardware HEVC support for linux?

Well, vdpau uses on chip hardware decoder (ASIC) and as such there not much to do in terms of expanding support if hardware doesn’t support it.

On the other hand, NVDEC can use both ASIC chip or CUDA (e.g. GPU core die) so it’s preferable for future players to use NVDEC API to have best of both worlds (dedicated low power chip if possible or compute power to accelerate what CPU would normally do).

I’m not 100% on top of nvidia video sdk license to say whether nvdec will be useful in practice (e.g. without forcing users to accept ToS or ship separately from players etc).

So, for Linux users, it is better to invest in AMD cards that have VAAPI? If Nvidia does not want to support linux users then it will probably be.

For video playback you shouldn’t “invest” in Linux, in the first place (at least, at the moment, for reasons I don’t want to go into here).
And why would you want VDPAU so much when you don’t mind switching to VAAPI anyway?

AMD cards have driver caveats of their own (incl. proprietary drivers, required for 10 bits). However, personally I never tested it since AMD bought ATI.

HEVC and VP9 (both incl. 10-bit 4K) HW deconding works rather well with VAAPI and fresh MESA on Intel’s Kaby Lakes.

HEVC (incl. 10 bit 4K HEVC) decoding works rather well with mpv on Nvidia with both CUDA and NVDEC. VP9 should work too, as far as I remember, but personally I didn’t test it. Also other ffmpeg-based players might work with CUDA/NVDEC too, but personally I didn’t test them either.

I mainly refer to LibreELEC and Kodi in it. Under windows, Kodi is the same problem and LibreELEC is exceptionally stable. Unfortunately, without VDPAU there will be no support for HEVC in linux (LibreELEC). I have Kaby Lake and it works on it HEVC but somehow the image and speed of the action is much better on geforce 1050. Scaling is better.

AFAIK Kodi devs are not eager to implement CUDA/NVDEC. You could set mpv in Kodi as an external player. If there’s no mpv in your distro – switching to another distro, with mpv in it, will be faster than waiting for Nvidia to update VDPAU. Another option is to try AMD indeed, with all caveats it takes.