Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 93 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,99 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.0.10](https://github.com/OxideAV/oxideav-mp4/compare/v0.0.9...v0.0.10) - 2026-08-15

### Other

- structure-aware MP4/ISOBMFF battery — 6 targets, 3 hostile-input fixes
- §8.8.12 mfro surfacing + trailer-size cross-check
- fuzz-campaign hardening — five unbacked-allocation shapes fixed
- resolve_sai_aux_info — bridge the senc-less CENC carriage
- insert_empty_time — §8.8.6.1 empty-insert write side
- §8.8.2 mehd write side — sealed fragmented duration
- §8.8.7 duration-is-empty track fragments
- foreign-file elst equivalence pin + README seek-path accuracy
- start_time from the mapped §8.6.6 timeline + seek/hostile pins
- per-packet sample_description_index surfacing
- explicit edit lists reach the fragmented init segment
- explicit per-track edit lists on the muxer
- typed §8.6.6 edit-list public surface
- full §8.6.6 edit-list timeline mapping on demux
- mark internal boxes module #[doc(hidden)]
- emsg v0-delta absolute-time resolver + PIFF truncation sweeps
- wire PIFF uuid boxes + emsg into demux surface and fragment writer
- PIFF legacy uuid encryption boxes + DASH emsg byte layer
- README + CHANGELOG — round 396 self-describing CENC packaging docs
- CENC×index interplay hardening + EveryKeyframe final-sample fix
- CencFragmentPackager — plaintext-in, protected-fMP4-out write driver
- packager→demux→decrypt round-trip gate — every §10 scheme × fragmented shape
- seig key-rotation signalling on write — fragment-local sgpd/sbgp
- per-fragment senc + saiz/saio emission through write_protected_packet
- CENC seig group-entry serialiser (§6 write side)
- add CI / crates.io / docs.rs / MIT-license badges
- moof-level pssh emission for per-fragment key rotation
- CENC protected-track muxing — sinf envelope + moov-level pssh emission
- CENC write-side foundations — tenc/pssh/senc builders + AES encrypt driver
- muxer codec write-side coverage x12 — h265/av1/vp9/vp8/h263 + opus/alac/ac3/eac3/mp3/G.711
- commit stranded pnot integration test
- QuickTime track load settings atom (trak/load) read + build
- QuickTime text sample description (text stsd entry) read + build
- QuickTime timecode sample description (tmcd stsd entry) read + build
- QuickTime timecode media info atom (tcmi §gmhd) read + build
- QuickTime base media info header (gmhd/gmin §minf) read + build
- HEIF item-properties crtt/mdft timestamps + README
- HEIF item-properties extended set (udes/altt/iscl/rref)
- surface per-item iloc/iref catalogue detail on metadata channel
- HEIF entity-grouping family (grpl/EntityToGroupBox)
- HEIF item-properties family (iprp/ipco/ipma + property boxes)
- README — document r375 box builders (tref/trgr/kind/cprt/tsel/strk/subs/saiz/saio/pdin/prft write side)
- saiz/saio (Sample Auxiliary Info Sizes/Offsets §8.7.8-9) public surface
- subs (SubSampleInformationBox §8.7.7) public parse + build surface
- prft (ProducerReferenceTimeBox §8.16.5) standalone builder
- pdin (ProgressiveDownloadInfoBox §8.1.3) builder
- trgr (TrackGroupBox §8.3.4) builder
- cprt/kind/tsel track-udta selection-box builders (§8.10)
- sub-track (strk/stri/strd/stsg §8.14) builders
- tref (TrackReferenceBox §8.3.3) builder
- document hint sample entries, hinf, FD item info, meco/mere
- hinf Hint Statistics Box parse+build (§9.1.5)
- rtcp reception + MPEG-2 TS (sm2t/rm2t) hint sample entries
- RTP/SRTP/reception hint sample-entry family (§9.1.2 / §9.4.1.2)
- meco/mere Additional Metadata Container family (§8.11.7/8)
- FD Item Information family parse+build (§8.13 / §9.2.4.7)
- pasp/clap/colr box builders (§12.1.4-5)
- demux VisualSampleEntry pasp/clap/colr boxes (§12.1.4-5)
- §8.11 meta-item box builders (iloc/pitm/iinf/iref/idat)
- demux idat capture + item-byte resolution (§8.11.11 / §8.11.3.3)
- demux file-level meta item infrastructure (iloc/pitm/iinf/iref, §8.11)
- parse fragment-local sample groups (sgpd/sbgp/csgp in traf, §8.9)
- wire csgp (CompactSampleToGroupBox §8.9.5) into non-fragmented muxer
- trep + assp fragmented-mux emission (§8.8.15 / §8.8.16)
- typed assp AlternativeStartupSequencePropertiesBox in trep (§8.8.16)
- add build_stvi_box write side + stvi integration round-trip tests
- parse stvi (StereoVideoBox, §8.15.4.2) from sample-entry sinf/schi
- ssix SubsegmentIndexBox emission after each sidx (ISO/IEC 14496-12 §8.16.4)
- leva LevelAssignmentBox emission in init mvex (ISO/IEC 14496-12 §8.8.13)
- build_leva_box LevelAssignmentBox builder (ISO/IEC 14496-12 §8.8.13)
- large_mdat option for 64-bit largesize mdat header (§4.2)
- document prft muxing; drop stale "no fragmented muxing" bullet
- prft ProducerReferenceTimeBox muxing (ISO/IEC 14496-12 §8.16.5)
- document typed §10 sample-group description entries
- decode_sample_group_entry dispatch + SampleGroupEntry
- rash RateShareEntry (§10.2.2) + CHANGELOG
- alst AlternativeStartupEntry (§10.3.2)
- rap/tele/sap single-byte bit-packed entries
- typed roll/prol RollRecoveryEntry (§10.1.1)
- capture 2022-edition flags annotating what the NTP time represents
- enforce §8.9.5 pattern/count 4-bit-width agreement constraint
- csgp pattern → sample expansion: CsgpBox::resolve_samples (§8.9.5)
- capture index_msb_indicates_fragment_local_description (flag bit 7) + width-aware MSB resolver
- parse btrt BitRateBox in sample entries (ISO/IEC 14496-12 §8.5.2)
- parse amve AmbientViewingEnvironmentBox inside VisualSampleEntry
- csgp CompactSampleToGroupBox builder (ISO/IEC 14496-12:2020 §8.9.5)
- demux hmhd HintMediaHeaderBox (ISO/IEC 14496-12 §12.4.2)
- refresh to current status, drop per-round changelog cruft

### Added

- Structure-aware fuzz surface expanded from one demux-only target to six (shared `oxideav_mp4_fuzz` scaffolding: a `Recipe` byte-reader, a valid-by-construction `MuxPlan`, and a full-accessor demux battery). New targets: `box_parsers` (hostile bytes through every standalone public box parser — HEIF item catalogue, CENC/PIFF, `emsg`, FD, hint, sample-group blobs, QuickTime atoms, aux-info/random-access records — with parse∘build fixed-point asserts wherever a byte-exact builder dual exists); `mux_roundtrip` (valid recipes must mux and re-demux byte-exactly across plain / faststart / fragmented — incl. `styp` + `sidx`/`mfra` — layouts, with exact pts identity through the media/movie timescale rescale and start-delay `elst`); `structured_mutate` (byte flips / truncations / targeted corruption right after the sample-table, fragment, and index FourCCs the offset walkers arithmetic on); `meta_graph` (builder-assembled `iloc`/`iinf`/`iref`/`ipma` catalogues — every construction method, reference cycles, out-of-range property indexes — reparse identically, then survive hostile mutation of the `meta` body); and `cenc_roundtrip` (encrypt∘decrypt identity under arbitrary-but-valid §10 scheme × `tenc` × subsample-partition metadata, plus hostile `plan_sample_cipher` / `senc` / `seig` walks). The retooled `demux` target now drives the whole public accessor set (CENC / PIFF / `emsg` / HEIF item resolution / edit lists / fragment records) plus both seek paths. Bounded inline ASan campaigns (5.9M+ execs total across targets) found and fixed three defects, each pinned as a fuzz-corpus regression + covered by a unit test:
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "oxideav-mp4"
version = "0.0.9"
version = "0.0.10"
edition = "2021"
rust-version = "1.80"
license = "MIT"
Expand Down