Media compatibility
Support tiers, the format matrix, gaps and how the harness is run.
As writtenPublished unedited from the NOVA repository. Links to other repository files open on GitHub.
Engine audited and tested: mpv v0.41.0-1175-g492bae076 / FFmpeg N-127552-gee8cbd7db (the pinned dev build, ADR 0003). Test machine: Windows 11, i5-10300H, Intel UHD 630 + GTX 1650.
Evidence:
engine-audit.tsv: 523 decoders and 375 demuxers compiled into libmpv.results-no.md: software-decoding pass.results-auto_copy.md: hardware-decoding pass.
Both result files are generated by crates/nova-playback-mpv/tests/compat.rs from the corpus built by scripts/generate-compat-corpus.sh. Both passes: 55 / 55 samples met their expectation.
Categories (policy: ADR 0006)
| Category | Meaning |
|---|---|
| Verified | A sample of this codec/container/profile played on the real engine in the harness. Checks: playback starts; codec, size, bit depth, chroma, alpha/HDR detected; exact seek within 100 ms; position advances in real time; no decoder drops. Samples are synthetic FFmpeg encodes of the profile, not files from a camera. |
| Expected | The engine contains the decoder and demuxer, but no representative sample has been tested yet. |
| Partial | Plays, with a documented limitation. |
| Requires External Component | Needs a vendor SDK or other component that NOVA does not ship. NOVA detects the format and explains the alternatives. |
| Unsupported | Will not play, by design or for legal reasons. NOVA detects these where possible and explains why. |
Matrix
Verified (synthetic profile samples; software and hardware passes)
| Area | Formats |
|---|---|
| Delivery codecs | H.264 High (MP4, 3GP, M2TS/AVCHD-style, MKV); HEVC Main/Main10 (MP4, MOV); AV1 10-bit (MKV); VP8, VP9 (WebM); MPEG-2 (VOB, MPEG-TS); MPEG-4 Part 2 ASP (AVI); Theora (OGV) |
| Camera acquisition profiles | H.264 High 4:2:2 Intra 10-bit in MXF (XAVC-I / XF-AVC Intra profile); AVC-Intra 100 class in MXF; MPEG-2 4:2:2 50 Mb/s in MXF (XDCAM HD422 profile); HEVC 4:2:2 10-bit (XAVC HS-style); DV PAL; Motion JPEG |
| Editing intermediates | ProRes 422 HQ, ProRes 4444 with alpha; DNxHR HQX 10-bit (MXF OP1a); DNxHD 36 (MOV); CineForm; HAP |
| Lossless / uncompressed | FFV1 10-bit; HuffYUV; Ut Video; v210 (10-bit 4:2:2); QuickTime Animation with alpha |
| High-end | 4K60 HEVC Main10; 8K24 HEVC; 4K ProRes 422 HQ (~1 Gb/s); 1080p120; variable frame rate; HDR10 (PQ/BT.2020 detected); HLG detected |
| Audio | PCM 24-bit 5.1 WAV; FLAC 7.1; ALAC; AC-3 5.1; E-AC-3 5.1; DTS core 5.1; Dolby TrueHD 5.1; Opus; MP3; AAC; Vorbis |
| Robustness | Unknown video codec (audio keeps playing, banner shown); truncated MOV and mid-stream corruption (no hang); zero-byte and random files (clear error); misleading extension (Matroska named .mp4 plays) |
Hardware decoding (d3d11va / nvdec) was used for: H.264 8-bit 4:2:0, HEVC 8/10-bit 4:2:0 including HDR, 4K60 and 8K, VP9 and VP8. These fell back to software automatically and correctly: HEVC 4:2:2, H.264 4:2:2 Intra, AV1 (neither GPU decodes them in hardware), ProRes, DNx, CineForm, MPEG-2, and the lossless codecs.
Partial
| Format | Limitation | Evidence |
|---|---|---|
| VP9 with alpha | Plays, but the engine’s native VP9 decoder drops the alpha plane (output yuv420p) | harness |
| Alpha video in general (ProRes 4444, QT Animation) | Alpha is decoded and reported, but displayed over black (no checkerboard or compositing) | harness detects alpha; display not verified |
| 8K HEVC in software | Plays; about 1.27 GB private memory. Real-time speed not measured: the 2 s sample is too short | harness |
| HDR10 / HLG | Metadata detected. Tone mapping to SDR (gpu-next) and HDR output on an HDR display not yet verified visually | harness |
| Still images (DPX 10-bit, OpenEXR float) | Single frames display. Image sequences are not supported yet | harness |
| A/V sync | Measured only in the live app for H.264, HEVC and VP9 (≤ 47 µs steady). The harness is headless with null audio | m0-results.md |
Expected (decoder present in the audit, no sample tested)
-
ProRes RAW (
prores_rawdecoder present; no open encoder exists to make samples). -
Real camera files:
- Sony XAVC-S, XAVC-I, XAVC-HS
- Canon XF-AVC, XF-HEVC
- Panasonic AVC-Intra, AVC-Ultra, AVCHD
- GoPro and DJI HEVC/H.264
- iPhone ProRes and HEVC
Their codec profiles are Verified above. Container quirks, metadata and timecode tracks of real files are not tested yet.
-
Other codecs and media:
- Codecs: VVC/H.266, VC-1/WMV, JPEG 2000 (unencrypted)
- Audio: DTS-HD MA and TrueHD Atmos (core and lossless decode; object rendering not available)
- Other: Dolby Vision profiles 5/8 (handled by libplacebo in mpv; no sample), GXF, interlaced broadcast material (deinterlacing not yet configured)
Requires External Component (detected, not decoded)
| Format | Needs | NOVA today |
|---|---|---|
| RED R3D (REDCODE RAW) | RED R3D SDK | FFmpeg has an r3d demuxer but no REDCODE decoder. NOVA tries the engine and shows SDK/export guidance if it cannot decode |
Blackmagic RAW (.braw) | Blackmagic RAW SDK | Detected; guidance shown (stand-in tested) |
ARRIRAW (.ari, .arx) | ARRI SDK | Detected; guidance shown |
Canon Cinema RAW Light (.crm) | Canon RAW SDK | Detected; guidance shown |
| Sony X-OCN / Sony RAW (in MXF) | Sony SDK | Not detectable by extension (it is MXF). Reported as “video codec not decodable” with export guidance |
No RAW claim is made beyond detection: no real RAW file has been tested.
Unsupported (by design or law)
- Editing projects are not media and are detected and explained (tested):
.prproj,.aep,.drp,.fcpxml,.veg,.kdenlive,.mlt,.otio,.aaf,.avp,.edl. - DRM-protected media (FairPlay, Widevine downloads, encrypted DCPs, AACS/CSS discs) is out of scope.
- CinemaDNG sequences are planned (see below), not supported today.
Gap analysis (current build)
| # | Gap | Impact | Plan |
|---|---|---|---|
| 1 | No real camera files in the corpus | Camera brands stay “Expected” | P0: private corpus outside git (license-checked downloads or owner-provided footage) with checksums; the harness reads an external manifest |
| 2 | Image sequences (DPX/EXR/TIFF/DNG) | VFX, scanning and CinemaDNG workflows | P1: open a folder or numbered sequence, choose fps, play through the engine’s image demuxer |
| 3 | VP9 alpha dropped; alpha shown over black | Motion-graphics review | P1: prefer the libvpx-vp9 decoder for alpha streams; optional checkerboard background |
| 4 | Embedded timecode, reel names, camera metadata | Editors expect timecode in the inspector | P1: read container timecode tags and tmcd tracks |
| 5 | HDR display path not verified | Wrong-looking HDR on some displays | P1: visual checks on SDR and HDR displays; expose tone-mapping settings |
| 6 | 8K software memory (~1.27 GB) and real-time not measured | Large-file stability | P1: longer 8K/high-bitrate samples, cache and thread tuning, two-hour soak |
| 7 | No live A/V-sync harness for pro formats | Sync claims limited to three codecs | P1: offscreen-window harness with real audio output |
| 8 | Library scan has no codec/duration metadata | Library can’t filter by codec, or warn ahead about RAW | P2: lightweight probe during scans |
| 9 | Camera RAW decoding | RED/BRAW/ARRI/Canon/Sony RAW | P2: optional, separately installed adapters behind the playback contract, only after SDK license review (ADR 0006) |
| 10 | Licensing of the engine build | Release blocker | ADR 0003, option B: an LGPL FFmpeg/mpv build. The audit shows every professional decoder above is native FFmpeg (LGPL); only the x264/x265 encoders, which a player doesn’t need, force GPL today |
Running the harness
bash scripts/generate-compat-corpus.sh # ~75 s, ~650 MB (add --quick to skip 8K/4K ProRes)
cargo test -p nova-playback-mpv --release --test compat -- --ignored --nocapture
NOVA_COMPAT_HWDEC=auto-copy cargo test -p nova-playback-mpv --release --test compat -- --ignored --nocapture
NOVA_COMPAT_ONLY=prores cargo test ... # subset
cargo run -p nova-playback-mpv --example probe_file -- <file> # inspect any file
cargo run -p nova-playback-mpv --example engine_audit > docs/compat/engine-audit.tsv