From 515b6419ca51f036a2d6dd42841a4be07147f865 Mon Sep 17 00:00:00 2001 From: James Almer Date: Thu, 24 Sep 2020 17:57:42 -0300 Subject: [PATCH] avcodec/cbs: add a flush callback to CodedBitstreamType Used to reset the codec's private internal state. Signed-off-by: James Almer --- libavcodec/cbs.c | 6 ++++++ libavcodec/cbs.h | 5 +++++ libavcodec/cbs_internal.h | 3 +++ 3 files changed, 14 insertions(+) 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;