From a28b4480676c75333b84f95f450c6e2d1efe9e64 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Sat, 15 Mar 2025 07:25:15 +0100
Subject: [PATCH 40/77] avcodec/mpegvideoenc: Add bit_rate to MPVMainEncContext

Use it instead of the MpegEncContext field which will
be removed soon.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/mpeg12enc.c     |  2 +-
 libavcodec/mpegvideo_enc.c |  2 +-
 libavcodec/mpegvideoenc.h  |  1 +
 libavcodec/msmpeg4enc.c    | 15 ++++++++++-----
 libavcodec/ratecontrol.c   | 16 ++++++++--------
 libavcodec/snowenc.c       |  2 +-
 libavcodec/wmv2enc.c       |  4 ++--
 7 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c
index 43addcfda9..ae87f28d66 100644
--- a/libavcodec/mpeg12enc.c
+++ b/libavcodec/mpeg12enc.c
@@ -198,7 +198,7 @@ static void mpeg1_encode_sequence_header(MPEG12EncContext *mpeg12)
     else
         /* VBV calculation: Scaled so that a VCD has the proper
          * VBV size of 40 kilobytes */
-        vbv_buffer_size = av_rescale_rnd(s->bit_rate, 20, 1151929 / 2, AV_ROUND_ZERO) * 8 * 1024;
+        vbv_buffer_size = av_rescale_rnd(mpeg12->mpeg.bit_rate, 20, 1151929 / 2, AV_ROUND_ZERO) * 8 * 1024;
     vbv_buffer_size = (vbv_buffer_size + 16383) / 16384;
 
     put_sbits(&s->pb, 18, v);
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index cb1cf972d8..116c974098 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -449,7 +449,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
 
     avctx->bits_per_raw_sample = av_clip(avctx->bits_per_raw_sample, 0, 8);
 
