# HG changeset patch # User michael # Date 1135291689 0 # Node ID 33d4fb0df0d3160ace4cc4e1c437ac05cc7b4832 # Parent 529163f9947424f8087713c978478ffe8a4a7320 better f_code guessing in 2nd pass diff -r 529163f99474 -r 33d4fb0df0d3 mpegvideo.c --- a/mpegvideo.c Thu Dec 22 14:17:54 2005 +0000 +++ b/mpegvideo.c Thu Dec 22 22:48:09 2005 +0000 @@ -5298,9 +5298,10 @@ s->no_rounding ^= 1; } - if(s->flags & CODEC_FLAG_PASS2) + if(s->flags & CODEC_FLAG_PASS2){ estimate_qp(s, 1); - else if(!(s->flags & CODEC_FLAG_QSCALE)){ + ff_get_2pass_fcode(s); + }else if(!(s->flags & CODEC_FLAG_QSCALE)){ RateControlContext *rcc= &s->rc_context; if(s->pict_type==B_TYPE) diff -r 529163f99474 -r 33d4fb0df0d3 mpegvideo.h --- a/mpegvideo.h Thu Dec 22 14:17:54 2005 +0000 +++ b/mpegvideo.h Thu Dec 22 22:48:09 2005 +0000 @@ -980,6 +980,6 @@ double (**func2)(void *, double, double), char **func2_name, void *opaque); int ff_vbv_update(MpegEncContext *s, int frame_size); - +void ff_get_2pass_fcode(MpegEncContext *s); #endif /* AVCODEC_MPEGVIDEO_H */ diff -r 529163f99474 -r 33d4fb0df0d3 ratecontrol.c --- a/ratecontrol.c Thu Dec 22 14:17:54 2005 +0000 +++ b/ratecontrol.c Thu Dec 22 22:48:09 2005 +0000 @@ -607,6 +607,17 @@ s->lambda_table[mb_xy]= intq; } } + +void ff_get_2pass_fcode(MpegEncContext *s){ + RateControlContext *rcc= &s->rc_context; + int picture_number= s->picture_number; + RateControlEntry *rce; + + rce= &rcc->entry[picture_number]; + s->f_code= rce->f_code; + s->b_code= rce->b_code; +} + //FIXME rd or at least approx for dquant float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)