From 08a06a9d6d1c3c2089a32c0b4645176266ca6630 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Sat, 15 Mar 2025 07:59:47 +0100
Subject: [PATCH 43/77] avcodec/mpegvideo: Move bit_rate field to
 MSMP4DecContext

Also make it an int as that is all MSMP4 needs.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/mpegvideo.h  |  1 -
 libavcodec/msmpeg4dec.c | 21 ++++++++++++++-------
 libavcodec/msmpeg4dec.h |  1 +
 libavcodec/wmv2dec.c    |  8 ++++----
 4 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index ed9224d2fe..136b9b18a7 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -95,7 +95,6 @@ typedef struct MpegEncContext {
     void *private_ctx;
     /* the following parameters must be initialized before encoding */
     int width, height;///< picture size. must be a multiple of 16
-    int64_t bit_rate; ///< wanted bit rate
     enum OutputFormat out_format; ///< output format
     int h263_pred;    ///< use MPEG-4/H.263 ac/dc predictions
     int pb_frame;     ///< PB-frame mode (0 = none, 1 = base, 2 = improved)
diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c
index b7ff6126b1..aac12882d7 100644
--- a/libavcodec/msmpeg4dec.c
+++ b/libavcodec/msmpeg4dec.c
@@ -389,6 +389,7 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx)
 
 int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
 {
+    MSMP4DecContext *const ms = mpv_to_msmpeg4(s);
     int code;
 
     // at minimum one bit per macroblock is required at least in a valid frame,
@@ -457,8 +458,10 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
         case MSMP4_WMV1:
             ff_msmpeg4_decode_ext_header(s, (2+5+5+17+7)/8);
 
-            if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
-            else                           s->per_mb_rl_table= 0;
+            if (ms->bit_rate > MBAC_BITRATE)
+                s->per_mb_rl_table = get_bits1(&s->gb);
+            else
+                s->per_mb_rl_table = 0;
 
             if(!s->per_mb_rl_table){
                 s->rl_chroma_table_index = decode012(&s->gb);
@@ -503,8 +506,10 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
         case MSMP4_WMV1:
             s->use_skip_mb_code = get_bits1(&s->gb);
 
-            if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
-            else                           s->per_mb_rl_table= 0;
+            if (ms->bit_rate > MBAC_BITRATE)
+                s->per_mb_rl_table = get_bits1(&s->gb);
+            else
+                s->per_mb_rl_table = 0;
 
             if(!s->per_mb_rl_table){
                 s->rl_table_index = decode012(&s->gb);
@@ -514,7 +519,8 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
             s->dc_table_index = get_bits1(&s->gb);
 
             s->mv_table_index = get_bits1(&s->gb);
-            s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE);
+            s->inter_intra_pred = s->width*s->height < 320*240 &&
+                                  ms->bit_rate <= II_BITRATE;
             break;
         }
 
@@ -534,7 +540,7 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
             s->no_rounding = 0;
         }
     }
-    ff_dlog(s->avctx, "%d %"PRId64" %d %d %d\n", s->pict_type, s->bit_rate,
+    ff_dlog(s->avctx, "%d %d %d %d %d\n", s->pict_type, ms->bit_rate,
             s->inter_intra_pred, s->width, s->height);
 
     s->esc3_level_length= 0;
@@ -545,13 +551,14 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
 
 int ff_msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size)
 {
+    MSMP4DecContext *const ms = mpv_to_msmpeg4(s);
     int left= buf_size*8 - get_bits_count(&s->gb);
     int length = s->msmpeg4_version >= MSMP4_V3 ? 17 : 16;
     /* the alt_bitstream reader could read over the end so we need to check it */
     if(left>=length && left<length+8)
     {
         skip_bits(&s->gb, 5); /* fps */
-        s->bit_rate= get_bits(&s->gb, 11)*1024;
+        ms->bit_rate = get_bits(&s->gb, 11) * 1024;
         if (s->msmpeg4_version >= MSMP4_V3)
             s->flipflop_rounding= get_bits1(&s->gb);
         else
diff --git a/libavcodec/msmpeg4dec.h b/libavcodec/msmpeg4dec.h
index d024674f0d..47c4495f1d 100644
--- a/libavcodec/msmpeg4dec.h
+++ b/libavcodec/msmpeg4dec.h
@@ -30,6 +30,7 @@
 
 typedef struct MSMP4DecContext {
     MpegEncContext m;
+    int bit_rate;
 } MSMP4DecContext;
 
 static inline MSMP4DecContext *mpv_to_msmpeg4(MpegEncContext *s)
diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c
index 5ab619c2ca..02c3dc2535 100644
--- a/libavcodec/wmv2dec.c
+++ b/libavcodec/wmv2dec.c
@@ -177,7 +177,7 @@ static int decode_ext_header(WMV2DecContext *w)
     init_get_bits(&gb, s->avctx->extradata, 32);
 
     fps                 = get_bits(&gb, 5);
-    s->bit_rate         = get_bits(&gb, 11) * 1024;
+    w->ms.bit_rate      = get_bits(&gb, 11) * 1024;
     w->mspel_bit        = get_bits1(&gb);
     s->loop_filter      = get_bits1(&gb);
     w->abt_flag         = get_bits1(&gb);
@@ -193,10 +193,10 @@ static int decode_ext_header(WMV2DecContext *w)
 
     if (s->avctx->debug & FF_DEBUG_PICT_INFO)
         av_log(s->avctx, AV_LOG_DEBUG,
-               "fps:%d, br:%"PRId64", qpbit:%d, abt_flag:%d, j_type_bit:%d, "
+               "fps:%d, br:%d, qpbit:%d, abt_flag:%d, j_type_bit:%d, "
                "tl_mv_flag:%d, mbrl_bit:%d, code:%d, loop_filter:%d, "
                "slices:%d\n",
-               fps, s->bit_rate, w->mspel_bit, w->abt_flag, w->j_type_bit,
+               fps, w->ms.bit_rate, w->mspel_bit, w->abt_flag, w->j_type_bit,
                w->top_left_mv_flag, w->per_mb_rl_bit, code, s->loop_filter,
                code);
     return 0;
@@ -313,7 +313,7 @@ int ff_wmv2_decode_secondary_picture_header(MpegEncContext *s)
         s->dc_table_index   = get_bits1(&s->gb);
         s->mv_table_index   = get_bits1(&s->gb);
 
-        s->inter_intra_pred = 0; // (s->width * s->height < 320 * 240 && s->bit_rate <= II_BITRATE);
+        s->inter_intra_pred = 0; // (s->width * s->height < 320 * 240 && w->ms.bit_rate <= II_BITRATE);
         s->no_rounding     ^= 1;
 
         if (s->avctx->debug & FF_DEBUG_PICT_INFO) {
-- 
2.45.2