From 925461e15f60a5b44fc59acfc790fcb5a6e9e12f Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Tue, 18 Mar 2025 18:32:18 +0100
Subject: [PATCH 59/77] avcodec/mpeg4videoenc: Move initializations before
 ff_mpv_encode_init()

This avoids relying on ff_update_duplicate_context() to copy
these fields to the slice contexts.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/ituh263enc.c    |  9 +++++----
 libavcodec/mpeg4videoenc.c | 26 +++++++++++++-------------
 2 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c
index 5a2af09b18..876e178070 100644
--- a/libavcodec/ituh263enc.c
+++ b/libavcodec/ituh263enc.c
@@ -826,6 +826,11 @@ av_cold void ff_h263_encode_init(MPVMainEncContext *const m)
 
     s->me.mv_penalty = ff_h263_get_mv_penalty(); // FIXME exact table for MSMPEG4 & H.263+
 
+    ff_h263dsp_init(&s->h263dsp);
+
+    if (s->codec_id == AV_CODEC_ID_MPEG4)
+        return;
+
     s->intra_ac_vlc_length     =s->inter_ac_vlc_length     = uni_h263_inter_rl_len;
     s->intra_ac_vlc_last_length=s->inter_ac_vlc_last_length= uni_h263_inter_rl_len + 128*64;
     if(s->h263_aic){
@@ -842,8 +847,6 @@ av_cold void ff_h263_encode_init(MPVMainEncContext *const m)
 
     // use fcodes >1 only for MPEG-4 & H.263 & H.263+ FIXME
     switch(s->codec_id){
-    case AV_CODEC_ID_MPEG4:
-        break;
     case AV_CODEC_ID_H263P:
         if(s->umvplus)
             m->fcode_tab = umv_fcode_tab + MAX_MV;
@@ -875,8 +878,6 @@ av_cold void ff_h263_encode_init(MPVMainEncContext *const m)
         m->encode_picture_header = h263_encode_picture_header;
     if (!s->encode_mb)
         s->encode_mb = h263_encode_mb;
-
-    ff_h263dsp_init(&s->h263dsp);
 }
 
 void ff_h263_encode_mba(MpegEncContext *s)
diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c
index 4c31e7e9c8..ddb6958229 100644
--- a/libavcodec/mpeg4videoenc.c
+++ b/libavcodec/mpeg4videoenc.c
@@ -1305,6 +1305,19 @@ static av_cold int encode_init(AVCodecContext *avctx)
     m->encode_picture_header = mpeg4_encode_picture_header;
     s->encode_mb             = mpeg4_encode_mb;
 
+    m->fcode_tab                = fcode_tab + MAX_MV;
+
+    s->min_qcoeff               = -2048;
+    s->max_qcoeff               = 2047;
+    s->intra_ac_vlc_length      = uni_mpeg4_intra_rl_len;
+    s->intra_ac_vlc_last_length = uni_mpeg4_intra_rl_len + 128 * 64;
+    s->inter_ac_vlc_length      = uni_mpeg4_inter_rl_len;
+    s->inter_ac_vlc_last_length = uni_mpeg4_inter_rl_len + 128 * 64;
+    s->luma_dc_vlc_length       = uni_DCtab_lum_len;
+    s->ac_esc_length            = 7 + 2 + 1 + 6 + 1 + 12 + 1;
+    s->y_dc_scale_table         = ff_mpeg4_y_dc_scale_table;
+    s->c_dc_scale_table         = ff_mpeg4_c_dc_scale_table;
+
     ff_qpeldsp_init(&s->qdsp);
     if ((ret = ff_mpv_encode_init(avctx)) < 0)
         return ret;
@@ -1322,19 +1335,6 @@ static av_cold int encode_init(AVCodecContext *avctx)
 
     m4->time_increment_bits     = av_log2(avctx->time_base.den - 1) + 1;
 
-    m->fcode_tab                = fcode_tab + MAX_MV;
-
-    s->min_qcoeff               = -2048;
-    s->max_qcoeff               = 2047;
-    s->intra_ac_vlc_length      = uni_mpeg4_intra_rl_len;
-    s->intra_ac_vlc_last_length = uni_mpeg4_intra_rl_len + 128 * 64;
-    s->inter_ac_vlc_length      = uni_mpeg4_inter_rl_len;
-    s->inter_ac_vlc_last_length = uni_mpeg4_inter_rl_len + 128 * 64;
-    s->luma_dc_vlc_length       = uni_DCtab_lum_len;
-    s->ac_esc_length            = 7 + 2 + 1 + 6 + 1 + 12 + 1;
-    s->y_dc_scale_table         = ff_mpeg4_y_dc_scale_table;
-    s->c_dc_scale_table         = ff_mpeg4_c_dc_scale_table;
-
     if (s->avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
         s->avctx->extradata = av_malloc(1024);
         if (!s->avctx->extradata)
-- 
2.45.2