From 922e53781b442add21a381da7ef713e72ca8adb8 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Thu, 13 Oct 2022 02:15:46 +0200
Subject: [PATCH 26/77] avcodec/mpegvideo: Move macroblock-variance stats to
 MPVMainEncContext

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/mpegvideo.h     |  2 --
 libavcodec/mpegvideo_enc.c |  6 +++---
 libavcodec/mpegvideoenc.h  |  3 +++
 libavcodec/ratecontrol.c   | 16 ++++++++--------
 libavcodec/snowenc.c       |  8 ++++----
 5 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 6c71d9bc01..bdd3196060 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -230,8 +230,6 @@ typedef struct MpegEncContext {
     uint16_t *mb_var;           ///< Table for MB variances
     uint16_t *mc_mb_var;        ///< Table for motion compensated MB variances
     uint8_t *mb_mean;           ///< Table for MB luminance
-    int64_t mb_var_sum;         ///< sum of MB variance for current frame
-    int64_t mc_mb_var_sum;      ///< motion compensated MB variance for current frame
     uint64_t encoding_error[MPV_MAX_PLANES];
 
     int motion_est;                      ///< ME algorithm
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 06314dc602..44bad9eb52 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -3752,8 +3752,8 @@ static int encode_picture(MPVMainEncContext *const m, const AVPacket *pkt)
     for(i=1; i<context_count; i++){
         merge_context_after_me(s, s->thread_context[i]);
     }
-    s->mc_mb_var_sum = s->me.mc_mb_var_sum_temp;
-    s->mb_var_sum    = s->me.   mb_var_sum_temp;
+    m->mc_mb_var_sum = s->me.mc_mb_var_sum_temp;
+    m->mb_var_sum    = s->me.   mb_var_sum_temp;
     emms_c();
 
     if (s->me.scene_change_score > m->scenechange_threshold &&
@@ -3764,7 +3764,7 @@ static int encode_picture(MPVMainEncContext *const m, const AVPacket *pkt)
         if (s->msmpeg4_version >= MSMP4_V3)
             s->no_rounding=1;
         ff_dlog(s->avctx, "Scene change detected, encoding as I Frame %"PRId64" %"PRId64"\n",
-                s->mb_var_sum, s->mc_mb_var_sum);
+                m->mb_var_sum, m->mc_mb_var_sum);
     }
 
     if(!s->umvplus){
diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h
index 17bf50443d..283fa8f705 100644
--- a/libavcodec/mpegvideoenc.h
+++ b/libavcodec/mpegvideoenc.h
@@ -81,6 +81,9 @@ typedef struct MPVMainEncContext {
     int next_lambda;               ///< next lambda used for retrying to encode a frame
     int fixed_qscale;              ///< fixed qscale if non zero
     RateControlContext rc_context; ///< contains stuff only accessed in ratecontrol.c
+
+    int64_t mb_var_sum;            ///< sum of MB variance for current frame
+    int64_t mc_mb_var_sum;         ///< motion compensated MB variance for current frame
 } MPVMainEncContext;
 
 #define MAX_FCODE        7
diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c
index f4df67aab0..9c5d34dfde 100644
--- a/libavcodec/ratecontrol.c
+++ b/libavcodec/ratecontrol.c
@@ -51,8 +51,8 @@ void ff_write_pass1_stats(MPVMainEncContext *const m)
              s->misc_bits,
              s->f_code,
              s->b_code,
-             s->mc_mb_var_sum,
-             s->mb_var_sum,
+             m->mc_mb_var_sum,
+             m->mb_var_sum,
              s->i_count,
              s->header_bits);
 }
@@ -986,7 +986,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
     if (br_compensation <= 0.0)
         br_compensation = 0.001;
 
-    var = pict_type == AV_PICTURE_TYPE_I ? s->mb_var_sum : s->mc_mb_var_sum;
+    var = pict_type == AV_PICTURE_TYPE_I ? m->mb_var_sum : m->mc_mb_var_sum;
 
     short_term_q = 0; /* avoid warning */
     if (s->avctx->flags & AV_CODEC_FLAG_PASS2) {
@@ -999,8 +999,8 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
     } else {
         rce->pict_type     =
         rce->new_pict_type = pict_type;
-        rce->mc_mb_var_sum = s->mc_mb_var_sum;
-        rce->mb_var_sum    = s->mb_var_sum;
+        rce->mc_mb_var_sum = m->mc_mb_var_sum;
+        rce->mb_var_sum    = m->mb_var_sum;
         rce->qscale        = FF_QP2LAMBDA * 2;
         rce->f_code        = s->f_code;
         rce->b_code        = s->b_code;
@@ -1060,7 +1060,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
                qmin, q, qmax, picture_number,
                wanted_bits / 1000, m->total_bits / 1000,
                br_compensation, short_term_q, m->frame_bits,
-               s->mb_var_sum, s->mc_mb_var_sum,
+               m->mb_var_sum, m->mc_mb_var_sum,
                s->bit_rate / 1000, (int)fps);
     }
 
@@ -1076,8 +1076,8 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
 
     if (!dry_run) {
         rcc->last_qscale        = q;
-        rcc->last_mc_mb_var_sum = s->mc_mb_var_sum;
-        rcc->last_mb_var_sum    = s->mb_var_sum;
+        rcc->last_mc_mb_var_sum = m->mc_mb_var_sum;
+        rcc->last_mb_var_sum    = m->mb_var_sum;
     }
     return q;
 }
diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c
index d974a12f6b..e074e878d6 100644
--- a/libavcodec/snowenc.c
+++ b/libavcodec/snowenc.c
@@ -1708,11 +1708,11 @@ static int ratecontrol_1pass(SnowEncContext *enc, AVFrame *pict)
     coef_sum = (uint64_t)coef_sum * coef_sum >> 16;
 
     if(pict->pict_type == AV_PICTURE_TYPE_I){
-        enc->m.s.mb_var_sum    = coef_sum;
-        enc->m.s.mc_mb_var_sum = 0;
+        enc->m.mb_var_sum    = coef_sum;
+        enc->m.mc_mb_var_sum = 0;
     }else{
-        enc->m.s.mc_mb_var_sum = coef_sum;
-        enc->m.s.mb_var_sum    = 0;
+        enc->m.mc_mb_var_sum = coef_sum;
+        enc->m.mb_var_sum    = 0;
     }
 
     pict->quality= ff_rate_estimate_qscale(&enc->m, 1);
-- 
2.45.2