mirror of https://git.ffmpeg.org/ffmpeg.git
ratecontrol: correct predictor in case of stuffing
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
2fe8fd3948
commit
a990a30883
|
@ -469,6 +469,7 @@ typedef struct MpegEncContext {
|
|||
/* bit rate control */
|
||||
int64_t total_bits;
|
||||
int frame_bits; ///< bits used for the current frame
|
||||
int stuffing_bits; ///< bits used for stuffing
|
||||
int next_lambda; ///< next lambda used for retrying to encode a frame
|
||||
RateControlContext rc_context; ///< contains stuff only accessed in ratecontrol.c
|
||||
|
||||
|
|
|
@ -1579,6 +1579,7 @@ vbv_retry:
|
|||
s->frame_bits = put_bits_count(&s->pb);
|
||||
|
||||
stuffing_count = ff_vbv_update(s, s->frame_bits);
|
||||
s->stuffing_bits = 8*stuffing_count;
|
||||
if (stuffing_count) {
|
||||
if (s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb) >> 3) <
|
||||
stuffing_count + 50) {
|
||||
|
|
|
@ -679,7 +679,8 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
|
|||
/* update predictors */
|
||||
if(picture_number>2 && !dry_run){
|
||||
const int last_var= s->last_pict_type == AV_PICTURE_TYPE_I ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum;
|
||||
update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), s->frame_bits);
|
||||
av_assert1(s->frame_bits >= s->stuffing_bits);
|
||||
update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), s->frame_bits - s->stuffing_bits);
|
||||
}
|
||||
|
||||
if(s->flags&CODEC_FLAG_PASS2){
|
||||
|
|
Loading…
Reference in New Issue