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

Git pushed a commit to branch master
in repository ffmpeg.

commit 3946e577976f1e7c3e32cba1b5efb5e96535533c
Author:     Andreas Rheinhardt <[email protected]>
AuthorDate: Wed Jun 25 09:39:52 2025 +0200
Commit:     Andreas Rheinhardt <[email protected]>
CommitDate: Fri Jan 2 18:39:48 2026 +0100

    avcodec/mpegvideo: Move permutated_intra scans to {H263Dec,MPVEnc}Ctx
    
    Only used by these two.
    
    Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/h263dec.c       |  5 +++++
 libavcodec/h263dec.h       |  3 +++
 libavcodec/ituh263dec.c    |  4 ++--
 libavcodec/ituh263enc.c    |  6 ++++++
 libavcodec/mpeg4videodec.c | 30 ++++++++++++++++--------------
 libavcodec/mpeg4videoenc.c |  4 ++--
 libavcodec/mpegvideo.c     |  4 ----
 libavcodec/mpegvideo.h     |  3 ---
 libavcodec/mpegvideoenc.h  |  3 +++
 libavcodec/msmpeg4.c       |  8 +++++---
 libavcodec/msmpeg4.h       |  4 +++-
 libavcodec/msmpeg4dec.c    |  7 ++++---
 libavcodec/msmpeg4enc.c    |  3 ++-
 13 files changed, 51 insertions(+), 33 deletions(-)

diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index b4c8aa38f5..23fd16b726 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -108,6 +108,11 @@ av_cold int ff_h263_decode_init(AVCodecContext *avctx)
     s->y_dc_scale_table =
     s->c_dc_scale_table = ff_mpeg1_dc_scale_table;
 
+    ff_permute_scantable(h->permutated_intra_h_scantable, 
ff_alternate_horizontal_scan,
+                         s->idsp.idct_permutation);
+    ff_permute_scantable(h->permutated_intra_v_scantable, 
ff_alternate_vertical_scan,
+                         s->idsp.idct_permutation);
+
     ff_mpv_unquantize_init(&unquant_dsp_ctx,
                            avctx->flags & AV_CODEC_FLAG_BITEXACT, 0);
     // dct_unquantize defaults for H.263;
diff --git a/libavcodec/h263dec.h b/libavcodec/h263dec.h
index 4c25a833cf..ab647f5224 100644
--- a/libavcodec/h263dec.h
+++ b/libavcodec/h263dec.h
@@ -97,6 +97,9 @@ typedef struct H263DecContext {
 
     GetBitContext last_resync_gb;    ///< used to search for the next resync 
marker
 
+    uint8_t permutated_intra_h_scantable[64];
+    uint8_t permutated_intra_v_scantable[64];
+
     DECLARE_ALIGNED_32(int16_t, block)[6][64];
 } H263DecContext;
 
