summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2021-08-05 11:59:55 -0300
committerJames Almer <jamrial@gmail.com>2021-08-14 23:06:38 -0300
commite680c5c344683d4a0d3a8b5c976ca56baf21b8bd (patch)
tree7851bb146102de271feed1470cf247ad6addb9ef
parent087fbfe5bc2272aa1cfd9f4c49438436b68a1ddc (diff)
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 <jamrial@gmail.com>
-rw-r--r--libavcodec/cbs.c13
-rw-r--r--libavcodec/cbs.h4
2 files changed, 17 insertions, 0 deletions
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.