138
138
i+= s->max_b_frames;
139
139
if(i<=0 || i>=INT_MAX / sizeof(RateControlEntry))
141
rcc->entry = (RateControlEntry*)av_mallocz(i*sizeof(RateControlEntry));
141
rcc->entry = av_mallocz(i*sizeof(RateControlEntry));
142
142
rcc->num_entries= i;
144
144
/* init all to skipped p frames (with b frames we might have a not encoded frame at the end FIXME) */
145
145
for(i=0; i<rcc->num_entries; i++){
146
146
RateControlEntry *rce= &rcc->entry[i];
147
rce->pict_type= rce->new_pict_type=P_TYPE;
147
rce->pict_type= rce->new_pict_type=FF_P_TYPE;
148
148
rce->qscale= rce->new_qscale=FF_QP2LAMBDA * 2;
149
149
rce->misc_bits= s->mb_num + 10;
150
150
rce->mb_var_sum= s->mb_num*100;
185
185
//FIXME maybe move to end
186
186
if((s->flags&CODEC_FLAG_PASS2) && s->avctx->rc_strategy == FF_RC_STRATEGY_XVID) {
187
#ifdef CONFIG_LIBXVID
188
188
return ff_xvid_rate_control_init(s);
190
190
av_log(s->avctx, AV_LOG_ERROR, "XviD ratecontrol requires libavcodec compiled with XviD support\n");
201
201
rcc->pass1_rc_eq_output_sum= 0.001;
202
202
rcc->pass1_wanted_bits=0.001;
204
if(s->avctx->qblur > 1.0){
205
av_log(s->avctx, AV_LOG_ERROR, "qblur too large\n");
204
208
/* init stuff with the user specified complexity */
205
209
if(s->avctx->rc_initial_cplx){
206
210
for(i=0; i<60*30; i++){
208
212
RateControlEntry rce;
211
if (i%((s->gop_size+3)/4)==0) rce.pict_type= I_TYPE;
212
else if(i%(s->max_b_frames+1)) rce.pict_type= B_TYPE;
213
else rce.pict_type= P_TYPE;
215
if (i%((s->gop_size+3)/4)==0) rce.pict_type= FF_I_TYPE;
216
else if(i%(s->max_b_frames+1)) rce.pict_type= FF_B_TYPE;
217
else rce.pict_type= FF_P_TYPE;
215
219
rce.new_pict_type= rce.pict_type;
216
220
rce.mc_mb_var_sum= bits*s->mb_num/100000;
239
243
bits= rce.i_tex_bits + rce.p_tex_bits;
241
245
q= get_qscale(s, &rce, rcc->pass1_wanted_bits/rcc->pass1_rc_eq_output_sum, i);
242
rcc->pass1_wanted_bits+= s->bit_rate/(1/av_q2d(s->avctx->time_base)); //FIXME missbehaves a little for variable fps
246
rcc->pass1_wanted_bits+= s->bit_rate/(1/av_q2d(s->avctx->time_base)); //FIXME misbehaves a little for variable fps
316
320
rce->p_tex_bits*rce->qscale,
317
321
(rce->i_tex_bits + rce->p_tex_bits)*(double)rce->qscale,
318
322
rce->mv_bits/mb_num,
319
rce->pict_type == B_TYPE ? (rce->f_code + rce->b_code)*0.5 : rce->f_code,
323
rce->pict_type == FF_B_TYPE ? (rce->f_code + rce->b_code)*0.5 : rce->f_code,
320
324
rce->i_count/mb_num,
321
325
rce->mc_mb_var_sum/mb_num,
322
326
rce->mb_var_sum/mb_num,
323
rce->pict_type == I_TYPE,
324
rce->pict_type == P_TYPE,
325
rce->pict_type == B_TYPE,
327
rce->pict_type == FF_I_TYPE,
328
rce->pict_type == FF_P_TYPE,
329
rce->pict_type == FF_B_TYPE,
326
330
rcc->qscale_sum[pict_type] / (double)rcc->frame_count[pict_type],
328
/* rcc->last_qscale_for[I_TYPE],
329
rcc->last_qscale_for[P_TYPE],
330
rcc->last_qscale_for[B_TYPE],
332
/* rcc->last_qscale_for[FF_I_TYPE],
333
rcc->last_qscale_for[FF_P_TYPE],
334
rcc->last_qscale_for[FF_B_TYPE],
331
335
rcc->next_non_b_qscale,*/
332
rcc->i_cplx_sum[I_TYPE] / (double)rcc->frame_count[I_TYPE],
333
rcc->i_cplx_sum[P_TYPE] / (double)rcc->frame_count[P_TYPE],
334
rcc->p_cplx_sum[P_TYPE] / (double)rcc->frame_count[P_TYPE],
335
rcc->p_cplx_sum[B_TYPE] / (double)rcc->frame_count[B_TYPE],
336
rcc->i_cplx_sum[FF_I_TYPE] / (double)rcc->frame_count[FF_I_TYPE],
337
rcc->i_cplx_sum[FF_P_TYPE] / (double)rcc->frame_count[FF_P_TYPE],
338
rcc->p_cplx_sum[FF_P_TYPE] / (double)rcc->frame_count[FF_P_TYPE],
339
rcc->p_cplx_sum[FF_B_TYPE] / (double)rcc->frame_count[FF_B_TYPE],
336
340
(rcc->i_cplx_sum[pict_type] + rcc->p_cplx_sum[pict_type]) / (double)rcc->frame_count[pict_type],
363
367
q= bits2qp(rce, bits);
365
369
/* I/B difference */
366
if (pict_type==I_TYPE && s->avctx->i_quant_factor<0.0)
370
if (pict_type==FF_I_TYPE && s->avctx->i_quant_factor<0.0)
367
371
q= -q*s->avctx->i_quant_factor + s->avctx->i_quant_offset;
368
else if(pict_type==B_TYPE && s->avctx->b_quant_factor<0.0)
372
else if(pict_type==FF_B_TYPE && s->avctx->b_quant_factor<0.0)
369
373
q= -q*s->avctx->b_quant_factor + s->avctx->b_quant_offset;
375
380
RateControlContext *rcc= &s->rc_context;
376
381
AVCodecContext *a= s->avctx;
377
382
const int pict_type= rce->new_pict_type;
378
const double last_p_q = rcc->last_qscale_for[P_TYPE];
383
const double last_p_q = rcc->last_qscale_for[FF_P_TYPE];
379
384
const double last_non_b_q= rcc->last_qscale_for[rcc->last_non_b_pict_type];
381
if (pict_type==I_TYPE && (a->i_quant_factor>0.0 || rcc->last_non_b_pict_type==P_TYPE))
386
if (pict_type==FF_I_TYPE && (a->i_quant_factor>0.0 || rcc->last_non_b_pict_type==FF_P_TYPE))
382
387
q= last_p_q *FFABS(a->i_quant_factor) + a->i_quant_offset;
383
else if(pict_type==B_TYPE && a->b_quant_factor>0.0)
388
else if(pict_type==FF_B_TYPE && a->b_quant_factor>0.0)
384
389
q= last_non_b_q* a->b_quant_factor + a->b_quant_offset;
386
392
/* last qscale / qdiff stuff */
387
if(rcc->last_non_b_pict_type==pict_type || pict_type!=I_TYPE){
393
if(rcc->last_non_b_pict_type==pict_type || pict_type!=FF_I_TYPE){
388
394
double last_q= rcc->last_qscale_for[pict_type];
389
395
const int maxdiff= FF_QP2LAMBDA * a->max_qdiff;
410
416
assert(qmin <= qmax);
412
if(pict_type==B_TYPE){
418
if(pict_type==FF_B_TYPE){
413
419
qmin= (int)(qmin*FFABS(s->avctx->b_quant_factor)+s->avctx->b_quant_offset + 0.5);
414
420
qmax= (int)(qmax*FFABS(s->avctx->b_quant_factor)+s->avctx->b_quant_offset + 0.5);
415
}else if(pict_type==I_TYPE){
421
}else if(pict_type==FF_I_TYPE){
416
422
qmin= (int)(qmin*FFABS(s->avctx->i_quant_factor)+s->avctx->i_quant_offset + 0.5);
417
423
qmax= (int)(qmax*FFABS(s->avctx->i_quant_factor)+s->avctx->i_quant_offset + 0.5);
439
445
get_qminmax(&qmin, &qmax, s, pict_type);
442
if(s->avctx->rc_qmod_freq && frame_num%s->avctx->rc_qmod_freq==0 && pict_type==P_TYPE)
448
if(s->avctx->rc_qmod_freq && frame_num%s->avctx->rc_qmod_freq==0 && pict_type==FF_P_TYPE)
443
449
q*= s->avctx->rc_qmod_amp;
445
451
bits= qp2bits(rce, q);
601
607
bits_tab[i]= bits;
604
/* handle qmin/qmax cliping */
610
/* handle qmin/qmax clipping */
605
611
if(s->flags&CODEC_FLAG_NORMALIZE_AQP){
606
612
float factor= bits_sum/cplx_sum;
607
613
for(i=0; i<s->mb_num; i++){
683
689
//printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate);
684
690
/* update predictors */
685
691
if(picture_number>2 && !dry_run){
686
const int last_var= s->last_pict_type == I_TYPE ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum;
692
const int last_var= s->last_pict_type == FF_I_TYPE ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum;
687
693
update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), s->frame_bits);
693
699
rce= &rcc->entry[picture_number];
694
700
wanted_bits= rce->expected_bits;
697
wanted_bits= (uint64_t)(s->bit_rate*(double)picture_number/fps);
705
//FIXME add a dts field to AVFrame and ensure its set and use it here instead of reordering
706
//but the reordering is simpler for now until h.264 b pyramid must be handeld
707
if(s->pict_type == FF_B_TYPE || s->low_delay)
708
dts_pic= s->current_picture_ptr;
710
dts_pic= s->last_picture_ptr;
713
// av_log(NULL, AV_LOG_ERROR, "%Ld %Ld %Ld %d\n", s->current_picture_ptr->pts, s->user_specified_pts, dts_pic->pts, picture_number);
715
if(!dts_pic || dts_pic->pts == AV_NOPTS_VALUE)
716
wanted_bits= (uint64_t)(s->bit_rate*(double)picture_number/fps);
718
wanted_bits= (uint64_t)(s->bit_rate*(double)dts_pic->pts/fps);
700
721
diff= s->total_bits - wanted_bits;
701
722
br_compensation= (a->bit_rate_tolerance - diff)/a->bit_rate_tolerance;
702
723
if(br_compensation<=0.0) br_compensation=0.001;
704
var= pict_type == I_TYPE ? pic->mb_var_sum : pic->mc_mb_var_sum;
725
var= pict_type == FF_I_TYPE ? pic->mb_var_sum : pic->mc_mb_var_sum;
706
727
short_term_q = 0; /* avoid warning */
707
728
if(s->flags&CODEC_FLAG_PASS2){
708
if(pict_type!=I_TYPE)
729
if(pict_type!=FF_I_TYPE)
709
730
assert(pict_type == rce->new_pict_type);
711
732
q= rce->new_qscale / br_compensation;
819
840
//int last_i_frame=-10000000;
820
841
const int filter_size= (int)(a->qblur*4) | 1;
821
842
double expected_bits;
822
double *qscale, *blured_qscale, qscale_sum;
843
double *qscale, *blurred_qscale, qscale_sum;
824
845
/* find complexity & const_bits & decide the pict_types */
825
846
for(i=0; i<rcc->num_entries; i++){
834
855
complexity[rce->new_pict_type]+= (rce->i_tex_bits+ rce->p_tex_bits)*(double)rce->qscale;
835
856
const_bits[rce->new_pict_type]+= rce->mv_bits + rce->misc_bits;
837
all_const_bits= const_bits[I_TYPE] + const_bits[P_TYPE] + const_bits[B_TYPE];
858
all_const_bits= const_bits[FF_I_TYPE] + const_bits[FF_P_TYPE] + const_bits[FF_B_TYPE];
839
860
if(all_available_bits < all_const_bits){
840
861
av_log(s->avctx, AV_LOG_ERROR, "requested bitrate is too low\n");
881
902
q+= qscale[index] * coeff;
884
blured_qscale[i]= q/sum;
905
blurred_qscale[i]= q/sum;
887
908
/* find expected bits */
888
909
for(i=0; i<rcc->num_entries; i++){
889
910
RateControlEntry *rce= &rcc->entry[i];
891
rce->new_qscale= modify_qscale(s, rce, blured_qscale[i], i);
912
rce->new_qscale= modify_qscale(s, rce, blurred_qscale[i], i);
892
913
bits= qp2bits(rce, rce->new_qscale) + rce->mv_bits + rce->misc_bits;
893
//printf("%d %f\n", rce->new_bits, blured_qscale[i]);
914
//printf("%d %f\n", rce->new_bits, blurred_qscale[i]);
894
915
bits += 8*ff_vbv_update(s, bits);
896
917
rce->expected_bits= expected_bits;