This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

The following commit(s) were added to refs/heads/master by this push:
     new 502046abcf avcodec/vvc: defer output errors until the current frame is 
submitted
502046abcf is described below

commit 502046abcfcbd4148fd60b442cc96a1bcad62fae
Author:     Daniel Campos Ramos <[email protected]>
AuthorDate: Fri Oct 23 04:47:50 2026 +0000
Commit:     frankplow <[email protected]>
CommitDate: Sat Oct 31 09:02:36 2026 +0000

    avcodec/vvc: defer output errors until the current frame is submitted
    
    An allocation failure in av_frame_ref() during output aborts
    frame_start() before the current picture is submitted. In low delay mode
    this loses the current picture as well as the output picture. With
    delayed frames the next packet copies the preceding frame context's DPB,
    restoring the failed picture's output flag while still losing the
    current picture.
    
    Retain the output error in the frame context and report it when that
    frame is collected. This preserves the updated DPB and decodes the
    current picture, while dropping only the picture whose export failed.
    
    Reproduced on unmodified master by failing the buffer-reference
    allocation inside ff_vvc_output_frame(), then comparing the remaining
    picture hashes against a successful decode, with one and four threads
    and both delay modes.
    
    Fixes: #25379
    Signed-off-by: Daniel Campos Ramos <[email protected]>
    Assisted-by: gpt-6-astra via Codex
---
 libavcodec/vvc/dec.c | 10 ++++++++--
 libavcodec/vvc/dec.h |  1 +
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/libavcodec/vvc/dec.c b/libavcodec/vvc/dec.c
index c1326fe17c..8ed9e1e4b8 100644
--- a/libavcodec/vvc/dec.c
+++ b/libavcodec/vvc/dec.c
@@ -828,8 +828,12 @@ static int frame_start(VVCContext *s, VVCFrameContext *fc, 
SliceContext *sc)
 
     av_frame_unref(fc->output_frame);
 
-    if ((ret = ff_vvc_output_frame(s, fc, 
fc->output_frame,rsh->sh_no_output_of_prior_pics_flag, 0)) < 0)
-        goto fail;
+    /* Do not abort the current picture when outputting an earlier one
+     * fails: decode and submit it, then report the error afterwards. */
+    fc->output_error = ff_vvc_output_frame(s, fc, fc->output_frame,
+                                          
rsh->sh_no_output_of_prior_pics_flag, 0);
+    if (fc->output_error < 0)
+        av_frame_unref(fc->output_frame);
 
     if ((ret = ff_vvc_frame_rpl(s, fc, sc)) < 0)
         goto fail;
@@ -1130,6 +1134,8 @@ static int wait_delayed_frame(VVCContext *s, AVFrame 
*output, int *got_output)
 
     if (!ret) {
         ret = frame_end(s, delayed);
+        if (ret >= 0 && delayed->output_error < 0)
+            ret = delayed->output_error;
         if (ret >= 0 && delayed->output_frame->buf[0] && output) {
             av_frame_move_ref(output, delayed->output_frame);
             *got_output = 1;
diff --git a/libavcodec/vvc/dec.h b/libavcodec/vvc/dec.h
index bfb8a2e20d..7ea88c19f4 100644
--- a/libavcodec/vvc/dec.h
+++ b/libavcodec/vvc/dec.h
@@ -127,6 +127,7 @@ typedef struct VVCFrameContext {
 
     struct AVFrame *frame;
     struct AVFrame *output_frame;
+    int output_error;
 
     VVCFrameParamSets ps;
     VVCSEI sei;

-- 
To stop receiving notification emails like this one, please contact
[email protected].
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to