v0.5.0
BC-250 Driver v0.5.0: Complete VA-API Encode/Decode, Multi-Slice, Tiles, WPP & WiVRn VR Suite (Hotfix Update)
The v0.5.0 release represents a comprehensive overhaul of video acceleration for the AMD BC-250 (Cyan Skillfish) APU on Linux. It brings 100% bit-exact hardware-conforming video decoding (VAEntrypointVLD), multi-slice HEVC encoding at 111+ FPS (3x speedup), WiVRn wireless VR streaming optimization with multi-core concurrency, 10-bit HEVC Main 10 decoding and encoding, hardware scaling/cropping (VAEntrypointVideoProc), and native Linux distribution packaging.
🌟 Key Highlights & Improvements
1. Rate Control Alignment & Intelligent Constant Quality (ICQ) Fix
- Intelligent Constant Quality (
VA_RC_ICQ): When FFmpeg or GStreamer encodes without an explicit bitrate target (-b:v), standard encoders selectVA_RC_ICQ. The driver now supportsVA_RC_ICQ, computing normative bitrate targets (~4.0 Mbps H.264 / ~2.2 Mbps HEVC at 1080p, matching Intel iGPU bitrate and file size) while maintaining dynamic per-frame rate control. - CQP Fallback & Compatibility: Restored
VA_RC_CQPadvertisement alongsideVA_RC_CBR,VA_RC_VBR, andVA_RC_ICQ, resolving FFmpeg-22(EINVAL: "Driver does not support any RC mode compatible with selected options") errors on unconstrained commands. - Dynamic Rate Control & Base QP Restoration:
- Guarded
pic_init_qp = 26inVAEncPictureParameterBufferfrom overwriting the rate controller's bitrate-derivedbase_qpduring CBR/VBR encoding, allowing dynamic QP selection across the entire 12..51 range to match requested target bitrates. - Implemented HEVC CBR filler NAL support (
maybe_append_filler_hevc), enabling exact target bitrate conformance in CBR mode and feeding accurate bit accounting to the leaky-bucket model. - Lowered CU skip threshold from overly aggressive 1024 down to 48..96 based on quality presets, eliminating texture smearing and preserving fine grain and high-frequency motion.
- Tightened rate-control integral window from 150 frames to 30 frames for fast 1-second bitrate convergence.
- Guarded
2. HEVC Encoder Quality Reconstruction & Main 10 Encoding (PR #44, PR #45)
- Planar Prediction Bottom-Left Sample Fix (PR #44): Fixed a reconstruction drift where Planar prediction incorrectly mirrored
left[3]instead of reading the true reconstructed sample below the left column (p[-1][4]). Eliminates encoder/decoder divergence and delivers a massive +12 to +21 dB PSNR boost (1080p QP 30: 24.4 dB -> 45.4 dB; 1080p 8 Mbps: 22.3 dB -> 34.3 dB). - HEVC Main 10 Encoding (
VAProfileHEVCMain10) (PR #45): Full 10-bit HEVC encoding from P010 surfaces with Qp' = QP + 12 scaling, proper transform shifts, and surface boundary clamping.
3. Full Bit-Exact VA-API Video Decoding (VAEntrypointVLD)
- Direct VA-API Reference Picture Lists & MPV / FFmpeg Playback Fix:
- In standard MP4/MKV containers, sequence reference tables are stored in container atoms (
hvcC) rather than inside slice headers. The driver now extracts pre-resolved Reference Picture Lists (L0/L1) directly fromVASliceParameterBufferHEVC.RefPicList[2][15], eliminating slice parsing desync. - Added container slice header scan fallback when
sps->num_st_rps == 0, recovering byte alignment and WPP entry points so multi-threaded wavefront parallel processing executes without single-threaded fallbacks. - Replaced per-frame UV interleaving buffer allocations with persistent allocations and SSE2 SIMD vectorization.
- Added DPB closest-POC concealment fallback to smoothly handle frame drops and player seeks.
- Completely fixes frozen/ghosted title cards, block displacement, and audio/video desync in
mpv --hwdec=vaapiand FFmpeg.
- In standard MP4/MKV containers, sequence reference tables are stored in container atoms (
- H.264 & HEVC/H.265 Decoding: Implemented complete
VAProfileH264*,VAProfileHEVCMain, andVAProfileHEVCMain10(10-bit on P010 surfaces) decoding entrypoints via threaded CPU wavefront execution. - Multi-Slice & Dependent Slice Segments (PR #29): Per-slice reference picture lists for temporal motion vector prediction. Resolves flickery and semi-garbled playback artifacts in multi-slice HEVC media (e.g. Big Buck Bunny, streaming captures).
- HEVC Tile Decoding (PR #27): Full support for arbitrary multi-tile layouts with independent tile decoding boundaries, verified across all 13 ITU tile test streams.
- Wavefront Parallel Processing / WPP (PR #31): Correct CABAC context state synchronization and quantization parameter prediction across CTU rows. All 12 ITU WPP conformance vectors pass bit-exact.
4. WiVRn & Game Streaming Optimization (Sunshine / Moonlight / WiVRn)
- WiVRn Auto-Detection & 4-Core Concurrency: Automatically allocates 4 CPU worker threads and 4 slices for
wivrn-server, slashing host VR encode latency from ~50ms to ~15ms. - Low-Latency HEVC Rate Control: Assigns a 2-frame low-latency buffer (
RC_LOW_LATENCY) for WiVRn HEVC streaming, eliminating 1-second VBR buffer latency swings. - Extended Max Dimensions (4096×4096): Raised maximum picture width and height to 4096 to natively support Meta Quest 3 (2064×2208/2240) and high-res VR headsets without clamping.
- High Bitrate Unlocked (
BC250_QP_MIN): Configurable minimum QP floor (1..51, default 12). SettingBC250_QP_MIN=8allows VR enthusiasts to push bitrates past 150 Mbps (up to 200–300+ Mbps). - SPS Frame-Cropping Window: Implemented normative H.264 SPS frame cropping. Resolves 1080p streams decoding as 1088p with bottom green line artifacts; restores frame PSNR from 13.7 dB to 44.3 dB.
5. Hardware Video Post-Processing (VAEntrypointVideoProc)
- Compute Scaling & Cropping: Hardware-accelerated surface scaling via compute shaders supporting both NV12 and P010 formats (PR #26).
6. Native Packaging & Multi-Arch Distribution
- Native Packages: Included packaging for Arch Linux / CachyOS (
PKGBUILD), Fedora / Bazzite (bc250-vaapi.spec), and Debian / Ubuntu (packaging/debian/). - Steam Link & 32-Bit Support: Automatic CI builds for both 64-bit (
x86_64) and companion 32-bit (i386) drivers (bc250-driver-linux-i386.tar.gz) for Steam Link and 32-bit Wine applications.
📦 Installation Quickstart
Pre-built Release Bundles:
tar -xzf bc250-driver-linux-x86_64.tar.gz
sudo ./install.shArch Linux / CachyOS:
./tools/install_cachyos_arch.shSteamOS / HoloISO:
sudo ./tools/setup_steamos.sh