Skip to content

hdrprobe v0.5.0

Choose a tag to compare

@github-actions github-actions released this 11 Jul 20:03
· 121 commits to main since this release
v0.5.0
f90d229

New

  • VP9 support. VP9 streams are now inspected across MKV/WebM, MP4 (vp09 sample entry plus the vpcC record), and IVF. Profile, bit depth, and chroma come from the WebM CodecPrivate feature list or the first keyframe's header, and container colour keeps authority since a bare VP9 stream names no transfer or primaries of its own. HDR10+ dynamic metadata carried in Matroska BlockAdditions (the registered ITU-T T.35 slot) is parsed and reported through the same gate as the AV1 T.35 route. IVF files are now routed by FourCC, so a VP9 IVF demuxes as VP9 (previously every IVF was read as AV1, reporting garbage for VP9 content) and VP8 gets an honest error instead.
  • ProRes support. ProRes tracks in MKV and MP4/MOV are now inspected: the profile from the MOV/MP4 sample-entry FourCC (Matroska carries no profile signal, so an MKV mux reports none, matching MediaInfo and ffprobe), chroma and bit depth from the frame header and profile family, and static HDR from the container's signalling. When a MOV carries no colr box at all (the common ffmpeg-written case), the frame header's own CICP colour fills the gap, so a PQ master still classifies HDR.
  • Unconverted RPU verdict. A new Unconverted RPU chip on the Dolby Vision Profile line (JSON: dolby_vision.unconverted_dual_layer_rpu) flags streams whose RPU still carries the dual-layer composer payload while the carriage has no enhancement layer: the signature of a transcode that injected a UHD Blu-ray Profile 7 RPU without converting it. The stray payload is inert for playback, but it misleads tools that guess a profile from the RPU, producing out-of-spec declarations like DV 10.6 on AV1. Reported as a provenance observation, not an error claim.

Fixed

  • Mastering gamut labels now match regardless of primary slot order. Some real muxers (notably the writer behind YouTube-sourced WebM) store Display P3 mastering primaries rotated across the R/G/B slots. The primaries are now canonicalized by chromaticity role before matching, so such files get their correct gamut tag, matching MediaInfo.
  • MKV mastering luminance renders in ST.2086 units. MKV MasteringMetadata luminance is usually stored as a 32-bit float, and the promotion to double rendered noise on the Mastering line (a stored 0.005 printed as 0.004999999888241291). Values are now rounded to the 0.0001 cd/m² unit ST.2086 defines, matching MediaInfo and the SEI path's output.
  • Colour range is recovered from the stream when the container omits it. iPhone HLG/DV MOVs write the QuickTime nclc colr form, which carries no range field; the limited/full verdict lives only in the SPS. When container colour resolves but leaves the range unset, just the range is filled from the codec-config parameter set, for both MP4 and MKV remuxes of such files. Also fixes an out-of-bounds read of the nclx range byte on a box truncated at end of file.
  • Dolby Vision compat 6 now counts as an HDR10 base in the format fallback. Compat id 6 is the UHD Blu-ray base signal, the same CTA-861.3 HDR10 base as compat 1; a compat-6 stream whose transfer could not be read previously reported no base tag.
  • AV1 colour is recovered from the av1C sequence header. mkvmerge leaves AV1 colour in-stream, so an HDR AV1 remux commonly has no MKV Colour element or MP4 colr box; the CICP description then lives only in the sequence header embedded in the av1C record. Such files previously reported an empty colour section and misclassified the Dolby Vision base. The embedded sequence header's colour is adopted only when it carries an explicit colour description, so a CICP-unspecified stream never overwrites container colour with defaults.

Schema

  • 2.0 to 2.1 (additive). New optional field video_tracks[].dolby_vision.unconverted_dual_layer_rpu, omitted when false. Value-set growth: "VP9" and "ProRes" join the codec set with their own codec_profile formats, and "raw VP9 (IVF)" joins the container set. No field changed type, unit, presence, or meaning, so consumers following the docs/SCHEMA.md conventions are unaffected.