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]
