This can avoid copying due to lack of refcounting in parsers. --- libavcodec/cbs.c | 9 +++++++++ libavcodec/cbs.h | 14 ++++++++++++++ libavcodec/cbs_internal.h | 4 ++++ 3 files changed, 27 insertions(+)
diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c index c388be896b..ff98a1e8f4 100644 --- a/libavcodec/cbs.c +++ b/libavcodec/cbs.c @@ -280,6 +280,15 @@ int ff_cbs_read(CodedBitstreamContext *ctx, return cbs_read_fragment_content(ctx, frag); } +int ff_cbs_parse_headers(CodedBitstreamContext *ctx, void *header, + const uint8_t *data, size_t size) +{ + if (!ctx->codec->parse_headers) + return AVERROR(ENOSYS); + + return ctx->codec->parse_headers(ctx, header, data, size); +} + int ff_cbs_write_fragment_data(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag) diff --git a/libavcodec/cbs.h b/libavcodec/cbs.h index 967dcd1468..be965ae258 100644 --- a/libavcodec/cbs.h +++ b/libavcodec/cbs.h @@ -278,6 +278,20 @@ int ff_cbs_read(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const uint8_t *data, size_t size); +/** + * Parse headers from a bitstream from a memory region, updating state + * but not storing intermediate results. + * + * If header is not NULL, the decomposition of the header of the last + * displayed unit in the stream is written there. The type and size of + * this is codec-dependent. + * + * This is intended for use in parsers where only header parsing is + * required and the input is not refcounted. + */ +int ff_cbs_parse_headers(CodedBitstreamContext *ctx, void *header, + const uint8_t *data, size_t size); + /** * Write the content of the fragment to its own internal buffer. diff --git a/libavcodec/cbs_internal.h b/libavcodec/cbs_internal.h index 53f2e5d187..9783555292 100644 --- a/libavcodec/cbs_internal.h +++ b/libavcodec/cbs_internal.h @@ -55,6 +55,10 @@ typedef struct CodedBitstreamType { // Free the codec internal state. void (*close)(CodedBitstreamContext *ctx); + + // Parse headers only. + int (*parse_headers)(CodedBitstreamContext *ctx, void *header, + const uint8_t *data, size_t size); } CodedBitstreamType; -- 2.20.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".