2023 Update: Firefox & Hardware Video Decoding on Wayland
December 3, 2023
linux flatpak firefox ffmpegThings have gotten a bit hairy with the H.264 codecs as of late. They’ve been removed from most distro’s Mesa implementation which has caused a headache for AMD users (such as myself) since AMD offloads video decoding to Mesa.
Thankfully you can still get hardware video decoding using Flathub’s Firefox Flatpak, ffmpeg and OpenH.264. I’ve deciding to document the process here since this whole thing was kind of a headache to figure out.
First you’ll need to install the following packages:
org.freedesktop.Platform.ffmpeg-full
org.freedesktop.Platform.openh264
The versions of these are a bit unclear, but you could look at the manifest for your Firefox install (.local/share/flatpak/app/org.mozilla.firefox/current/active/metadata
or /var/lib/flatpak/app/org.mozilla.firefox/current/active/metadata
depending on whether it’s a system or user install) to figure out what package versions you need.
As usual you’ll need to enable VA-API in Firefox’s about:config
:
media.ffmpeg.vaapi.enabled=true
And things should just work smoothly. I recommend also grabbing enhanced-h264ify to control which codecs websites can show you.
If you want to see the codecs your machine is capable of decoding you can install and run org.freedesktop.Platform.VaInfo
:
Trying display: wayland
libva info: VA-API version 1.19.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/intel-vaapi-driver/radeonsi_drv_video.so
libva info: Trying to open /usr/lib/x86_64-linux-gnu/GL/lib/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_19
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.19 (libva 2.20.0)
vainfo: Driver version: Mesa Gallium driver 23.2.1 for AMD Radeon Vega 8 Graphics (raven, LLVM 16.0.6, DRM 3.54, 6.6.2-201.fc39.x86_64)
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
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAEntrypointVLD
means it’s capable of decoding that codec-type. Use this to gauge how to configure enhanced-h264ify
.
Good luck and enjoy!
Sources: