>> Video decoding on NVIDIA
>> Please buy some real Linux hardware.
>
> This doesn't really help at all. Is it supposed to be funny, or is it
> just cynical resignation?
After trying to configure HW acceleration on 9xx series GPU, I'll just take that as a
serious response.
Consider following points:
* VDPAU is not compatible with Wayland, our main desktop scenario.
* Video decoding in Firefox on X11 is limited to X11/EGL, which does not work with the
Nvidia proprietary driver (but at least there's a hope for that scenario).
* There's no NVDEC vaapi backend, and I see opinions that it would be hard to fit
NVDEC into vaapi model.
* Nouveau support ends at VP5 (7xx series).
The wording might be different, but _at the moment_ any recent Nvidia hardware cannot be
used for HW video acceleration in Firefox.
currently,for proprietary nvidia hw accel
useful docs
https://wiki.archlinux.org/title/Hardware_video_acceleration
e.g.
on
lsb_release -rd
Description: Fedora release 35 (Thirty Five)
Release: 35
with nvidia hw,
hwinfo --gfxcard | egrep " Model| Device| Driver:"
Model: "nVidia GP108 [GeForce GT 1030]"
Device: pci 0x1d01 "GP108 [GeForce GT 1030]"
Driver: "nvidia"
latest upstream driver,
nvidia-settings -q NvidiaDriverVersion
Attribute 'NvidiaDriverVersion' (test.loc:0.0): 495.44
Attribute 'NvidiaDriverVersion' (test.loc:0[gpu:0]): 495.44
lsmod | grep nv
nvidia_uvm 1167360 0
nvidia_drm 73728 8
nvidia_modeset 1150976 20 nvidia_drm
nvidia 36950016 1354 nvidia_uvm,nvidia_modeset
drm_kms_helper 303104 1 nvidia_drm
drm 630784 14 drm_kms_helper,nvidia,drm_ttm_helper,nvidia_drm,ttm
currently, this set of relevant pkgs
rpm -qa | egrep
"libva|nvidia|vdpau|dkms|kernel-devel|glx|^egl|glvnd|libvpx|vulkan"
dkms-2.8.6-1.fc35.noarch
egl-utils-8.4.0-12.20210504git0f9e7d9.fc35.x86_64
glx-utils-8.4.0-12.20210504git0f9e7d9.fc35.x86_64
kernel-devel-5.14.17-301.fc35.x86_64
libglvnd-1.3.4-2.fc35.x86_64
libglvnd-core-devel-1.3.4-2.fc35.x86_64
libglvnd-devel-1.3.4-2.fc35.x86_64
libglvnd-egl-1.3.4-2.fc35.x86_64
libglvnd-gles-1.3.4-2.fc35.x86_64
libglvnd-glx-1.3.4-2.fc35.x86_64
libglvnd-opengl-1.3.4-2.fc35.x86_64
libva-2.13.0-2.fc35.x86_64
libva-utils-2.13.0-1.fc35.x86_64
libva-vdpau-driver-0.7.4-110.fc35.x86_64
libvdpau-1.4-6.fc35.x86_64
libvdpau-devel-1.4-6.fc35.x86_64
libvdpau-trace-1.4-6.fc35.x86_64
libvdpau-va-gl-0.4.2-20.fc35.x86_64
libvpx-1.10.0-2.fc35.x86_64
mesa-vdpau-drivers-21.2.5-1.fc35.x86_64
mesa-vulkan-drivers-21.2.5-1.fc35.x86_64
vdpauinfo-1.4-1.fc35.x86_64
vulkan-headers-1.2.189.0-1.fc35.noarch
vulkan-loader-1.2.189.0-1.fc35.x86_64
vulkan-loader-devel-1.2.189.0-1.fc35.x86_64
vulkan-tools-1.2.189.0-1.fc35.x86_64
checking for X11
grep -iE 'vdpau | dri driver' /var/log/Xorg.0.log
[ 37.637] (II) NVIDIA(0): [DRI2] VDPAU driver: nvidia
verifying
ldd `which mpv` | egrep -i "egl|nvidia|vdpau"
libEGL.so.1 => /lib64/libEGL.so.1 (0x00007fadfdbb4000)
libwayland-egl.so.1 => /lib64/libwayland-egl.so.1 (0x00007fadfbdbe000)
libvdpau.so.1 => /lib64/libvdpau.so.1 (0x00007fadfacea000)
VDPAU_DRIVER=nvidia mpv --hwdec=auto TEST.mp4
(+) Video --vid=1 (*) (h264 1920x1080 30.015fps)
(+) Audio --aid=1 --alang=eng (*) (aac 2ch 48000Hz)
>> Using hardware decoding (nvdec).
AO: [pulse] 48000Hz
stereo 2ch float
VO: [gpu] 1920x1080 cuda[nv12]
AV: 00:00:02 / 00:00:39 (7%) A-V: 0.026 ct: 0.256
for FF
rpm -qa firefox
firefox-94.0-1.fc35.x86_64
read
https://www.phoronix.com/scan.php?page=news_item&px=Firefox-94-EGL-Li...
https://mozillagfx.wordpress.com/2021/10/30/switching-the-linux-graphics-...
note
"In X.org, since 94, Firefox will run in EGL mode by default which is sufficient
[19]."
user.js settings currently include,
user_pref("media.ffmpeg.enabled", true);
user_pref("media.ffmpeg.vaapi.enabled", true);
user_pref("media.ffmpeg.vaapi-drm-display.enabled", true);
user_pref("media.ffvpx.enabled", false);
user_pref("media.navigator.mediadatadecoder_vpx_enabled", true);
user_pref("media.rdd-ffvpx.enabled", false);
user_pref("media.rdd-vpx.enabled", false);
check
grep -iE 'vdpau | dri driver' /var/log/Xorg.0.log
[ 216.777] (II) NVIDIA(0): [DRI2] VDPAU driver: nvidia
^^^^^^
hwinfo --gfxcard | grep "SysFS ID"
SysFS ID: /devices/pci0000:00/0000:00:03.1/0000:09:00.0
ls -d /sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0/drm/render*
/sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0/drm/renderD128/
ls -al /usr/lib64/dri/nvidia_drv_video*
lrwxrwxrwx 1 root root 18 Jul 22 12:18 /usr/lib64/dri/nvidia_drv_video.so ->
vdpau_drv_video.so*
^^^^^^
launch @ shell
VDPAU_DRIVER=nvidia MOZ_LOG="Dmabuf:5, PlatformDecoderModule:5" firefox
nav to
https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4
@ shell
...
[Child 19933: Main Thread]: D/Dmabuf nsDMABufDevice::IsDMABufVAAPIEnabled: EGL 1
DMABufEnabled 1 media_ffmpeg_vaapi_enabled 1 CanUseHardwareVideoDecoding 1
!XRE_IsRDDProcess 1
...
[RDD 20039: Main Thread]: D/PlatformDecoderModule PDMInitializer, Init PDMs in RDD
process
[RDD 20039: Main Thread]: D/Dmabuf nsDMABufDevice::Configure()
[RDD 20039: Main Thread]: D/Dmabuf Loading DMABuf system library libgbm.so.1 ...
...
[RDD 20039: Main Thread]: D/Dmabuf DMABuf is enabled, using drm node /dev/dri/renderD128
[RDD 20039: Main Thread]: D/Dmabuf nsDMABufDevice::IsDMABufVAAPIEnabled: EGL 1
DMABufEnabled 1 media_ffmpeg_vaapi_enabled 1 CanUseHardwareVideoDecoding 1
!XRE_IsRDDProcess 0
[RDD 20039: Main Thread]: D/PlatformDecoderModule VA-API FFmpeg is disabled by platform
...
[Child 19933: MediaPDecoder #2]: D/Dmabuf nsDMABufDevice::IsDMABufVAAPIEnabled: EGL 1
DMABufEnabled 1 media_ffmpeg_vaapi_enabled 1 CanUseHardwareVideoDecoding 1
!XRE_IsRDDProcess 1
[Child 19933: MediaPDecoder #2]: D/Dmabuf nsDMABufDevice::IsDMABufVideoEnabled: EGL 1
DMABufEnabled 1 !media_ffmpeg_dmabuf_textures_disabled 1 !XRE_IsRDDProcess() 1
[Child 19933: MediaPDecoder #2]: D/PlatformDecoderModule Initialising VA-API FFmpeg
decoder
libva info: VA-API version 1.13.0
[Child 19933: MediaPDecoder #2]: D/PlatformDecoderModule Initialising FFmpeg decoder.
[Child 19933: MediaPDecoder #2]: D/PlatformDecoderModule FFmpeg init successful.
[Child 19933: MediaPDecoder #2]: D/PlatformDecoderModule Choosing FFmpeg pixel format for
video decoding.
[Child 19933: MediaPDecoder #2]: D/PlatformDecoderModule Requesting pixel format
YUV420P.
[vp9 @ 0x7f8a48d85800] Format yuv420p chosen by get_format().
[Child 19933: MediaPDecoder #1]: D/PlatformDecoderModule AudioTrimmer[7f8a37ab3e80]
::PrepareTrimmers: sample[0,21000] no trimming information
[RDD 20039: MediaPDecoder #1]: D/PlatformDecoderModule OpusDataDecoder[7fb627975080]
::Decode: Opus decoder skipping 312 of 960 frames
[Child 19933: MediaPDecoder #3]: D/PlatformDecoderModule AudioTrimmer[7f8a37ab3e80]
::HandleDecodedResult: sample[0,21000] (decoded[0,13500] no trimming needed
[Child 19933: MediaPDecoder #2]: D/PlatformDecoderModule DMABuf Got one frame output with
pts=0dts=0 duration=33000 opaque=-9223372036854775808
...
ymmv