Commit 08d62c60e8 for ffmpeg
commit 08d62c60e8683427e6fd22f6dd253103ce922cd9
Author: Sida Zhu <zhusida@chromium.org>
Date: Wed Sep 16 14:35:55 2026 +0800
avformat/mov: export dec3 payload as extradata
The optional EC3SpecificBox extensions carry E-AC-3 JOC signaling.
Preserve the complete dec3 payload in codec extradata so callers can
pass it to platform decoders without parsing E-AC-3 packets.
Keep parsing the mandatory fields for channel layout and audio service
metadata.
Signed-off-by: Sida Zhu <zhusida@chromium.org>
diff --git a/libavformat/mov.c b/libavformat/mov.c
index a7400aba06..d725ef1157 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1132,11 +1132,20 @@ static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
enum AVAudioServiceType *ast;
int eac3info, acmod, lfeon, bsmod;
uint64_t mask;
+ int ret;
if (c->fc->nb_streams < 1)
return 0;
st = c->fc->streams[c->fc->nb_streams-1];
+ /* Preserve the complete EC3SpecificBox payload, including optional
+ * extensions such as E-AC-3 JOC signaling. */
+ if (atom.size < 5 || (uint64_t)atom.size > (1 << 30))
+ return AVERROR_INVALIDDATA;
+ ret = ff_get_extradata(c->fc, st->codecpar, pb, atom.size);
+ if (ret < 0)
+ return ret;
+
sd = av_packet_side_data_new(&st->codecpar->coded_side_data,
&st->codecpar->nb_coded_side_data,
AV_PKT_DATA_AUDIO_SERVICE_TYPE,
@@ -1146,11 +1155,7 @@ static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
ast = (enum AVAudioServiceType*)sd->data;
- /* No need to parse fields for additional independent substreams and its
- * associated dependent substreams since libavcodec's E-AC-3 decoder
- * does not support them yet. */
- avio_rb16(pb); /* data_rate and num_ind_sub */
- eac3info = avio_rb24(pb);
+ eac3info = AV_RB24(st->codecpar->extradata + 2);
bsmod = (eac3info >> 12) & 0x1f;
acmod = (eac3info >> 9) & 0x7;
lfeon = (eac3info >> 8) & 0x1;
diff --git a/tests/ref/fate/copy-trac3074 b/tests/ref/fate/copy-trac3074
index 2930e924ad..66509c7064 100644
--- a/tests/ref/fate/copy-trac3074
+++ b/tests/ref/fate/copy-trac3074
@@ -1,5 +1,6 @@
b73942f473de4f3c88dffe0a14f80c53 *tests/data/fate/copy-trac3074.mp4
334015 tests/data/fate/copy-trac3074.mp4
+#extradata 0: 5, 0x007c0028
#tb 0: 1/48000
#media_type 0: audio
#codec_id 0: eac3