mesa-panvk-bifrost-video: sibling package adding VK_KHR_video_decode_h264
panvk-bifrost-video campaign close. Phase 4 byte-exact validated 2026-05-21 on RK3566/PineTab2 (Mali-G52 r1 MC1 + hantro VPU): 48/48 unique BBB display frames decoded by this driver are byte-identical to ffmpeg+libva-v4l2-request-fourier on the same hantro hardware (frame 42 Y md5 = 54b9b396e6cd377256eb4bce0efc0bed both ways). Phase 5 second-model review passed; load-bearing findings applied. Co-installs at /usr/lib/panvk-bifrost-video/ parallel to the r4 sibling at /usr/lib/panvk-bifrost/; opt-in via VK_ICD_FILENAMES. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# mesa-panvk-bifrost-video
|
||||
|
||||
Patched Mesa `libvulkan_panfrost.so` that **adds `VK_KHR_video_decode_h264`** on Mali Bifrost SBCs (PAN_ARCH 6/7, RK3566/RK3568 class hardware), backed by the SoC's V4L2-stateless **hantro** VPU.
|
||||
|
||||
This is a **sibling** of [mesa-panvk-bifrost](../mesa-panvk-bifrost/) (the r4 package that exposes Bifrost to Chromium's Vulkan compositor). Pick this one when the consumer wants Vulkan **video decode** in addition; pick r4 for compositor-only.
|
||||
|
||||
## Status
|
||||
|
||||
Phase 4 byte-exact validated 2026-05-21: 48/48 unique BBB display frames decoded by this package are byte-identical to `ffmpeg+libva-v4l2-request-fourier` running on the same hantro hardware. Phase 5 second-model review completed; all load-bearing findings addressed.
|
||||
|
||||
## How to use
|
||||
|
||||
```sh
|
||||
# Co-installs alongside r4 and stock mesa.
|
||||
sudo pacman -S mesa-panvk-bifrost-video
|
||||
|
||||
# Opt in (not on the default loader search path).
|
||||
export VK_ICD_FILENAMES=/usr/lib/panvk-bifrost-video/icd.json
|
||||
export PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1 # mesa-upstream gate
|
||||
|
||||
# Run a Vulkan video consumer.
|
||||
vulkan-video-dec-simple-test -i your.h264 --codec h264 --noPresent --maxFrameCount 50
|
||||
# or
|
||||
ffmpeg -hwaccel vulkan -i your.mp4 ...
|
||||
```
|
||||
|
||||
## Phase 1 limitations
|
||||
|
||||
Documented in source comments and worth knowing before relying on this in production:
|
||||
|
||||
- **Single video session per device.** Concurrent `VkVideoSessionKHR` on the same device clobber each other (`active_video` singleton). Sufficient for current single-stream consumers.
|
||||
- **Synchronous decode at record time.** The full V4L2 ioctl dance runs to completion inside `vkCmdDecodeVideoKHR`. No pipelining. Throughput is bounded by hantro's ~1.16× realtime on 1080p H.264.
|
||||
- **Hardcoded `/dev/video1` + `/dev/media0`.** Matches RK3566/68 but won't work on other SoCs without a topology-walk port (see `libva-v4l2-request-fourier` for the full version).
|
||||
- **Bitstream source buffer assumed HOST_VISIBLE.** True on panvk-bifrost (no DEVICE_LOCAL-only memory types exist), but the code silently skips decode if the app bound the buffer to non-host-visible memory.
|
||||
|
||||
## Co-existence
|
||||
|
||||
- Installs to `/usr/lib/panvk-bifrost-video/` — parallel to r4's `/usr/lib/panvk-bifrost/` and stock `/usr/lib/`.
|
||||
- Opt-in via `VK_ICD_FILENAMES`; does NOT register itself in `/usr/share/vulkan/icd.d/`.
|
||||
- Three drivers coexist without conflict; the user picks at runtime which to use.
|
||||
Reference in New Issue
Block a user