dual video cards : vlc + avcodec select the "wrong" card
Config
VLC media player 3.0.12 Vetinari (revision 3.0.12-1-0-gd147bb5e)
Ubuntu 21.04 (Wayland)
Mesa 21.0.3
2 video cards
- AMD RX 5700 XT
- AMD HD6450 (very limited hardware decoding capability, not enough memory to handle 4K video)
$ sudo lshw -c display
*-display
description: VGA compatible controller
product: Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM]
vendor: Advanced Micro Devices, Inc. [AMD/ATI]
physical id: 0
bus info: pci@0000:25:00.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: pm pciexpress msi vga_controller bus_master cap_list rom
configuration: driver=radeon latency=0
resources: irq:72 memory:e0000000-efffffff memory:fca20000-fca3ffff ioport:d000(size=256) memory:fca00000-fca1ffff
*-display
description: VGA compatible controller
product: Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
vendor: Advanced Micro Devices, Inc. [AMD/ATI]
physical id: 0
bus info: pci@0000:28:00.0
version: c1
width: 64 bits
clock: 33MHz
capabilities: pm pciexpress msi vga_controller bus_master cap_list rom
configuration: driver=amdgpu latency=0
resources: irq:71 memory:c0000000-cfffffff memory:d0000000-d01fffff ioport:f000(size=256) memory:fcd00000-fcd7ffff memory:c0000-dffff
$ vainfo
libva info: VA-API version 1.10.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_10
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.10 (libva 2.10.0)
vainfo: Driver version: Mesa Gallium driver 21.0.3 for AMD Radeon RX 5700 XT (NAVI10, DRM 3.40.0, 5.11.0-26-generic, LLVM 12.0.0)
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSlice
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointEncSlice
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
What I expect
I'd like to use the RX5700 XT for hardware decoding with VAAPI backend. (for H264, HEVC files) Test file used : https://s3.amazonaws.com/x265.org/video/BigBuckBunny_2000h264.mp4 from https://x265.com/hevc-video-files/
What happens
vlc + avcodec seems to select the wrong card ("CAICOS" = HD6450) instead of the "NAVI" ( = RX5700XT) ( /usr/lib/x86_64-linux-gnu/dri/r600_drv_video.so instead of /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so ?) On screen : a black picture is displayed.
$ vlc -v BigBuckBunny_2000h264.mp4
VLC media player 3.0.12 Vetinari (revision 3.0.12-1-0-gd147bb5e7e)
[000056262668e670] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
[00007f7308001180] mp4 demux warning: STTS table of 1 entries
[00007f7308001180] mp4 demux warning: CTTS table of 240 entries
[00007f72ec003f70] gl gl: Initialized libplacebo v2.72.0 (API v72)
libva info: VA-API version 1.10.0
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
[00007f72ec003f70] glconv_vaapi_x11 gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.10.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/r600_drv_video.so
libva info: Found init function __vaDriverInit_1_10
libva info: va_openDriver() returns 0
[00007f7308c1a1b0] avcodec decoder: Using Mesa Gallium driver 21.0.3 for AMD CAICOS (DRM 2.50.0 / 5.11.0-26-generic, LLVM 12.0.0) for hardware decoding
[h264 @ 0x7f7308c3ac40] Using deprecated struct vaapi_context in decode.
radeon: Not enough memory for command submission.
radeon: Not enough memory for command submission.
radeon: Not enough memory for command submission.
Workaround
You have to invoke vlc with LIBVA_DRIVER_NAME=radeonsi :
$ LIBVA_DRIVER_NAME=radeonsi vlc -v BigBuckBunny_2000h264.mp4
VLC media player 3.0.12 Vetinari (revision 3.0.12-1-0-gd147bb5e7e)
[000055758f2c8670] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
[00007fac24001180] mp4 demux warning: STTS table of 1 entries
[00007fac24001180] mp4 demux warning: CTTS table of 240 entries
[00007fac14003f70] gl gl: Initialized libplacebo v2.72.0 (API v72)
libva info: VA-API version 1.10.0
libva info: User environment variable requested driver 'radeonsi'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_10
libva info: va_openDriver() returns 0
mesa: for the --simplifycfg-sink-common option: may only occur zero or one times!
mesa: for the --global-isel-abort option: may only occur zero or one times!
mesa: for the --amdgpu-atomic-optimizations option: may only occur zero or one times!
mesa: for the --structurizecfg-skip-uniform-regions option: may only occur zero or one times!
[00007fac24c0afa0] avcodec decoder: Using Mesa Gallium driver 21.0.3 for AMD Radeon RX 5700 XT (NAVI10, DRM 3.40.0, 5.11.0-26-generic, LLVM 12.0.0) for hardware decoding
[h264 @ 0x7fac24c3a100] Using deprecated struct vaapi_context in decode.
[00007fac1c0a8f60] qt window warning: orphaned video window
QObject::~QObject: Timers cannot be stopped from another thread
Question
I guess it is probably safe to put this in my ~/.profile ?
export LIBVA_DRIVER_NAME=radeonsi
export VDPAU_DRIVER=radeonsi