Skip to content

v0.53.0

Choose a tag to compare

@tobbee tobbee released this 07 Jul 08:46
· 101 commits to master since this release

Added

  • mp4ff-mvhevc command line tool with info and add subcommands to inspect
    MV-HEVC (Multi-View HEVC) files and to mux HEVC (Annex B or mp4) into a
    single-track MV-HEVC mp4 with hvcC/lhvC, oinf/linf sample groups and
    optional Apple spatial-video (vexu/hfov) metadata
  • TrgrBox for the Track Group Box (trgr, ISO/IEC 14496-12 Sec. 8.3.4) and a
    generic TrackGroupTypeBox for its children (registered for the standard
    msrc and ster track group types, and cstg — the complete subset track
    grouping for L-HEVC, ISO/IEC 14496-15 Sec. 9.5.1), with a
    CreateTrackGroupTypeBox helper and a TrakBox.Trgr reference.
    Type-specific data after track_group_id (e.g. the ster left_view_flag)
    is preserved for round-tripping
  • Apple spatial/stereo video metadata boxes in the Video Extended Usage box
    (vexu) family: VexuBox, EyesBox (eyes), CamsBox (cams),
    ProjBox (proj), StriBox (stri), HeroBox (hero), BlinBox
    (blin), PrjiBox (prji) and HfovBox (hfov), with a CreateVexuBox
    helper and VisualSampleEntryBox.Vexu/.Hfov child references (Apple
    "QuickTime and ISO Base Media File Formats and Spatial and Immersive Media")
  • LhvCBox for the L-HEVC configuration box (lhvC, ISO/IEC 14496-15 Ed. 7
    Sec. 9.5.3.1), carrying the L-HEVC decoder configuration record for the
    enhancement layers of a layered HEVC (MV-HEVC/SHVC) stream, with a
    CreateLhvCFromNalus constructor and a VisualSampleEntryBox.LhvC child
    reference
  • Parsing of the HEVC multilayer/multiview VPS extension (vps_extension(),
    ISO/IEC 23008-2 Annex F.7.3.2.1.1) used by MV-HEVC and SHVC, exposed as an
    optional hevc.VPS.Extension (*VPSExtension) with scalability mask,
    per-layer dimension/dependency info, layer profile-tier-levels, output layer
    sets and rep_format() resolutions, plus VPS.GetNumLayers,
    IsMultiLayer, GetNumViews and ScalabilityMaskBits helpers
  • L-HEVC (lhvC) decoder configuration record support in the hevc package:
    DecConfRec.DecodeLHEVCDecConfRec, EncodeLHEVC, EncodeLHEVCSW and
    LHEVCSize (ISO/IEC 14496-15 Ed. 7 Sec. 9.4.3)
  • OinfSampleGroupEntry for the Operating Points Information sample group
    (oinf, ISO/IEC 14496-15 Ed. 7 Sec. 9.6.2) and LinfSampleGroupEntry for
    the Layer Information sample group (linf, Sec. 4.15), used by layered HEVC
    (MV-HEVC/SHVC)
  • BuildOinfFromVPS and BuildLinfFromVPS to derive the oinf and linf
    sample group entries for a layered HEVC track from a parsed multilayer
    hevc.VPS
  • LbliSampleGroupEntry for the L-HEVC external base layer sample group
    (lbli, LhvcExternalBaseLayerInfo, ISO/IEC 14496-15 Ed. 7 Sec. 9.6.1),
    used by L-HEVC tracks that predict from an external base layer in a
    separate track
  • SampleAccessor.ReadMdatData for bulk reading of the raw mdat payload of a
    fragment in a single read, intended for streaming with lazy mdat decoding
  • HDR metadata boxes ClliBox (Content Light Level, clli, ISO/IEC 14496-12
    Sec. 12.1.6) and MdcvBox (Mastering Display Colour Volume, mdcv, ISO/IEC
    14496-12 Sec. 12.1.7), including VisualSampleEntryBox.Clli and .Mdcv
    child references
  • Support for Dolby Vision HEVC sample entries dvh1 and dvhe: box decoding,
    StsdBox.HvcX mapping, TrakBox.SetHEVCDescriptor (dvh1 like hvc1, dvhe like
    hev1), and CENC/CBCS encryption via InitProtect/ExtractInitProtectData
  • DoViConfigurationBox for the Dolby Vision Configuration Box (dvcC for
    dv_profile <= 7, dvvC for 8-9, dvwC for >= 10), carrying the
    DOVIDecoderConfigurationRecord, with a VisualSampleEntryBox.DoViConfig
    child reference
  • Parsing and writing of the recovery point SEI message (type 6) for both AVC
    (RecoveryPointAvcSEI, ISO/IEC 14496-10 D.1.8) and HEVC (RecoveryPointHevcSEI,
    ISO/IEC 23008-2 D.2.8)
  • Exponential Golomb support on the bit-level types used by the sei package:
    ReadExpGolomb/ReadSignedGolomb on bits.Reader and
    WriteExpGolomb/WriteSignedGolomb on bits.FixedSliceWriter

Changed

  • Minimum Go version bumped from 1.17 to 1.19. Fuzz tests require native
    fuzzing (testing.F, Go 1.18), and Go 1.19 fixes fuzz-corpus CRLF handling
    so the seed corpus loads on Windows CI
  • cenc encryption with an 8-byte input IV is now CMAF-conformant
    (ISO/IEC 23000-19 Sec. 8.2.3.1): InitProtect sets
    tenc.DefaultPerSampleIVSize to 8, EncryptFragment writes 8-byte
    per-sample IVs to senc and increments the IV by one per sample
    (ISO/IEC 23001-7 Sec. 9.2), and the returned chaining IV is 8 bytes.
    A 16-byte input IV keeps the previous 16-byte behavior
  • EncryptFragment omits the senc, saiz, and saio boxes when a
    fragment has no sample auxiliary information (full-sample encryption
    with a constant IV, e.g. cbcs audio), as CMAF Sec. 8.2.2.1 recommends
  • SaizBox.AddSampleInfo now returns an error (sample-info sizes above
    255 do not fit the 8-bit sample_info_size) instead of panicking on
    inconsistent sizes, collapses uniform sizes into
    default_sample_info_size, and switches to per-sample sizes when a
    differing size arrives

Fixed

  • DecryptFragment no longer fails on fragments without a senc box
    when the track uses full-sample encryption with a constant IV
  • SencBox keeps its subsample entries aligned with the sample index, so
    a fragment mixing samples with and without subsamples encodes a zero
    subsample count instead of panicking, and saiz sizes match the
    senc layout
  • GetAVCProtectRanges and GetHEVCProtectRanges return an all-clear
    subsample entry for a degenerate sample instead of an empty list