Skip to content

chore: release v0.11.0#130

Merged
bradh merged 1 commit into
mainfrom
release-plz-2026-01-26T00-21-53Z
May 19, 2026
Merged

chore: release v0.11.0#130
bradh merged 1 commit into
mainfrom
release-plz-2026-01-26T00-21-53Z

Conversation

@github-actions

@github-actions github-actions Bot commented Jan 26, 2026

Copy link
Copy Markdown
Contributor

🤖 New release

  • mp4-atom: 0.10.1 -> 0.11.0 (⚠ API breaking changes)

mp4-atom breaking changes

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field Hev1.lhvc in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mdia/minf/stbl/stsd/hevc/hev1.rs:8
  field Hvc1.lhvc in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mdia/minf/stbl/stsd/hevc/hvc1.rs:9
  field Av01.ccst in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mdia/minf/stbl/stsd/av01.rs:12
  field Uncv.taic in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mdia/minf/stbl/stsd/uncv.rs:14
  field Moov.ainf in /tmp/.tmpDLxqVD/mp4-atom/src/moov/mod.rs:23
  field Udta.rtng in /tmp/.tmpDLxqVD/mp4-atom/src/moov/udta/mod.rs:19
  field ItemInfoEntry.item_uri_type in /tmp/.tmpDLxqVD/mp4-atom/src/meta/iinf.rs:27
  field Trak.tref in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mod.rs:23
  field Minf.hmhd in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mdia/minf/mod.rs:26
  field Tfhd.duration_is_empty in /tmp/.tmpDLxqVD/mp4-atom/src/moof/traf/tfhd.rs:26
  field Tfhd.default_base_is_moof in /tmp/.tmpDLxqVD/mp4-atom/src/moof/traf/tfhd.rs:27

--- failure enum_marked_non_exhaustive: enum marked #[non_exhaustive] ---

Description:
A public enum has been marked #[non_exhaustive]. Pattern-matching on it outside of its crate must now include a wildcard pattern like `_`, or it will fail to compile.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#attr-adding-non-exhaustive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_marked_non_exhaustive.ron

Failed in:
  enum Colr in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mdia/minf/stbl/stsd/colr.rs:6

--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant Colr::Ricc 1 -> 2 in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mdia/minf/stbl/stsd/colr.rs:18
  variant Colr::Prof 2 -> 3 in /tmp/.tmpDLxqVD/mp4-atom/src/moov/trak/mdia/minf/stbl/stsd/colr.rs:21
Changelog

0.11.0 - 2026-05-18

