protonscr

Streaming on Linux 64bit - Hardware decoding with NVIDIA causes the screen to blink

steamclosed reviewed
ValveSoftware/steam-for-linux#4194 · opened 2015-12-20 by ghost · updated 2016-02-06 · 4 comments · github
?ghost 2015-12-20 github

Hello All,
I'm running Fedora 23 64bit, I've been searching online for a solution the last couple of days but without success.

The screen blinks constantly when doing streaming with hardware decoding enabled.
I have a Nvidia GT 730 (has vdpau support) with proprietary drivers with the 32bit compatibility libraries installed.

I run Steam with
LIBGL_DEBUG=verbose steam

At first it was complaining it didn't find /usr/lib/i386-linux-gnu/dri/nvidia_drv_video.so
I saw nvidia_drv_video.so on /usr/lib64/dri was actually a softlink to vdpau_drv_video.so
So I installed libva-vdpau-driver.i686 and created a link pointing to the 32 version.
Now /usr/lib/i386-linux-gnu/dri/nvidia_drv_video.so points to /usr/lib/dri/vdpau_drv_video.so
(I also tried linking to lib64, but it will complain about not being 32bit)

Now it finds the driver, but somehow complains it doesn't have a required function.
libva error: /usr/lib/i386-linux-gnu/dri/nvidia_drv_video.so has no function __vaDriverInit_0_32

If I look at the 64 bit version running vainfo I get:

libva info: VA-API version 0.38.1
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_0_38
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.38 (libva 1.6.2)
vainfo: Driver version: Splitted-Desktop Systems VDPAU backend for VA-API - 0.7.4
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPE♥♥♥♥in              : VAEntrypointVLD
      VAProfileMPEG4Simple            : VAEntrypointVLD
      VAProfileMPEG4AdvancedSimple    : VAEntrypointVLD
      VAProfileH264Baseline           : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointVLD
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD

If I read it correctly, it seems that the init function for the 64 bit version is __vaDriverInit_0_38 but steam is trying to use __vaDriverInit_0_32 for the 32bit version. I don't know if the driver is wrong and doesn't have that function, or if steam should be trying to access it using the 0_38, or if it's a libva or vdpau driver issue.

I see people online who were able to make it work for Intel GPUs, but those solutions didn't work for nvidia.
I also tried exporting VDPAU_DRIVER=nvidia
and following the last part on https://steamcommunity.com/linkfilter/?url=https://wiki.archlinux.org/index.php/Talk:Steam

Finally, I'll leave the log when trying to stream a game:

libva info: VA-API version 0.35.1
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/i386-linux-gnu/dri/nvidia_drv_video.so
libva error: /usr/lib/i386-linux-gnu/dri/nvidia_drv_video.so has no function __vaDriverInit_0_32
libva info: va_openDriver() returns -1
INFO: CVAAPIAccel: vaInitialize() failed: unknown libva error
INFO: VDPAU hardware decoding
Installing breakpad exception handler for appid(streaming_client)/version(1.0)
INFO: Marking frame 4354 complete with status k_EStreamFrameResultDroppedReset
INFO: Marking frame 4355 complete with status k_EStreamFrameResultDroppedReset
INFO: Marking frame 4356 complete with status k_EStreamFrameResultDroppedReset
INFO: Marking frame 4357 complete with status k_EStreamFrameResultDroppedReset
INFO: Marking frame 4358 complete with status k_EStreamFrameResultDroppedLate
INFO: Timed out waiting for render, resetting decoder
INFO: libav error: decode_slice_header error
INFO: libav error: no frame!
INFO: Marking frame 4362 complete with status k_EStreamFrameResultDroppedDecodeCorrupt
INFO: libav error: decode_slice_header error
INFO: libav error: no frame!
INFO: Marking frame 4363 complete with status k_EStreamFrameResultDroppedDecodeCorrupt
INFO: libav error: decode_slice_header error
INFO: libav error: no frame!
INFO: Marking frame 4364 complete with status k_EStreamFrameResultDroppedDecodeCorrupt
INFO: libav error: decode_slice_header error
INFO: libav error: no frame!
INFO: Marking frame 4365 complete with status k_EStreamFrameResultDroppedDecodeCorrupt
INFO: libav error: decode_slice_header error
INFO: libav error: no frame!
INFO: Marking frame 4366 complete with status k_EStreamFrameResultDroppedDecodeCorrupt
INFO: libav error: decode_slice_header error
INFO: libav error: no frame!
INFO: Marking frame 4367 complete with status k_EStreamFrameResultDroppedDecodeCorrupt
INFO: libav error: decode_slice_header error
INFO: libav error: no frame!
INFO: Marking frame 4368 complete with status k_EStreamFrameResultDroppedDecodeCorrupt

Any help you could provide will be greatly appreciated.

Thanks!

TTele42 2015-12-20 github

If you are using the proprietary driver, you definately should not be running the stream through libva-vdpau-driver, as the proprietary driver does not provide vaapi. Are you sure you are using the video driver you intended to use?

?ghost 2015-12-25 github

Hi,
Thanks for replying,
I'm using the proprietary driver as far as I know (nouveau is blacklisted at boot time and only nvidia modules are loaded)

According to the release notes from NVIDIA driver, they do support VDPAU for my card (GT 730)
http://us.download.nvidia.com/XFree86/Linux-x86_64/358.16/README/supportedchips.html

The Feature set C is explained at:
http://us.download.nvidia.com/XFree86/Linux-x86_64/358.16/README/vdpausupport.html

Now, as pointed out in my previous post, when the NVIDIA drivers install in a 64 bit system, /usr/lib64/dri/nvidia_drv_video.so is actually a softlink to /usr/lib64/dri/vdpau_drv_video.so which is provided by the package libva-vdpau-driver.x86_64
So itś the NVIDIA installer itself that creates a softlink to use libva-vdpau-driver. So I guess that's intended behavior

Regards,

TTele42 2015-12-25 github

Okay, I do not understand this issue so I am bowing out now, best of luck to figuring it out.

?ghost 2016-02-06 github

Hi All,

I'm running NVIDIA driver 361.18 and Kernel 4.3.4-300.fc23.x86_64

This issue seems to be fixed now. Thanks

Nothing extracted yet.