]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/cbs: allow cbs_read_fragment_content() to skip decomposition of units
authorJames Almer <jamrial@gmail.com>
Sun, 15 Nov 2020 21:55:39 +0000 (18:55 -0300)
committerJames Almer <jamrial@gmail.com>
Mon, 4 Jan 2021 19:28:29 +0000 (16:28 -0300)
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.
With this change, unit decomposition can be skipped based on parsed values
within the unit.

Signed-off-by: James Almer <jamrial@gmail.com>
libavcodec/cbs.c

index d7efac5b930d05010fd4b919271cf6c2bb26e548..ecf22b3fdbd3f76ea0dfe68ed05ae1352b83b000 100644 (file)
@@ -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,
+                   "Skipping decomposition of 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);