Research-0126: vmaf-tune HDR dispatch coverage¶
- Status: Active
- Workstream: ADR-0300
- Last updated: 2026-05-15
Question¶
vmaftune.hdr.hdr_codec_args() was the central encode-side HDR contract, but it only dispatched libx264, libx265, libsvtav1, hevc_nvenc, and libvvenc. The codec registry now contains more HDR-capable encoder rows: AV1 NVENC, HEVC/AV1 QSV, HEVC/AV1 AMF, HEVC VideoToolbox, and software AV1 via libaom. The open question was whether to leave those rows unflagged until HDR model training lands, or widen encode-side signaling now.
Sources¶
- ADR-0300 defines the single dispatch-table contract and explicitly separates encode-side HDR correctness from the missing HDR VMAF model.
- Research-0072 records the original HDR flag families: global
-color_*, x265 private params, SVT-AV1 params, and HEVC NVENC 10-bit output. - Research-0087 inventories the adapter registry shape that
hdr_codec_args()needs to cover.
Findings¶
Leaving the newer adapters out of hdr_codec_args() made the auto planner and corpus path record hdr_* provenance while emitting an empty hdr_args tuple for valid HDR-capable hardware codecs. That is an encode-side correctness gap independent of CHUG or Netflix's future HDR model release.
The least risky widening is:
- use codec-private HDR SEI flags only where the fork already has a stable mapping (
libx265,libsvtav1,hevc_nvenc); - force 10-bit output for hardware HEVC (
p010le+main10); - force 10-bit 4:2:0 output for hardware AV1 (
p010le); - carry FFmpeg-global
-color_*tags for software AV1 and VVenC, where the in-tree evidence does not pin a stable private SEI option family.
Alternatives explored¶
| Option | Verdict | Reason |
|---|---|---|
| Keep the narrow table until CHUG training completes | Rejected | CHUG blocks model training, not encode-side color signaling. Empty HDR args for hardware HDR rows are avoidable now. |
| Move HDR argv into each codec adapter | Rejected | ADR-0300 deliberately made hdr_codec_args() the single auditable contract; scattering the logic would reintroduce per-adapter drift. |
| Guess private SEI flags for every hardware backend | Rejected | Some FFmpeg wrappers expose different or unstable private option names. Global color tags plus 10-bit output are the safe floor. |
Open questions¶
- Add backend-specific mastering-display / MaxCLL private flags for QSV, AMF, VideoToolbox, and AV1 NVENC only after a real FFmpeg build matrix verifies those option names.
- HDR VMAF scoring remains blocked until either Netflix releases a licensed model artifact or the CHUG pipeline produces a fork-owned HDR MOS head suitable for a separate model PR.