1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avcodec/mpegvideo: Move macroblock-variance stats to MPVMainEncContext

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2022-10-13 02:15:46 +02:00
parent 553fc3a764
commit b038c7af0c
5 changed files with 18 additions and 17 deletions

View File

@ -230,8 +230,6 @@ typedef struct MpegEncContext {
uint16_t *mb_var; ///< Table for MB variances uint16_t *mb_var; ///< Table for MB variances
uint16_t *mc_mb_var; ///< Table for motion compensated MB variances uint16_t *mc_mb_var; ///< Table for motion compensated MB variances
uint8_t *mb_mean; ///< Table for MB luminance 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]; uint64_t encoding_error[MPV_MAX_PLANES];
int motion_est; ///< ME algorithm int motion_est; ///< ME algorithm

View File

@ -3752,8 +3752,8 @@ static int encode_picture(MPVMainEncContext *const m, const AVPacket *pkt)
for(i=1; i<context_count; i++){ for(i=1; i<context_count; i++){
merge_context_after_me(s, s->thread_context[i]); merge_context_after_me(s, s->thread_context[i]);
} }
s->mc_mb_var_sum = s->me.mc_mb_var_sum_temp; m->mc_mb_var_sum = s->me.mc_mb_var_sum_temp;
s->mb_var_sum = s->me. mb_var_sum_temp; m->mb_var_sum = s->me. mb_var_sum_temp;
emms_c(); emms_c();
if (s->me.scene_change_score > m->scenechange_threshold && 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) if (s->msmpeg4_version >= MSMP4_V3)
s->no_rounding=1; s->no_rounding=1;
ff_dlog(s->avctx, "Scene change detected, encoding as I Frame %"PRId64" %"PRId64"\n", 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){ if(!s->umvplus){

View File

@ -81,6 +81,9 @@ typedef struct MPVMainEncContext {
int next_lambda; ///< next lambda used for retrying to encode a frame int next_lambda; ///< next lambda used for retrying to encode a frame
int fixed_qscale; ///< fixed qscale if non zero int fixed_qscale; ///< fixed qscale if non zero
RateControlContext rc_context; ///< contains stuff only accessed in ratecontrol.c 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; } MPVMainEncContext;
#define MAX_FCODE 7 #define MAX_FCODE 7

View File

@ -51,8 +51,8 @@ void ff_write_pass1_stats(MPVMainEncContext *const m)
s->misc_bits, s->misc_bits,
s->f_code, s->f_code,
s->b_code, s->b_code,
s->mc_mb_var_sum, m->mc_mb_var_sum,
s->mb_var_sum, m->mb_var_sum,
s->i_count, s->i_count,
s->header_bits); s->header_bits);
} }
@ -986,7 +986,7 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
if (br_compensation <= 0.0) if (br_compensation <= 0.0)
br_compensation = 0.001; 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 */ short_term_q = 0; /* avoid warning */
if (s->avctx->flags & AV_CODEC_FLAG_PASS2) { if (s->avctx->flags & AV_CODEC_FLAG_PASS2) {
@ -999,8 +999,8 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
} else { } else {
rce->pict_type = rce->pict_type =
rce->new_pict_type = pict_type; rce->new_pict_type = pict_type;
rce->mc_mb_var_sum = s->mc_mb_var_sum; rce->mc_mb_var_sum = m->mc_mb_var_sum;
rce->mb_var_sum = s->mb_var_sum; rce->mb_var_sum = m->mb_var_sum;
rce->qscale = FF_QP2LAMBDA * 2; rce->qscale = FF_QP2LAMBDA * 2;
rce->f_code = s->f_code; rce->f_code = s->f_code;
rce->b_code = s->b_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, qmin, q, qmax, picture_number,
wanted_bits / 1000, m->total_bits / 1000, wanted_bits / 1000, m->total_bits / 1000,
br_compensation, short_term_q, m->frame_bits, 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); s->bit_rate / 1000, (int)fps);
} }
@ -1076,8 +1076,8 @@ float ff_rate_estimate_qscale(MPVMainEncContext *const m, int dry_run)
if (!dry_run) { if (!dry_run) {
rcc->last_qscale = q; rcc->last_qscale = q;
rcc->last_mc_mb_var_sum = s->mc_mb_var_sum; rcc->last_mc_mb_var_sum = m->mc_mb_var_sum;
rcc->last_mb_var_sum = s->mb_var_sum; rcc->last_mb_var_sum = m->mb_var_sum;
} }
return q; return q;
} }

View File

@ -1708,11 +1708,11 @@ static int ratecontrol_1pass(SnowEncContext *enc, AVFrame *pict)
coef_sum = (uint64_t)coef_sum * coef_sum >> 16; coef_sum = (uint64_t)coef_sum * coef_sum >> 16;
if(pict->pict_type == AV_PICTURE_TYPE_I){ if(pict->pict_type == AV_PICTURE_TYPE_I){
enc->m.s.mb_var_sum = coef_sum; enc->m.mb_var_sum = coef_sum;
enc->m.s.mc_mb_var_sum = 0; enc->m.mc_mb_var_sum = 0;
}else{ }else{
enc->m.s.mc_mb_var_sum = coef_sum; enc->m.mc_mb_var_sum = coef_sum;
enc->m.s.mb_var_sum = 0; enc->m.mb_var_sum = 0;
} }
pict->quality= ff_rate_estimate_qscale(&enc->m, 1); pict->quality= ff_rate_estimate_qscale(&enc->m, 1);