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