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