diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c index 7c1aa005c2..c8c526ab12 100644 --- a/libavcodec/cbs.c +++ b/libavcodec/cbs.c @@ -112,6 +112,12 @@ int ff_cbs_init(CodedBitstreamContext **ctx_ptr, return 0; } +void ff_cbs_flush(CodedBitstreamContext *ctx) +{ + if (ctx->codec && ctx->codec->flush) + ctx->codec->flush(ctx); +} + void ff_cbs_close(CodedBitstreamContext **ctx_ptr) { CodedBitstreamContext *ctx = *ctx_ptr; diff --git a/libavcodec/cbs.h b/libavcodec/cbs.h index 3a054aa8f3..635921b11e 100644 --- a/libavcodec/cbs.h +++ b/libavcodec/cbs.h @@ -236,6 +236,11 @@ extern const enum AVCodecID ff_cbs_all_codec_ids[]; int ff_cbs_init(CodedBitstreamContext **ctx, enum AVCodecID codec_id, void *log_ctx); +/** + * Reset all internal state in a context. + */ +void ff_cbs_flush(CodedBitstreamContext *ctx); + /** * Close a context and free all internal state. */ diff --git a/libavcodec/cbs_internal.h b/libavcodec/cbs_internal.h index d991e1eedf..faa847aad3 100644 --- a/libavcodec/cbs_internal.h +++ b/libavcodec/cbs_internal.h @@ -117,6 +117,9 @@ typedef struct CodedBitstreamType { int (*assemble_fragment)(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag); + // Reset the codec internal state. + void (*flush)(CodedBitstreamContext *ctx); + // Free the codec internal state. void (*close)(CodedBitstreamContext *ctx); } CodedBitstreamType;