[FFmpeg-devel] [PATCH 2/4 v2] avcodec/cbs: allow cbs_read_fragment_content() to discard units

James Almer jamrial at gmail.com
Sun Nov 15 23:55:39 EET 2020


The caller may not need all units in a fragment in reading only scenarios. They
could in fact alter global state stored in the private CodedBitstreamType
fields in an undesirable way.
And unlike preventing decomposition of units, discarding can be done based on
parsed values within the unit.

Signed-off-by: James Almer <jamrial at gmail.com>
---
 libavcodec/cbs.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c
index c7afccd6f5..f4312d199b 100644
--- a/libavcodec/cbs.c
+++ b/libavcodec/cbs.c
@@ -202,6 +202,12 @@ static int cbs_read_fragment_content(CodedBitstreamContext *ctx,
             av_log(ctx->log_ctx, AV_LOG_VERBOSE,
                    "Decomposition unimplemented for unit %d "
                    "(type %"PRIu32").\n", i, unit->type);
+        } else if (err  == AVERROR(EAGAIN)) {
+            av_log(ctx->log_ctx, AV_LOG_VERBOSE,
+                   "Discarding unit %d "
+                   "(type %"PRIu32").\n", i, unit->type);
+            av_buffer_unref(&unit->content_ref);
+            unit->content = NULL;
         } else if (err < 0) {
             av_log(ctx->log_ctx, AV_LOG_ERROR, "Failed to read unit %d "
                    "(type %"PRIu32").\n", i, unit->type);
-- 
2.29.2



More information about the ffmpeg-devel mailing list