You've already forked FFmpeg
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:
@ -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
|
||||||
|
@ -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){
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user