better f_code guessing in 2nd pass
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 22 Dec 2005 22:48:09 +0000 (22:48 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 22 Dec 2005 22:48:09 +0000 (22:48 +0000)
Originally committed as revision 4766 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/mpegvideo.c
libavcodec/mpegvideo.h
libavcodec/ratecontrol.c

index 729cfdd89d684916d467a5bf85fb924fab269dec..c9adcaa5b7d3df6703ea164bf807b97bad278567 100644 (file)
@@ -5298,9 +5298,10 @@ static void encode_picture(MpegEncContext *s, int picture_number)
             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)
index b01e6e8029ccc13483b4fe4a09fe4e8625982932..ce8e6e2939875fc19574e3be5109d596d59e3ba1 100644 (file)
@@ -980,6 +980,6 @@ double ff_eval(char *s, double *const_value, const char **const_name,
                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 */
index 8dd9d2b6d889bb8a175c3d2b3329873e32c8ed80..07e84235bda335844cef77010c17dd0075e34a2e 100644 (file)
@@ -607,6 +607,17 @@ static void adaptive_quantization(MpegEncContext *s, double q){
         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)