Added

  • add support for nclc colour type in colr box (#110)

Fixed

  • preserve per-sample fields on trun encode roundtrip (#160)

Other

  • return Err(Reserved) on out-of-range *_size fields instead of panicking (#163)
  • bound Vec::with_capacity on counts (#162)
  • bound Vec::with_capacity in parse_vorbis_comment and Avcc (#157)
  • replace unmaintained paste with pastey (#161)
  • update related traits to support unsized reads and writes (#145)
  • minor cleanup in colr test code (#155)
  • make non-exhaustive, add unit tests (#149)
  • advance buffer cursor after reading prof/rICC profile (#153)
  • follow-up for self-contained flag fix, add tests (#150)
  • expose duration_is_empty and default_base_is_moof flags on Tfhd (#151)
  • Fix dref url self_contained flag bit position (#147)
  • implement LHVCDecoderConfigurationBox (lhvC) (#141)
  • Add Brad Hards to authors (#144)
  • implement 3GPP narrowband codec sample entry (samr) (#135)
  • fix up tests after recent commits (#140)
  • implement track reference (tref) box (#139)
  • implement Web Video Text Tracks (WebVTT) sample entry format (#131)
  • implement rtng box (#136)
  • implement ainf box. (#122)
  • add ccst support for AV1 (#133)
  • Add option for having taic box (#132)
  • implement hint media header (hmhd) box (#115)
  • Add support for "uri " infe boxes inside iinf (#123)


This PR was generated with release-plz.

@github-actions github-actions Bot force-pushed the release-plz-2026-01-26T00-21-53Z branch 3 times, most recently from ce56159 to 79f6b75 Compare January 28, 2026 13:41
@github-actions github-actions Bot force-pushed the release-plz-2026-01-26T00-21-53Z branch 8 times, most recently from 2516b0b to 640feca Compare February 25, 2026 08:58
@github-actions github-actions Bot force-pushed the release-plz-2026-01-26T00-21-53Z branch 2 times, most recently from c880f12 to 8f0cab8 Compare April 2, 2026 09:14
@github-actions github-actions Bot force-pushed the release-plz-2026-01-26T00-21-53Z branch 2 times, most recently from 0bc4a7d to 9543d94 Compare April 21, 2026 09:49
rhoopr pushed a commit to rhoopr/kei that referenced this pull request Apr 26, 2026
…275)

## Summary

- Pins `mp4-atom` to a git rev past upstream PR #123 so `infe` entries
with `item_type = "uri "` decode (iOS 17+ HEICs embed these pointing at
`tag:apple.com,2023:photos/<id>`). Closes #274.
- Wraps HEIC writer failures in a typed `HeifError` enum (`Decode {
offset, total, source }`, `UnparsableTail`, `MissingMeta`, `Encode {
kind, source }`, `Io`) so logs carry byte-offset and atom-kind context
instead of opaque anyhow strings.
- Adds a regression test that builds a synthetic Apple-style HEIC with a
`uri ` infe entry and round-trips it through `apply_metadata`. Pre-fix
this hit `under decode: infe`.

Builds on #271 (already merged), which fixed dispatch so HEIC bytes
route to the in-tree HEIF writer. This PR fixes the parser side.

## Why pin instead of replace

The upstream fix already exists. kixelated/mp4-atom#123 merged
2026-01-26 with a one-line addition (`item_uri_type: Option<String>`)
and proper `uri ` handling in `decode_body_ext`/`encode_body_ext`. The
blocker is kixelated/mp4-atom#130, the v0.11.0 release PR, which is open
but unmerged.

Surveyed alternatives:

- `mp4`, `mp4parse`, `re_mp4`, `bento`, `bmff` - read-only or
video-only; none support HEIC `meta`/`iinf`/`iloc` write.
- `libheif-rs` - re-encodes the image on write, which would break kei's
byte-identical `mdat` invariant. Also pulls libheif + libde265 + libx265
across 5 cross-compile targets.
- Roll-your-own ISO-BMFF parser - 800-1200 lines for a problem the
upstream patch already solves.

Pin uses `rev = "d1e9e923571cbbb42c049aec7f53cd70c6f3d8ff"` (specific
SHA, not a branch) so `cargo update` can't drift. Cargo.toml has a
comment pointing at #130; switch back to a crates.io version when 0.11.0
ships.

One source change required for the bump: kei's `ItemInfoEntry { ... }`
literal in `heif.rs` adds `item_uri_type: None` for the kei-authored XMP
`mime` item.

## Test plan

- [x] `cargo build` clean against the pinned rev
- [x] `cargo test download::` - 488 passed, 0 failed (includes
`apply_metadata_succeeds_on_heic_with_uri_infe_item` and the
variant-matching `HeifError` tests)
- [x] `just gate` clean - fmt, clippy `-D warnings`, cli + behavioral
tests, doc with `RUSTDOCFLAGS=-Dwarnings`, `cargo audit`, typos. The
`paste 1.0.15` advisory is still allowed via `mp4-atom`'s transitive
dep, same as before this PR.
- [ ] Live verification: `kei sync --recent 200 --skip-videos` against
the maintainer's library (the source of the original #274 reproduction).
Pre-fix: spurious `Failed to write metadata` warnings on every iOS 17+
HEIC. Post-fix: clean log, XMP embedded on first pass.

## Files

- `Cargo.toml` - pin with rationale comment
- `Cargo.lock` - auto-bumped to the git rev
- `src/download/heif.rs` - `HeifError` enum, `insert_xmp` returns
`Result<(), HeifError>`, tests match on variants
- `src/download/metadata.rs` -
`apply_metadata_succeeds_on_heic_with_uri_infe_item` (~67 lines)
- `CHANGELOG.md` - Fixed entry under [Unreleased] referencing #274
@github-actions github-actions Bot force-pushed the release-plz-2026-01-26T00-21-53Z branch 7 times, most recently from f9b8f5c to 7eb6b7a Compare May 1, 2026 08:05
@github-actions github-actions Bot force-pushed the release-plz-2026-01-26T00-21-53Z branch from 7eb6b7a to a94d2c2 Compare May 18, 2026 09:45
@github-actions github-actions Bot force-pushed the release-plz-2026-01-26T00-21-53Z branch from a94d2c2 to a071e1e Compare May 18, 2026 10:00
@bradh bradh merged commit b10f65c into main May 19, 2026
@bradh bradh deleted the release-plz-2026-01-26T00-21-53Z branch May 19, 2026 21:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant