Hardware video (VCN)
VCN works since ps5-linux-patches #38 (commit 8081cd8, 8 Oct 2026). The PS5 has VCN 2.0 (IP 2.0.3), driven by vcn_v2_0.
| What | Status |
|---|---|
| Decode H.264, HEVC Main/Main 10, VP9 Profile 0/2, VC-1 | ✅ Working, bit-exact with software decoding |
| Decode MPEG-2 | ✅ Working, very close but not bit-exact |
| Encode H.264 | ✅ Working |
| Encode HEVC, I-frames only | ✅ Working |
| Encode HEVC, normal GOP with P-frames | ❌ Broken: corrupt colours at every tested bitrate |
| Decode H.264 High 10, AV1, VP8, Theora, MPEG-4 Part 2 | ❌ Not supported by the hardware |
Tested sizes: H.264 up to 4096×2304, HEVC and VP9 up to 8192×4352. H.264 at 4096×4096 is advertised but fails.
How it works
The PS5 runs AMD's Navi 10 VCN firmware with a small patch. The stock firmware waits for an SMU handshake at boot that the PS5 never answers, so the patch skips it. The patched firmware ships in the patches repository as firmware/amdgpu/ps5_vcn.bin and is built into the kernel.
On 1002:13fb, the driver also:
- turns off VCN doorbells (the rings use direct register writes instead),
- resets the VCPU before starting and after a failed stop,
- clears stale ring state before starting.
Getting it
There is no prebuilt release with VCN yet; the newest release is still 7.1.7. Build the kernel yourself from ps5-linux-patches at 8081cd8 or newer, see Kernel setup.
The repository's .config sets:
CONFIG_EXTRA_FIRMWARE="amdgpu/ps5_vcn.bin"
CONFIG_EXTRA_FIRMWARE_DIR="../ps5-linux-patches/firmware"
That path is relative to the kernel source tree, so linux and ps5-linux-patches must be cloned side by side, exactly as in the build steps.
Check that it works
Install libva-utils (Arch) or vainfo (Debian/Ubuntu), then run:
vainfo
It should list H.264, HEVC, VP9, MPEG-2 and VC-1 decoding, plus H.264 and HEVC encoding. This was verified with Mesa 26.2.4 on kernel 7.2.4.
Using it with FFmpeg
Decode:
ffmpeg -hwaccel vaapi -i input.mkv -f null -
Transcode to H.264:
ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -i input.mkv -c:v h264_vaapi -b:v 12M output.mkv
HEVC encoding only produces a clean picture with I-frames only; with P-frames, the colours are corrupted. Force I-frame-only output with -g 1 -bf 0:
ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -i input.mkv -c:v hevc_vaapi -g 1 -bf 0 -b:v 25M output.mkv
I-frame-only encoding needs a much higher bitrate for the same quality. Use h264_vaapi when file size matters.
Browsers and streaming
Firefox uses VCN for video through VAAPI. Tested on Firefox 157 with Mesa 26.2.4: H.264 at 720p60, 1080p and 4K, HEVC and HEVC Main 10 at 1080p, and VP9 at 1080p all played without errors, with at most 2 dropped frames in 20-second clips. To see which codecs Firefox decodes in hardware, open about:support and look under Media.
Moonlight streaming from the PS5 works through Sunshine with H.264 VCN encoding, see Game streaming.
Results
In short: hardware decoding uses around 1% of a CPU core where software decoding uses up to 84% (HEVC Main 10 at 4K), and H.264 hardware transcoding runs at full speed at about 1–2.5% CPU.
CPU use is measured with 100% = one logical CPU, as FFmpeg's CPU use between seconds 2 and 9.5.
Decoding: CPU use
| Codec | Size | Software | VCN | VCN frame check |
|---|---|---|---|---|
| H.264 Baseline | 720p | 4.35% | 0.54% | 32 exact frames |
| H.264 Main | 1080p | 17.19% | 0.60% | 32 exact frames |
| H.264 High | 1080p | 17.66% | 0.67% | 32 exact frames |
| HEVC Main | 1080p | 29.77% | 0.54% | 32 exact frames |
| HEVC Main 10 | 1080p | 35.12% | 0.47% | 32 exact frames |
| VP9 Profile 0 | 1080p | 19.40% | 0.60% | 32 exact frames |
| VP9 Profile 2 | 1080p | 23.68% | 0.54% | 32 exact frames |
| MPEG-2 Main | 1080p | 7.76% | 0.74% | 57.09 dB, not exact |
| VC-1 Advanced | 720p | 19.67% | 0.87% | 32 exact frames |
| H.264 High | 4K | 66.89% | 1.74% | 32 exact frames |
| HEVC Main 10 | 4K | 83.48% | 1.07% | 12 exact frames |
| VP9 Profile 0 | 4K | 75.12% | 1.14% | 12 exact frames |
| H.264 High 10 | 1080p | 21.47% | n/a | Unsupported |
| AV1 Main | 1080p | 16.99% | n/a | Unsupported |
| Theora | 1080p | 8.96% | n/a | Unsupported |
| VP8 | 1080p | 14.18% | n/a | Unsupported |
| MPEG-4 Part 2 Simple | 1080p | 8.03% | n/a | Unsupported |
Decoding: frames per second
| Codec | Size | Software | VCN |
|---|---|---|---|
| H.264 Baseline | 720p | 29.7 | 29.4 |
| H.264 Main | 1080p | 29.7 | 29.4 |
| H.264 High | 1080p | 29.7 | 29.4 |
| HEVC Main | 1080p | 29.7 | 29.4 |
| HEVC Main 10 | 1080p | 29.7 | 29.4 |
| VP9 Profile 0 | 1080p | 29.6 | 29.4 |
| VP9 Profile 2 | 1080p | 29.4 | 29.4 |
| MPEG-2 Main | 1080p | 28.8 | 28.5 |
| VC-1 Advanced | 720p | 59.4 | 58.8 |
| H.264 High | 4K | 29.4 | 29.4 |
| HEVC Main 10 | 4K | 30.0 | 30.0 |
| VP9 Profile 0 | 4K | 29.7 | 29.7 |
| H.264 High 10 | 1080p | 29.4 | n/a |
| AV1 Main | 1080p | 30.9 | n/a |
| Theora | 1080p | 21.9 | n/a |
| VP8 | 1080p | 29.7 | n/a |
| MPEG-4 Part 2 Simple | 1080p | 29.7 | n/a |
Transcoding: CPU use
| Codec | Size | Target (Mbps) | Software | VCN | VCN output |
|---|---|---|---|---|---|
| H.264 Baseline | 1080p | 12 | 90.12% | 1.00% | Checked |
| H.264 Main | 1080p | 12 | 102.15% | 1.00% | Checked |
| H.264 High | 1080p | 12 | 103.02% | 1.00% | Checked |
| HEVC Main | 1080p | 12 | 292.23% | 0.94% | Corrupt colours |
| HEVC Main 10 | 1080p | 12 | 298.39% | 1.00% | Corrupt colours |
| H.264 | 1080p | 4 | 87.78% | 0.94% | Checked |
| HEVC | 1080p | 4 | 322.99% | 0.80% | Corrupt colours |
| H.264 | 1080p | 8 | 95.00% | 0.94% | Checked |
| HEVC | 1080p | 8 | 309.06% | 0.94% | Corrupt colours |
| H.264 | 1080p | 25 | 118.16% | 1.20% | Checked |
| HEVC | 1080p | 25 | 284.08% | 1.20% | Corrupt colours |
| H.264 | 4K | 25 | 315.14% | 2.27% | Checked |
| HEVC | 4K | 25 | 419.63% | 1.87% | Corrupt colours |
| H.264 | 4K | 50 | 356.79% | 2.41% | Checked |
| HEVC | 4K | 50 | 367.30% | 2.14% | Corrupt colours |
Transcoding: frames per second
| Codec | Size | Target (Mbps) | Software | VCN |
|---|---|---|---|---|
| H.264 Baseline | 1080p | 12 | 29.4 | 29.4 |
| H.264 Main | 1080p | 12 | 29.4 | 29.4 |
| H.264 High | 1080p | 12 | 29.4 | 29.4 |
| HEVC Main | 1080p | 12 | 18.4 | 29.4 |
| HEVC Main 10 | 1080p | 12 | 15.4 | 29.4 |
| H.264 | 1080p | 4 | 29.4 | 29.4 |
| HEVC | 1080p | 4 | 26.8 | 29.4 |
| H.264 | 1080p | 8 | 29.4 | 29.4 |
| HEVC | 1080p | 8 | 21.4 | 29.4 |
| H.264 | 1080p | 25 | 29.4 | 29.4 |
| HEVC | 1080p | 25 | 14.4 | 29.4 |
| H.264 | 4K | 25 | 29.4 | 29.4 |
| HEVC | 4K | 25 | 8.0 | 29.4 |
| H.264 | 4K | 50 | 29.4 | 29.4 |
| HEVC | 4K | 50 | 6.4 | 29.4 |
Encoding quality: PSNR (dB)
Higher is better. HEVC VCN results use a normal GOP with P-frames, which is why they are so low (corrupt colours).
| Codec | Size | Target (Mbps) | Software | VCN |
|---|---|---|---|---|
| H.264 Baseline | 1080p | 12 | 51.16 | 48.19 |
| H.264 Main | 1080p | 12 | 52.54 | 49.90 |
| H.264 High | 1080p | 12 | 52.20 | 49.90 |
| HEVC Main | 1080p | 12 | 51.76 | 15.46 |
| HEVC Main 10 | 1080p | 12 | 52.14 | 15.31 |
| H.264 | 1080p | 4 | 41.66 | 39.68 |
| HEVC | 1080p | 4 | 43.25 | 15.85 |
| H.264 | 1080p | 8 | 47.54 | 45.12 |
| HEVC | 1080p | 8 | 47.98 | 15.61 |
| H.264 | 1080p | 25 | 60.88 | 59.90 |
| HEVC | 1080p | 25 | 60.20 | 15.42 |
| H.264 | 4K | 25 | 45.72 | 42.68 |
| HEVC | 4K | 25 | 47.32 | 15.03 |
| H.264 | 4K | 50 | 53.24 | 51.30 |
| HEVC | 4K | 50 | 53.84 | 15.01 |
Output file bitrate (Mbps)
| Codec | Size | Target | Software | VCN |
|---|---|---|---|---|
| H.264 | 1080p | 4 | 4.08 | 4.01 |
| HEVC | 1080p | 4 | 4.10 | 4.10 |
| H.264 | 1080p | 8 | 8.17 | 8.00 |
| HEVC | 1080p | 8 | 8.20 | 7.96 |
| H.264 | 1080p | 25 | 24.81 | 24.86 |
| HEVC | 1080p | 25 | 25.62 | 24.90 |
| H.264 | 4K | 25 | 25.39 | 24.90 |
| HEVC | 4K | 25 | 25.59 | 25.05 |
| H.264 | 4K | 50 | 50.67 | 49.78 |
| HEVC | 4K | 50 | 51.24 | 49.81 |
How to read the results
| Term | Meaning |
|---|---|
| CPU scale | 100% = one logical CPU. FFmpeg CPU use between seconds 2 and 9.5. |
| FPS | Paced runs, including startup. Not maximum throughput. |
| HEVC VCN encoding | Normal GOP with P-frames. Corrupt colours at every tested bitrate; I-frame-only output is clean. |
| PSNR | Measured over the first 60 encoded frames. Higher means less pixel error. |
| File bitrate | Includes container overhead. |
| Repeats | Decoding and 12 Mbps tests: two runs. Other bitrates: one run. |
| Exact frames | Decoded pixels match software decoding exactly. |