Skip to content

Instantly share code, notes, and snippets.

@schickling
Last active January 6, 2026 10:57
Show Gist options
  • Select an option

  • Save schickling/089f4faf412b5267508f758408f0645f to your computer and use it in GitHub Desktop.

Select an option

Save schickling/089f4faf412b5267508f758408f0645f to your computer and use it in GitHub Desktop.
Raspberry Pi 5 + Chromium hardware video decode question

Raspberry Pi 5 + Chromium Hardware Decode: Is This Possible?

Problem Summary

I’m investigating hardware-accelerated video decode on Raspberry Pi 5 using Chromium (Wayland). The goal is smooth playback (no frame drops) and a Chromium-based UI. So far, Chromium appears to run software-only for video decode/compositing on Pi 5, despite extensive flag and VA-API attempts.

Environment

  • Hardware: Raspberry Pi 5 (BCM2712)
  • OS/Display: Wayland (Sway/Wlroots)
  • Browser: Chromium (aarch64)
  • GPU: V3D
  • Decoder API: V4L2 stateless (rpivid)

What We Know (Current Findings)

  • Pi 5 appears to expose HEVC-only hardware decode via V4L2 stateless (rpivid). H.264 hardware decode is not available.
  • Chromium’s chrome://gpu shows Video Decode: Software only.
  • CDP Media diagnostics report FFmpegVideoDecoder (software decode).
  • video.canPlayType('video/mp4; codecs="hvc1"') and MediaSource.isTypeSupported(...) return not supported for HEVC in current Chromium build.

Attempts So Far

  • Enabled Chromium features/flags:
    • VaapiVideoDecoder, VaapiIgnoreDriverChecks, V4L2VideoDecoder, V4L2StatelessVideoDecoder, VaapiVideoDecodeLinuxGL, UseMultiPlaneFormatForHardwareVideo, Vulkan, DefaultANGLEVulkan, PlatformHEVCDecoderSupport, etc.
  • Forced VA-API V4L2 backend via LIBVA_DRIVER_NAME=v4l2 and LIBVA_DRIVERS_PATH=....
  • Tested libva-v4l2 (mxsrc fork): loads but reports no profiles/entrypoints on Pi 5.
  • Attempted to build libva-v4l2-request (bootlin) but it fails against modern kernel headers.

Hypothesis

Pi 5 hardware decode is HEVC-only, but Chromium on Linux does not accept HEVC without a custom build (proprietary codecs + platform decoder enabled). If Chromium can’t be built to accept HEVC on aarch64, then hardware decode may be unavailable in Chromium on Pi 5.

What I’m Looking For

  • Has anyone successfully enabled HEVC playback in Chromium on Raspberry Pi 5?
  • Are there known patches or build flags to enable HEVC/platform decoding on aarch64 Chromium?
  • Any references to Chromium builds with V4L2 stateless HEVC decode working on Pi 5?

Potential Solutions / Workarounds (in priority order)

  1. Custom Chromium build with proprietary codecs + HEVC enabled (and platform decoder wired in). If canPlayType flips and CDP Media shows a platform decoder, this is likely the best path.
  2. Alternate Chromium builds (e.g., downstream patches) that explicitly enable V4L2/HEVC.
  3. Pipeline split (still Chromium UI): keep Chromium for UI but offload video playback to a native player only if Chromium cannot do HEVC (last resort).

Related Links / Issues

Minimal Checks

  • chrome://gpu shows Video Decode: Hardware accelerated.
  • chrome://media-internals shows a hardware/platform decoder (not FFmpeg).
  • MediaSource.isTypeSupported('video/mp4; codecs="hvc1.1.6.L93.B0"') returns true.

Additional Details / Observations

  • Pi 5 decode block: Pi 5 removed the legacy H.264 decoder block; hardware decode appears to be HEVC‑only (rpivid / V4L2 stateless). If Chromium can’t accept HEVC, hardware decode is effectively unavailable.
  • VA-API backend status: libva-v4l2 loads but reports no profiles/entrypoints on Pi 5. This suggests the V4L2 -> VA-API shim may not expose HEVC yet (or needs specific device paths/patches).
  • V4L2 device signals: /dev/video19 reports S265 (HEVC parsed slices). rpivid_hevc kernel module is loaded; no H.264 module appears.
  • Chromium diagnostics: chrome://gpu consistently reports “Video Decode: Software only” even with VaapiIgnoreDriverChecks and V4L2StatelessVideoDecoder enabled. CDP Media uses FFmpegVideoDecoder.
  • HEVC support in Chromium: video.canPlayType and MediaSource.isTypeSupported return empty for HEVC in current builds, implying missing proprietary codecs/platform decode wiring.
  • If HEVC can be enabled: We’d expect canPlayType to flip to probably/maybe, chrome://media-internals to show a platform decoder, and chrome://gpu to report hardware decode.

If you’ve seen this working (or know why it can’t), please share links/patches/build flags.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment