On 10/24/2022 11:06 AM, Thomas Siedel wrote:
+static int combine_au(AVCodecParserContext *ctx, AVCodecContext *avctx,
+                      const uint8_t **buf, int *buf_size)
+{

This is being called only when you first assembled AUs from what's assumed to be raw input. When PARSER_FLAG_COMPLETE_FRAMES is set, it should also parse the AU for bitstream information.

+    VVCParserContext *s = ctx->priv_data;
+    CodedBitstreamFragment *pu = &s->picture_unit;
+    int ret;
+
+    s->cbc->log_ctx = avctx;
+
+    if (avctx->extradata_size && !s->parsed_extradata) {
+        s->parsed_extradata = 1;
+
+        if ((ret = ff_cbs_read(s->cbc, pu, avctx->extradata, 
avctx->extradata_size)) < 0)

ff_cbs_read_extradata_from_codec()

+            av_log(avctx, AV_LOG_WARNING, "Failed to parse extradata.\n");
+
+        ff_cbs_fragment_reset(pu);
+    }
+    av_packet_unref(&s->last_au);
+    ret = parse_nal_units(ctx, *buf, *buf_size, avctx);
+    if (ret == 0) {
+        if (s->last_au.size) {
+            *buf = s->last_au.data;
+            *buf_size = s->last_au.size;
+        } else {
+            //no output
+            ret = 1;
+        }
+    }
+    s->cbc->log_ctx = NULL;
+    return ret;
+}
+
+static int vvc_parser_parse(AVCodecParserContext *ctx, AVCodecContext *avctx,
+                      const uint8_t **poutbuf, int *poutbuf_size,
+                      const uint8_t *buf, int buf_size)
+{
+    int next;
+    VVCParserContext *s = ctx->priv_data;
+    ParseContext *pc = &s->pc;
+
+    if (avctx->extradata && !s->parsed_extradata) {
+        av_log(avctx, AV_LOG_INFO, "extra data is not supported yet.\n");
+        return AVERROR_PATCHWELCOME;
+    }
+
+    if (ctx->flags & PARSER_FLAG_COMPLETE_FRAMES) {
+        next = buf_size;
+    } else {
+        int ret, flush = !buf_size;
+        next = find_frame_end(ctx, buf, buf_size);
+        if (ff_combine_frame(pc, next, &buf, &buf_size) < 0)
+            goto no_out;
+        ret = combine_au(ctx, avctx, &buf, &buf_size);
+        if (ret > 0 && flush) {
+            buf_size = 0;
+            ret = combine_au(ctx, avctx, &buf, &buf_size);
+        }
+        if (ret != 0) {
+            buf_size = next;
+            goto no_out;
+        }
+    }
+    *poutbuf      = buf;
+    *poutbuf_size = buf_size;
+    return next;
+no_out:
+    *poutbuf      = NULL;
+    *poutbuf_size = 0;
+    return buf_size;
+}
_______________________________________________
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".

Reply via email to