Table of Contents

Important security settings

HW video decoding using VAAPI

Update 2022-02-05

As of now it seems that it is working with RDD enabled (tested with Firefox 96.0.3)

Only these two options need to be set on my AMD machine to enable it.

gfx.x11-egl.force-enabled	true
media.ffmpeg.vaapi.enabled	true

If needed disable av1/av01 codec if there is no HW decode support (YouTube may use this with 1080p otherwise) This can of course affect media at other sites. Note that av1/av01 is NOT the same as avc1 AV1 Beta playlist

media.av1.enabled = false

vainfo from AMD Ryzen 7 5700G with Radeon Graphics

vainfo: VA-API version: 1.10 (libva 2.10.0)
vainfo: Driver version: Mesa Gallium driver 20.3.5 for AMD RENOIR (DRM 3.40.0, 5.10.0-11-amd64, LLVM 11.0.1)
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

To check if HW decoding is active

On newer AMD

while true; do cat /sys/kernel/debug/dri/0/amdgpu_pm_info | grep ^VCN; sleep 1; done

On Intel - check for Video engine activity

intel_gpu_top

Old information

https://bugzilla.mozilla.org/show_bug.cgi?id=1683808 https://bugzilla.mozilla.org/show_bug.cgi?id=1610199

MOZ_X11_EGL=1 firefox # Not needed anymore as there is option gfx.x11-egl.force-enabled
gfx.x11-egl.force-enabled = true
media.ffmpeg.vaapi.enabled = true
media.ffvpx.enabled = false
gfx.webrender.enabled = true

Possibly disable use of av1/av01 (YouTube uses this with 1080p otherwise)
media.av1.enabled = false

There are now also new settings for separate rendering process (RDD)
Have not fully understood yet what needs to be set.

MOZ_X11_EGL=1 MOZ_LOG="PlatformDecoderModule:5" firefox 2>&1 | grep 'VA-API'

To get better log why VAAPI is disabled run Firefox with:
MOZ_LOG="Dmabuf:5, PlatformDecoderModule:5"

Checking if HW decoder is active

AMD

Check if “uvd” is enabled. UVD stands for Unified Video Decoder

watch -n '0.1' cat '/sys/kernel/debug/dri/0/radeon_pm_info'
or
watch -n '0.1' cat '/sys/kernel/debug/dri/0/amdgpu_pm_info'

Known problems

Nextcloud talk

When a screen is shared from remote end only a black screen is shown.

Log output from:

MOZ_X11_EGL=1 MOZ_LOG="PlatformDecoderModule:5" firefox
[Child 145: Unnamed thread 0x7f899b1e8940]: D/PlatformDecoderModule Sandbox decoder rejects requested type
[Child 145: MediaPDecoder #1]: D/PlatformDecoderModule Initialising VA-API FFmpeg decoder
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/r600_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x3231564e -> nv12.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x30313050 -> p010le.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x36313050 -> unknown.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x32315659 -> yuv420p.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x56595559 -> unknown.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x59565955 -> uyvy422.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x41524742 -> bgra.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x41424752 -> rgba.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x58524742 -> bgr0.
[AVHWDeviceContext @ 0x7f899adbf440] Format 0x58424752 -> rgb0.
[AVHWDeviceContext @ 0x7f899adbf440] VAAPI driver: Mesa Gallium driver 18.3.6 for AMD KAVERI (DRM 2.50.0, 4.19.0-12-amd64, LLVM 7.0.1).
[AVHWDeviceContext @ 0x7f899adbf440] Driver not found in known nonstandard list, using standard behaviour.
[Child 145: MediaPDecoder #1]: D/PlatformDecoderModule VA-API FFmpeg init successful
[Child 145: MediaPDecoder #1]: D/PlatformDecoderModule Choosing FFmpeg pixel format for VA-API video decoding.
[Child 145: MediaPDecoder #1]: D/PlatformDecoderModule Requesting pixel format VAAPI_VLD
[vp8 @ 0x7f899a96c800] Format vaapi_vld chosen by get_format().
[vp8 @ 0x7f899a96c800] Format vaapi_vld requires hwaccel initialisation.
[vp8 @ 0x7f899a96c800] No support for codec vp8 profile -99.
[vp8 @ 0x7f899a96c800] Failed setup for format vaapi_vld: hwaccel initialisation returned error.
[vp8 @ 0x7f899a96c800] Format vaapi_vld not usable, retrying get_format() without it.
[Child 145: MediaPDecoder #1]: D/PlatformDecoderModule Choosing FFmpeg pixel format for VA-API video decoding.
[Child 145: MediaPDecoder #1]: D/PlatformDecoderModule avcodec_send_packet error: -22
[Child 145: Unnamed thread 0x7f899b1e8940]: D/PlatformDecoderModule Sandbox decoder rejects requested type
[Child 145: MediaPDecoder #1]: D/PlatformDecoderModule Initialising VA-API FFmpeg decoder
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/r600_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x3231564e -> nv12.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x30313050 -> p010le.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x36313050 -> unknown.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x32315659 -> yuv420p.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x56595559 -> unknown.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x59565955 -> uyvy422.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x41524742 -> bgra.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x41424752 -> rgba.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x58524742 -> bgr0.
[AVHWDeviceContext @ 0x7f8999cc3ec0] Format 0x58424752 -> rgb0.
[AVHWDeviceContext @ 0x7f8999cc3ec0] VAAPI driver: Mesa Gallium driver 18.3.6 for AMD KAVERI (DRM 2.50.0, 4.19.0-12-amd64, LLVM 7.0.1).
[AVHWDeviceContext @ 0x7f8999cc3ec0] Driver not found in known nonstandard list, using standard behaviour.
[Child 145: MediaPDecoder #1]: D/PlatformDecoderModule VA-API FFmpeg init successful
[Child 145: MediaPDecoder #3]: D/PlatformDecoderModule Choosing FFmpeg pixel format for VA-API video decoding.
[Child 145: MediaPDecoder #3]: D/PlatformDecoderModule Requesting pixel format VAAPI_VLD
[vp8 @ 0x7f8999df7000] Format vaapi_vld chosen by get_format().
[vp8 @ 0x7f8999df7000] Format vaapi_vld requires hwaccel initialisation.
[vp8 @ 0x7f8999df7000] No support for codec vp8 profile -99.

[etc]...

Tested workaround (as in turning off acceleration)

media.ffvpx.enabled = true

Using Telavox web based SIP phone with FF

Need to spoof the user-agent to include "Chrome"

Install User-Agent switcher

Then add this to the “Custom Mode” configuration

{
  "app.telavox.com": "${userAgent} Chrome"
}

Now you also need to manually enable accepting calls

This is due to microphone permisssion not queryable

First make sure that you have allowed persistent access to microphone.
Then add the value registerSoftphone:“true” to the “Local Storage” for https://app.telavox.com

If you then go to “Settings | Phone and audio” you should see that “Receive incoming calls” is now enabled.