diff --git a/libavcodec/ituh263dec.c b/libavcodec/ituh263dec.c
index a1472ce0a0..53ead30c48 100644
--- a/libavcodec/ituh263dec.c
+++ b/libavcodec/ituh263dec.c
@@ -542,9 +542,9 @@ static int h263_decode_block(H263DecContext *const h, 
int16_t block[64],
         rl = &ff_rl_intra_aic;
         if (h->c.ac_pred) {
             if (h->c.h263_aic_dir)
-                scan_table = h->c.permutated_intra_v_scantable; /* left */
+                scan_table = h->permutated_intra_v_scantable; /* left */
             else
-                scan_table = h->c.permutated_intra_h_scantable; /* top */
+                scan_table = h->permutated_intra_h_scantable; /* top */
         }
     } else if (h->c.mb_intra) {
         /* DC coef */
diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c
index 85008443da..56259783b0 100644
--- a/libavcodec/ituh263enc.c
+++ b/libavcodec/ituh263enc.c
@@ -38,6 +38,7 @@
 #include "codec_internal.h"
 #include "mpegvideo.h"
 #include "flvenc.h"
+#include "mpegvideodata.h"
 #include "mpegvideoenc.h"
 #include "h263.h"
 #include "h263enc.h"
@@ -824,6 +825,11 @@ av_cold void ff_h263_encode_init(MPVMainEncContext *const 
m)
 
     ff_h263dsp_init(&s->c.h263dsp);
 
+    ff_permute_scantable(s->permutated_intra_h_scantable, 
ff_alternate_horizontal_scan,
+                         s->c.idsp.idct_permutation);
+    ff_permute_scantable(s->permutated_intra_v_scantable, 
ff_alternate_vertical_scan,
+                         s->c.idsp.idct_permutation);
+
     if (s->c.codec_id == AV_CODEC_ID_MPEG4)
         return;
 
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index e4a765d5ec..3d20f7c389 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -1425,9 +1425,9 @@ static inline int mpeg4_decode_block(Mpeg4DecContext 
*ctx, int16_t *block,
         }
         if (h->c.ac_pred) {
             if (dc_pred_dir == 0)
-                scan_table = h->c.permutated_intra_v_scantable;  /* left */
+                scan_table = h->permutated_intra_v_scantable;  /* left */
             else
-                scan_table = h->c.permutated_intra_h_scantable;  /* top */
+                scan_table = h->permutated_intra_h_scantable;  /* top */
         } else {
             scan_table = h->c.intra_scantable.permutated;
         }
@@ -3232,14 +3232,14 @@ static int decode_vop_header(Mpeg4DecContext *ctx, 
GetBitContext *gb,
 
     if (h->c.alternate_scan) {
         ff_init_scantable(h->c.idsp.idct_permutation, &h->c.intra_scantable,   
ff_alternate_vertical_scan);
-        ff_permute_scantable(h->c.permutated_intra_h_scantable, 
ff_alternate_vertical_scan,
+        ff_permute_scantable(h->permutated_intra_h_scantable, 
ff_alternate_vertical_scan,
                              h->c.idsp.idct_permutation);
     } else {
         ff_init_scantable(h->c.idsp.idct_permutation, &h->c.intra_scantable,   
ff_zigzag_direct);
-        ff_permute_scantable(h->c.permutated_intra_h_scantable, 
ff_alternate_horizontal_scan,
+        ff_permute_scantable(h->permutated_intra_h_scantable, 
ff_alternate_horizontal_scan,
                              h->c.idsp.idct_permutation);
     }
-    ff_permute_scantable(h->c.permutated_intra_v_scantable, 
ff_alternate_vertical_scan,
+    ff_permute_scantable(h->permutated_intra_v_scantable, 
ff_alternate_vertical_scan,
                          h->c.idsp.idct_permutation);
 
     if (h->c.pict_type == AV_PICTURE_TYPE_S) {
@@ -3609,21 +3609,23 @@ static av_cold void permute_quant_matrix(uint16_t 
matrix[64],
 }
 
 static av_cold void switch_to_xvid_idct(AVCodecContext *const avctx,
-                                        MpegEncContext *const s)
+                                        H263DecContext *const h)
 {
     uint8_t old_permutation[64];
 
-    memcpy(old_permutation, s->idsp.idct_permutation, sizeof(old_permutation));
+    memcpy(old_permutation, h->c.idsp.idct_permutation, 
sizeof(old_permutation));
 
     avctx->idct_algo = FF_IDCT_XVID;
-    ff_mpv_idct_init(s);
-    ff_permute_scantable(s->permutated_intra_h_scantable,
-                         s->alternate_scan ? ff_alternate_vertical_scan : 
ff_alternate_horizontal_scan,
-                         s->idsp.idct_permutation);
+    ff_mpv_idct_init(&h->c);
+    ff_permute_scantable(h->permutated_intra_h_scantable,
+                         h->c.alternate_scan ? ff_alternate_vertical_scan : 
ff_alternate_horizontal_scan,
+                         h->c.idsp.idct_permutation);
+    ff_permute_scantable(h->permutated_intra_v_scantable, 
ff_alternate_vertical_scan,
+                         h->c.idsp.idct_permutation);
 
     // Normal (i.e. non-studio) MPEG-4 does not use the chroma matrices.
-    permute_quant_matrix(s->inter_matrix, s->idsp.idct_permutation, 
old_permutation);
-    permute_quant_matrix(s->intra_matrix, s->idsp.idct_permutation, 
old_permutation);
+    permute_quant_matrix(h->c.inter_matrix, h->c.idsp.idct_permutation, 
old_permutation);
+    permute_quant_matrix(h->c.intra_matrix, h->c.idsp.idct_permutation, 
old_permutation);
 }
 
 void ff_mpeg4_workaround_bugs(AVCodecContext *avctx)
@@ -3735,7 +3737,7 @@ void ff_mpeg4_workaround_bugs(AVCodecContext *avctx)
 
     if (ctx->xvid_build >= 0 &&
         avctx->idct_algo == FF_IDCT_AUTO && !h->c.studio_profile) {
-        switch_to_xvid_idct(avctx, &h->c);
+        switch_to_xvid_idct(avctx, h);
     }
 }
 
diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c
index ced4ad24e7..a10da6af82 100644
--- a/libavcodec/mpeg4videoenc.c
+++ b/libavcodec/mpeg4videoenc.c
@@ -223,7 +223,7 @@ static inline int decide_ac_pred(MPVEncContext *const s, 
int16_t block[6][64],
                     ac_val1[i + 8] = level;
                 }
             }
-            st[n] = s->c.permutated_intra_h_scantable;
+            st[n] = s->permutated_intra_h_scantable;
         } else {
             const int xy = s->c.mb_x - 1 + s->c.mb_y * s->c.mb_stride;
             /* left prediction */
@@ -245,7 +245,7 @@ static inline int decide_ac_pred(MPVEncContext *const s, 
int16_t block[6][64],
                     ac_val1[i + 8] = block[n][s->c.idsp.idct_permutation[i]];
                 }
             }
-            st[n] = s->c.permutated_intra_v_scantable;
+            st[n] = s->permutated_intra_v_scantable;
         }
 
         for (i = 63; i > 0; i--)  // FIXME optimize
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 7ca2c8f701..09e5a96239 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -94,10 +94,6 @@ av_cold void ff_mpv_idct_init(MpegEncContext *s)
         ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable, 
ff_zigzag_direct);
         ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, 
