From e680c5c344683d4a0d3a8b5c976ca56baf21b8bd Mon Sep 17 00:00:00 2001 From: James Almer Date: Thu, 5 Aug 2021 11:59:55 -0300 Subject: avcodec/cbs: add a helper to read extradata within packet side data Using ff_cbs_read() on the raw buffer will not parse it as extradata, resulting in parsing errors for example when handling ISOBMFF avcC. This helper works around that. Signed-off-by: James Almer --- libavcodec/cbs.c | 13 +++++++++++++ libavcodec/cbs.h | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c index 8d50ea1432..f6e371ddef 100644 --- a/libavcodec/cbs.c +++ b/libavcodec/cbs.c @@ -294,6 +294,19 @@ int ff_cbs_read_packet(CodedBitstreamContext *ctx, pkt->data, pkt->size, 0); } +int ff_cbs_read_packet_side_data(CodedBitstreamContext *ctx, + CodedBitstreamFragment *frag, + const AVPacket *pkt) +{ + size_t side_data_size; + const uint8_t *side_data = + av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, + &side_data_size); + + return cbs_read_data(ctx, frag, NULL, + side_data, side_data_size, 1); +} + int ff_cbs_read(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const uint8_t *data, size_t size) diff --git a/libavcodec/cbs.h b/libavcodec/cbs.h index b7acf98347..bd97d163b1 100644 --- a/libavcodec/cbs.h +++ b/libavcodec/cbs.h @@ -276,6 +276,10 @@ int ff_cbs_read_extradata_from_codec(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const struct AVCodecContext *avctx); +int ff_cbs_read_packet_side_data(CodedBitstreamContext *ctx, + CodedBitstreamFragment *frag, + const AVPacket *pkt); + /** * Read the data bitstream from a packet into a fragment, then * split into units and decompose. -- cgit v1.2.3