-    s->bit_rate = avctx->bit_rate;
+    m->bit_rate = avctx->bit_rate;
     s->width    = avctx->width;
     s->height   = avctx->height;
     if (avctx->gop_size > 600 &&
diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h
index 18741e9c22..57b91d169a 100644
--- a/libavcodec/mpegvideoenc.h
+++ b/libavcodec/mpegvideoenc.h
@@ -87,6 +87,7 @@ typedef struct MPVMainEncContext {
     int (*encode_picture_header)(struct MPVMainEncContext *m);
 
     /* bit rate control */
+    int64_t bit_rate;
     int64_t total_bits;
     int frame_bits;                ///< bits used for the current frame
     int header_bits;
diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c
index 9e58a91a80..e5501e5e32 100644
--- a/libavcodec/msmpeg4enc.c
+++ b/libavcodec/msmpeg4enc.c
@@ -30,6 +30,8 @@
 #include <stdint.h>
 #include <string.h>
 
+#define NO_SLICE_THREADING_HERE
+
 #include "libavutil/attributes.h"
 #include "libavutil/avutil.h"
 #include "libavutil/thread.h"
@@ -222,8 +224,10 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
     s->use_skip_mb_code = 1; /* only if P-frame */
     s->per_mb_rl_table = 0;
     if (s->msmpeg4_version == MSMP4_WMV1)
-        s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE && s->pict_type==AV_PICTURE_TYPE_P);
-    ff_dlog(s->avctx, "%d %"PRId64" %d %d %d\n", s->pict_type, s->bit_rate,
+        s->inter_intra_pred = s->width * s->height < 320*240 &&
+                              m->bit_rate  <= II_BITRATE     &&
+                              s->pict_type == AV_PICTURE_TYPE_P;
+    ff_dlog(s->avctx, "%d %"PRId64" %d %d %d\n", s->pict_type, m->bit_rate,
             s->inter_intra_pred, s->width, s->height);
 
     if (s->pict_type == AV_PICTURE_TYPE_I) {
@@ -232,7 +236,7 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
 
         if (s->msmpeg4_version == MSMP4_WMV1) {
             ff_msmpeg4_encode_ext_header(s);
-            if(s->bit_rate>MBAC_BITRATE)
+            if (m->bit_rate > MBAC_BITRATE)
                 put_bits(&s->pb, 1, s->per_mb_rl_table);
         }
 
@@ -247,7 +251,7 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
     } else {
         put_bits(&s->pb, 1, s->use_skip_mb_code);
 
-        if (s->msmpeg4_version == MSMP4_WMV1 && s->bit_rate > MBAC_BITRATE)
+        if (s->msmpeg4_version == MSMP4_WMV1 && m->bit_rate > MBAC_BITRATE)
             put_bits(&s->pb, 1, s->per_mb_rl_table);
 
         if (s->msmpeg4_version > MSMP4_V2) {
@@ -268,6 +272,7 @@ static int msmpeg4_encode_picture_header(MPVMainEncContext *const m)
 
 void ff_msmpeg4_encode_ext_header(MpegEncContext * s)
 {
+    const MPVMainEncContext *const m = slice_to_mainenc(s);
     unsigned fps;
 
     if (s->avctx->framerate.num > 0 && s->avctx->framerate.den > 0)
@@ -284,7 +289,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
 
     put_bits(&s->pb, 5, FFMIN(fps, 31)); //yes 29.97 -> 29
 
-    put_bits(&s->pb, 11, FFMIN(s->bit_rate / 1024, 2047));
+    put_bits(&s->pb, 11, FFMIN(m->bit_rate / 1024, 2047));
 
     if (s->msmpeg4_version >= MSMP4_V3)
         put_bits(&s->pb, 1, s->flipflop_rounding);
diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c
index 20e3ccabf8..0d2bf8fb30 100644
--- a/libavcodec/ratecontrol.c
+++ b/libavcodec/ratecontrol.c
@@ -347,7 +347,7 @@ static int init_pass2(MPVMainEncContext *const m)
     double complexity[5]   = { 0 }; // approximate bits at quant=1
     uint64_t const_bits[5] = { 0 }; // quantizer independent bits
     uint64_t all_const_bits;
-    uint64_t all_available_bits = av_rescale_q(s->bit_rate,
+    uint64_t all_available_bits = av_rescale_q(m->bit_rate,
                                                (AVRational){rcc->num_entries,1},
                                                fps);
     double rate_factor          = 0;
@@ -477,8 +477,8 @@ static int init_pass2(MPVMainEncContext *const m)
     av_assert0(toobig <= 40);
     av_log(s->avctx, AV_LOG_DEBUG,
            "[lavc rc] requested bitrate: %"PRId64" bps  expected bitrate: %"PRId64" bps\n",
-           s->bit_rate,
-           (int64_t)(expected_bits / ((double)all_available_bits / s->bit_rate)));
+           m->bit_rate,
+           (int64_t)(expected_bits / ((double)all_available_bits / m->bit_rate)));
     av_log(s->avctx, AV_LOG_DEBUG,
            "[lavc rc] estimated target average qp: %.3f\n",
            (float)qscale_sum / rcc->num_entries);
@@ -696,7 +696,7 @@ av_cold int ff_rate_control_init(MPVMainEncContext *const m)
                 get_qscale(m, &rce, rcc->pass1_wanted_bits / rcc->pass1_rc_eq_output_sum, i);
 
                 // FIXME misbehaves a little for variable fps
-                rcc->pass1_wanted_bits += s->bit_rate / get_fps(s->avctx);
+                rcc->pass1_wanted_bits += m->bit_rate / get_fps(s->avctx);
             }
         }
     }
@@ -971,9 +971,9 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
             dts_pic = s->last_pic.ptr;
 
         if (!dts_pic || dts_pic->f->pts == AV_NOPTS_VALUE)
-            wanted_bits_double = s->bit_rate * (double)picture_number / fps;
+            wanted_bits_double = m->bit_rate * (double)picture_number / fps;
         else
-            wanted_bits_double = s->bit_rate * (double)dts_pic->f->pts / fps;
+            wanted_bits_double = m->bit_rate * (double)dts_pic->f->pts / fps;
         if (wanted_bits_double > INT64_MAX) {
             av_log(s->avctx, AV_LOG_WARNING, "Bits exceed 64bit range\n");
             wanted_bits = INT64_MAX;
@@ -1047,7 +1047,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
 
         q = modify_qscale(m, rce, q, picture_number);
 
-        rcc->pass1_wanted_bits += s->bit_rate / fps;
+        rcc->pass1_wanted_bits += m->bit_rate / fps;
 
         av_assert0(q > 0.0);
     }
@@ -1061,7 +1061,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
                wanted_bits / 1000, m->total_bits / 1000,
                br_compensation, short_term_q, m->frame_bits,
                m->mb_var_sum, m->mc_mb_var_sum,
-               s->bit_rate / 1000, (int)fps);
+               m->bit_rate / 1000, (int)fps);
     }
 
     if (q < qmin)
diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c
index e074e878d6..b4a329158f 100644
--- a/libavcodec/snowenc.c
+++ b/libavcodec/snowenc.c
@@ -227,7 +227,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
     s->version=0;
 
     mpv->avctx   = avctx;
-    mpv->bit_rate= avctx->bit_rate;
+    enc->m.bit_rate = avctx->bit_rate;
     enc->m.lmin  = avctx->mb_lmin;
     enc->m.lmax  = avctx->mb_lmax;
     mpv->mb_num  = (avctx->width * avctx->height + 255) / 256; // For ratecontrol
diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c
index 3ab3e75722..6eda38d05f 100644
--- a/libavcodec/wmv2enc.c
+++ b/libavcodec/wmv2enc.c
@@ -55,7 +55,7 @@ static int encode_ext_header(WMV2EncContext *w)
     init_put_bits(&pb, s->avctx->extradata, WMV2_EXTRADATA_SIZE);
 
     put_bits(&pb, 5, s->avctx->time_base.den / s->avctx->time_base.num); // yes 29.97 -> 29
-    put_bits(&pb, 11, FFMIN(s->bit_rate / 1024, 2047));
+    put_bits(&pb, 11, FFMIN(w->msmpeg4.m.bit_rate / 1024, 2047));
 
     put_bits(&pb, 1, w->mspel_bit        = 1);
     put_bits(&pb, 1, s->loop_filter);
@@ -135,7 +135,7 @@ static int wmv2_encode_picture_header(MPVMainEncContext *const m)
         put_bits(&s->pb, 1, s->dc_table_index);
         put_bits(&s->pb, 1, s->mv_table_index);
 
-        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 && m->bit_rate <= II_BITRATE);
     }
     s->esc3_level_length = 0;
     s->esc3_run_length   = 0;
-- 
2.45.2