ff_zigzag_direct);
     }
-    ff_permute_scantable(s->permutated_intra_h_scantable, 
ff_alternate_horizontal_scan,
-                         s->idsp.idct_permutation);
-    ff_permute_scantable(s->permutated_intra_v_scantable, 
ff_alternate_vertical_scan,
-                         s->idsp.idct_permutation);
 }
 
 av_cold int ff_mpv_init_duplicate_contexts(MpegEncContext *s)
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 6aff5fbcd0..c9ec79cfad 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -79,9 +79,6 @@ typedef struct MpegEncContext {
     /* WARNING: changes above this line require updates to hardcoded
      *          offsets used in ASM. */
 
-    uint8_t permutated_intra_h_scantable[64];
-    uint8_t permutated_intra_v_scantable[64];
-
     struct AVCodecContext *avctx;
     /* The following pointer is intended for codecs sharing code
      * between decoder and encoder and in need of a common context to do so. */
diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h
index 4366e78f90..9003d017e5 100644
--- a/libavcodec/mpegvideoenc.h
+++ b/libavcodec/mpegvideoenc.h
@@ -193,6 +193,9 @@ typedef struct MPVEncContext {
 
     int intra_penalty;
 
+    uint8_t permutated_intra_h_scantable[64];
+    uint8_t permutated_intra_v_scantable[64];
+
     DECLARE_ALIGNED_32(int16_t, blocks)[2][12][64]; // for HQ mode we need to 
keep the best block
 } MPVEncContext;
 
diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c
index 386ee83f31..fed255989e 100644
--- a/libavcodec/msmpeg4.c
+++ b/libavcodec/msmpeg4.c
@@ -118,7 +118,9 @@ static av_cold void msmpeg4_common_init_static(void)
     init_h263_dc_for_msmpeg4();
 }
 
