diff mbox series

[FFmpeg-devel,3/3] avcodec/trace_headers_bsf: also parse extradata in packet side data

Message ID 20210805152452.1646-3-jamrial@gmail.com
State Accepted
Commit acd079843b7cdf18a1d6c84a5fe48555f7554e92
Headers show
Series [FFmpeg-devel,1/3] avcodec/cbs: add a helper to read extradata within packet side data | expand

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate success Make fate finished

Commit Message

James Almer Aug. 5, 2021, 3:24 p.m. UTC
Certain mov/mp4 files have parameter sets out of band, and when required for a
sample it may be propagated within the relevant packet's side data.
This fixes parsing said files if the SPS and/or PPS in the side data is
different than the one in extradata.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/trace_headers_bsf.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)
diff mbox series

Patch

diff --git a/libavcodec/trace_headers_bsf.c b/libavcodec/trace_headers_bsf.c
index b891730bac..a9b0247412 100644
--- a/libavcodec/trace_headers_bsf.c
+++ b/libavcodec/trace_headers_bsf.c
@@ -95,6 +95,19 @@  static int trace_headers(AVBSFContext *bsf, AVPacket *pkt)
 
     av_log(bsf, AV_LOG_INFO, "Packet: %d bytes%s.\n", pkt->size, tmp);
 
+    if (av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, NULL)) {
+        av_log(bsf, AV_LOG_INFO, "Side data:\n");
+
+        err = ff_cbs_read_packet_side_data(ctx->cbc, frag, pkt);
+        ff_cbs_fragment_reset(frag);
+
+        if (err < 0) {
+            av_packet_unref(pkt);
+            return err;
+        }
+        av_log(bsf, AV_LOG_INFO, "Payload:\n");
+    }
+
     err = ff_cbs_read_packet(ctx->cbc, frag, pkt);
 
     ff_cbs_fragment_reset(frag);