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

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

The following commit(s) were added to refs/heads/release/9.1 by this push:
     new 0cdc27c3ff prores_raw: don't use the proresdsp iDCT permutation
0cdc27c3ff is described below

commit 0cdc27c3ff3af2dfc5ce10ab4d2cf19d8bcf62ab
Author:     Lynne <[email protected]>
AuthorDate: Sat Nov 7 13:33:42 2026 +0800
Commit:     Lynne <[email protected]>
CommitDate: Sat Nov 7 13:53:04 2026 +0800

    prores_raw: don't use the proresdsp iDCT permutation
    
    Since 3b3be6e58f, proresdsp selects FF_IDCT_PERM_TRANSPOSE for 12 bits
    on AVX2 CPUs, to match its new SIMD idct_put. The decoder permuted its
    scan and quantization matrix with it, but only uses idct_put_bayer,
    which has no SIMD version and takes coefficients in natural order. Every
    8x8 block of a software decode on such CPUs was therefore transposed.
    
    Use the scan and quantization matrix in natural order, and drop the
    undoing of the permutation in the Vulkan hwaccel. Also remove a comment
    describing the iDCT as 12-bit, out of date since faa7c882cb.
    
    Fixes: 3b3be6e58fb07c8177ef6aa4fe28ebbb7b57eaa1
    Fixes: #25461
    Reported-by: Hyperlite-Media
    (cherry picked from commit bbcfe0aa52a0a7752404993cf86a1c9f7a3c0939)
---
 libavcodec/prores_raw.c        | 9 ++-------
 libavcodec/prores_raw.h        | 1 -
 libavcodec/vulkan_prores_raw.c | 5 +----
 3 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/libavcodec/prores_raw.c b/libavcodec/prores_raw.c
index 36c3879f73..fb43fa44e5 100644
--- a/libavcodec/prores_raw.c
+++ b/libavcodec/prores_raw.c
@@ -36,7 +36,6 @@
 #include "codec_internal.h"
 #include "decode.h"
 #include "get_bits.h"
-#include "idctdsp.h"
 #include "proresdata.h"
 #include "thread.h"
 #include "hwconfig.h"
@@ -58,12 +57,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
     s->pix_fmt = AV_PIX_FMT_NONE;
 
     ff_blockdsp_init(&s->bdsp);
-    /* Coefficients and the iDCT are 12-bit, the linearization curve then
-     * expands the result to the 16-bit linear output range. */
     ff_proresdsp_init(&s->prodsp, 12);
 
-    ff_permute_scantable(s->scan, ff_prores_interlaced_scan, 
s->prodsp.idct_permutation);
-
     return 0;
 }
 
@@ -168,7 +163,7 @@ static int decode_comp(AVCodecContext *avctx, TileContext 
*tile,
     int16_t rn_codebook = 0;
     int16_t ln_codebook = 66;
 
-    const uint8_t *scan = s->scan;
+    const uint8_t *scan = ff_prores_interlaced_scan;
     GetBitContext gb;
 
     if (component > 1)
@@ -473,7 +468,7 @@ static int decode_frame(AVCodecContext *avctx,
         memcpy(s->lin_curve, default_lin_curve, sizeof(s->lin_curve));
     }
 
-    ff_permute_scantable(s->qmat, s->prodsp.idct_permutation, qmat);
+    memcpy(s->qmat, qmat, sizeof(s->qmat));
 
     int tw16 = (w + 15) >> 4;
     s->nb_tw = (tw16 >> align) + av_popcount(~(-1 * (1 << align)) & tw16);
diff --git a/libavcodec/prores_raw.h b/libavcodec/prores_raw.h
index 1e7fee435e..86c2805c57 100644
--- a/libavcodec/prores_raw.h
+++ b/libavcodec/prores_raw.h
@@ -52,7 +52,6 @@ typedef struct ProResRAWContext {
 
     int version;
 
-    DECLARE_ALIGNED(32, uint8_t, scan)[64];
     DECLARE_ALIGNED(32, uint8_t, qmat)[64];
 
     /* 8-point combined linearization curve
diff --git a/libavcodec/vulkan_prores_raw.c b/libavcodec/vulkan_prores_raw.c
index 45936b68a4..ce2dc814aa 100644
--- a/libavcodec/vulkan_prores_raw.c
+++ b/libavcodec/vulkan_prores_raw.c
@@ -226,10 +226,7 @@ static int vk_prores_raw_end_frame(AVCodecContext *avctx)
     DecodePushData pd_decode = (DecodePushData) {
         .pkt_data = slices_buf->address,
     };
-    /* The decoder permutes the quantization matrix to match the layout
-     * expected by its IDCT, undo it here. */
-    for (int i = 0; i < 64; i++)
-        pd_decode.qmat[prr->prodsp.idct_permutation[i]] = prr->qmat[i];
+    memcpy(pd_decode.qmat, prr->qmat, sizeof(pd_decode.qmat));
     memcpy(pd_decode.lin_curve, prr->lin_curve, sizeof(pd_decode.lin_curve));
     ff_vk_shader_update_push_const(&ctx->s, exec, decode_shader,
                                    VK_SHADER_STAGE_COMPUTE_BIT,

-- 
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