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

Git pushed a commit to branch release/7.1
in repository ffmpeg.

commit 07e33294582a42bf793d4b92c57abbdf084045bd
Author:     Frank Plowman <[email protected]>
AuthorDate: Tue Jul 29 21:42:26 2025 +0100
Commit:     Frank Plowman <[email protected]>
CommitDate: Wed Jun 10 15:12:23 2026 +0100

    lavc/vvc: Mark SPS used if multiple CLVSSs use it
    
    Consider the following sequence of NALUs (with some PPSs etc. omitted
    for brevity):
    1. SPS (ID=0, content=A)
    2. IDR (SPS=0)
    3. IDR (SPS=0)
    4. SPS (ID=0, content=B)
    5. TRAIL (SPS=0)
    
    When decode_sps is called for NALU 3., ps->sps_id_used is cleared as
    IDRs are one way of forming a CLVSS.  Then, old_sps is non-NULL
    containing the result of calling decode_sps for NALU 2.  We haven't
    received any SPSs between NALUs 2. and 3., therefore old_sps and rsps
    are identical and the function returns.  The issue is that, at this
    point, ps->sps_id_used is still zero despite the SPS being used for IDR
    3.  This results in the check for conflicting SPSs not working properly
    when decode_sps is called for NALU 5., allowing prediction between
    pictures with different SPSs and probably all sorts of other
    shenanigans.
    
    Patch addresses the problem outlined above by also setting
    ps->sps_id_used in the early return case.
    
    (cherry picked from commit f82748d5e0320e33d2bc276517467bcf44b19ac4)
---
 libavcodec/vvc/ps.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libavcodec/vvc/ps.c b/libavcodec/vvc/ps.c
index 032cc3e853..cbbb7eb66f 100644
--- a/libavcodec/vvc/ps.c
+++ b/libavcodec/vvc/ps.c
@@ -239,9 +239,10 @@ static int decode_sps(VVCParamSets *ps, const H266RawSPS 
*rsps, void *log_ctx, i
     }
 
     if (old_sps) {
-        if (old_sps->r == rsps || !memcmp(old_sps->r, rsps, 
sizeof(*old_sps->r)))
+        if (old_sps->r == rsps || !memcmp(old_sps->r, rsps, 
sizeof(*old_sps->r))) {
+            ps->sps_id_used |= (1 << sps_id);
             return 0;
-        else if (ps->sps_id_used & (1 << sps_id))
+        } else if (ps->sps_id_used & (1 << sps_id))
             return AVERROR_INVALIDDATA;
     }
 

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to