mux/mp4: DTS audio (dtsc/dtsh + ddts)
Parse the DTS core header (SFREQ/AMODE/RATE/LFF/NBLKS/FSIZE) → a ddts box (sample rate, channel layout mask, core size, computed bitrate, LFE); whole access units (core + DTS-HD extension substreams) pass through, so an HD decoder finds the extension. dtsh when an extension sync follows the core, else dtsc. Fit oracle now carries DTS / DTS-HD MA / DTS-HD HR. Validated on 300 (real DTS-HD MA 7.1): freemkv's mp4 DTS track is byte-identical to ffmpeg -c copy under ffprobe (dts / 48000 / 8ch / 7.1) and decodes clean (exit 0). Channel layout correct.
This commit is contained in:
@@ -10,6 +10,12 @@
|
||||
(`mp4:// mkv://`, `mp4:// audio://`, `mp4:// json://`, …). Round-trip is
|
||||
frame-exact (verified `iso:// mp4://` → `mp4:// mkv://` preserves every video
|
||||
and audio packet). Progressive MP4 only; fragmented (`moof`) is future work.
|
||||
- **MP4 output is faststart by default** — `moov` is written *before* `mdat`, so
|
||||
the file plays over HTTP without pre-fetching the end. Done with zero extra I/O:
|
||||
a `moov`-sized hole (`round_up_4MB(16 B/sample × est_samples) + 4 MB`) is
|
||||
reserved up front, so sample offsets are fixed and `moov` is dropped into the
|
||||
hole at finish with a `free` box for the slack (falls back to moov-at-end only
|
||||
if the estimate is blown).
|
||||
- **Native MP4 output (`mp4://`)** — a progressive ISO-BMFF muxer
|
||||
(`ftyp`+`mdat`+`moov`), so a disc goes straight to a play-everywhere `.mp4` in
|
||||
one decrypt pass, no ffmpeg round-trip. Carries HEVC / H.264 video (HDR10 colour
|
||||
|
||||
Reference in New Issue
Block a user