-av_cold void ff_msmpeg4_common_init(MpegEncContext *s)
+av_cold void ff_msmpeg4_common_init(MPVContext *const s,
+                                    uint8_t permutated_intra_h_scantable[64],
+                                    uint8_t permutated_intra_v_scantable[64])
 {
     static AVOnce init_static_once = AV_ONCE_INIT;
 
@@ -148,9 +150,9 @@ av_cold void ff_msmpeg4_common_init(MpegEncContext *s)
         s->c_dc_scale_table= ff_wmv1_c_dc_scale_table;
         ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable,   
ff_wmv1_scantable[1]);
         ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable,   
ff_wmv1_scantable[0]);
-        ff_permute_scantable(s->permutated_intra_h_scantable, 
ff_wmv1_scantable[2],
+        ff_permute_scantable(permutated_intra_h_scantable, 
ff_wmv1_scantable[2],
                              s->idsp.idct_permutation);
-        ff_permute_scantable(s->permutated_intra_v_scantable, 
ff_wmv1_scantable[3],
+        ff_permute_scantable(permutated_intra_v_scantable, 
ff_wmv1_scantable[3],
                              s->idsp.idct_permutation);
         break;
     }
diff --git a/libavcodec/msmpeg4.h b/libavcodec/msmpeg4.h
index b918028fe1..69299c0004 100644
--- a/libavcodec/msmpeg4.h
+++ b/libavcodec/msmpeg4.h
@@ -31,7 +31,9 @@
 
 #define DC_MAX 119
 
-void ff_msmpeg4_common_init(MpegEncContext *s);
+void ff_msmpeg4_common_init(MPVContext *const s,
+                            uint8_t permutated_intra_h_scantable[64],
+                            uint8_t permutated_intra_v_scantable[64]);
 int ff_msmpeg4_coded_block_pred(MpegEncContext * s, int n,
                                 uint8_t **coded_block_ptr);
 
diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c
index f2ab99ecb5..23f302dee3 100644
--- a/libavcodec/msmpeg4dec.c
+++ b/libavcodec/msmpeg4dec.c
@@ -655,9 +655,9 @@ int ff_msmpeg4_decode_block(MSMP4DecContext *const ms, 
int16_t * block,
         }
         if (h->c.ac_pred) {
             if (dc_pred_dir == 0)
-                scan_table = h->c.permutated_intra_v_scantable; /* left */
+                scan_table = h->permutated_intra_v_scantable; /* left */
             else
-                scan_table = h->c.permutated_intra_h_scantable; /* top */
+                scan_table = h->permutated_intra_h_scantable; /* top */
         } else {
             scan_table = h->c.intra_scantable.permutated;
         }
@@ -849,7 +849,8 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx)
 
     h->decode_header = msmpeg4_decode_picture_header;
 
-    ff_msmpeg4_common_init(&h->c);
+    ff_msmpeg4_common_init(&h->c, h->permutated_intra_h_scantable,
+                           h->permutated_intra_v_scantable);
 
     switch (h->c.msmpeg4_version) {
     case MSMP4_V1:
diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c
index 874e0c1f2b..6141c63e1c 100644
--- a/libavcodec/msmpeg4enc.c
+++ b/libavcodec/msmpeg4enc.c
@@ -675,7 +675,8 @@ av_cold void ff_msmpeg4_encode_init(MPVMainEncContext 
*const m)
     MPVEncContext *const s = &m->s;
     static AVOnce init_static_once = AV_ONCE_INIT;
 
-    ff_msmpeg4_common_init(&s->c);
+    ff_msmpeg4_common_init(&s->c, s->permutated_intra_h_scantable,
+                           s->permutated_intra_v_scantable);
 
     if (s->c.msmpeg4_version <= MSMP4_WMV1) {
         m->encode_picture_header = msmpeg4_encode_picture_header;

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

Reply via email to