Repository navigation
fix(fmp4): carry Opus pre-skip and gain through dOps - #4294
Conversation
The fMP4 importer now publishes the dOps fields as an OpusHead description, and the exporter writes the head's gain and input rate back into dOps instead of 0. A description with a channel mapping table is refused on export rather than written as family 0 without it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The catalog describes the decoder's output, so CMAF Opus uses 48 kHz regardless of the sample entry rate. Move the surround follow-up to m1 and add its mp4-atom prerequisite, the Opus catalog rate alignment, and the js/hang dOps pre-skip quests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Warning Review limit reachedNext included review available in 52 minutes. View limit detailsLimit details: You’ve used all 4 included reviews currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (10)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (10)
💤 Files with no reviewable changes (1)
Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 1 remain after this review. WalkthroughfMP4 Opus import now publishes a 48 kHz sample rate and an OpusHead description built from dOps. Track synthesis uses supplied description fields and rejects nonzero mapping families. Tests cover these behaviors. The quest list and plan documents also change to describe separate Opus-related tasks. Priority: ➖ Normal Merge Risk: ⚪ Minimal · up to No actionable issue is established for this change. It is ready to merge after normal checks. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to Opus metadata from fMP4 now reaches existing decoder and remux paths. The inspected paths retain codec validation, and no access-control bypass or broader authority change was established. Malformed-input recovery and some dependency behavior remain incompletely verified. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Merge check: CI green, branch clean against main, Codex review passed with no findings, CodeRabbit reported nothing actionable. No changes pushed. The fMP4 importer now publishes a dOps-derived OpusHead description at 48 kHz, and the exporter carries pre-skip, gain, and input rate while refusing mapping family 1+. Enabling auto-merge. (Written by Claude Opus 5.5) |
# Conflicts: # quest/m1/README.md
Problem
The fMP4 importer built an Opus catalog entry from the sample entry alone and published no description, so a CMAF Opus track decoded natively (moq-audio) or remuxed to TS/MKV/FLV lost its pre-skip and gain. The exporter wrote
dOps.output_gainas 0, and silently wrote a family 1 description as family 0 with no mapping table.Approach
dOps(input rate, channels, pre-skip, gain) withcodec::opus::Configand publish it as the description. The catalog describes the decoder output: 48 kHz and the head's output channels, never the informational input rate or the sample entry rate.mp4-atom0.16 already refuses a nonzerodOpsmapping family at decode, so no table is dropped.opus::Error::UnsupportedMappingFamily), sincemp4_atom::Dopscannot carry the table.dOps. Plus a 48 kHz catalog rate test behind a 44.1 kHz sample entry, and a family 1 refusal test on each side.Impact
description(19-byte OpusHead). Catalogsample_rateis now always 48 kHz (was the sample entry rate, normally 48 kHz already).dOps.Alternatives
dOpsinput rate as the catalogsample_rate(as MKV import does with OpusHead). Rejected: the catalog must match the codec, and the input rate is informational.Follow-ups
quest/m1/mp4-atom-dops-mapping.md:mp4-atomexposes thedOpsmapping family and table in a release.quest/m1/cmaf-opus-surround.md: carry the family 1 table through CMAF, after that and the audio-codecs line (opus::Mapping, feat(ts): import surround Opus with a family 1 OpusHead #4282).quest/m1/opus-catalog-rate.md: MKV (and similar) Opus import publishes 48 kHz, not the OpusHead input rate.quest/m1/js-dops-pre-skip.md: js/hangcreateDOpsBoxstops hard-coding a 312 pre-skip.🤖 Generated with Claude Code
(Written by Opus 5.5)