]> granicus.if.org Git - libx264/commitdiff
Correct misprediction of bitrate in threaded mode
authorGabriel Bouvigne <bouvigne@mp3-tech.org>
Tue, 16 Sep 2008 08:54:37 +0000 (01:54 -0700)
committerFiona Glaser <fiona@x264.com>
Tue, 16 Sep 2008 08:57:39 +0000 (01:57 -0700)
Improves bitrate accuracy in cases with large numbers of threads.
Loosely based on a patch by BugMaster.

encoder/ratecontrol.c

index f5f35d9a6126a8a72715862c657f9843708e3511..bffe42275168d3cbc616ea9433972cf434eb9134 100644 (file)
@@ -1348,6 +1348,21 @@ static float rate_estimate_qscale( x264_t *h )
                           + h->stat.i_slice_size[SLICE_TYPE_P]
                           + h->stat.i_slice_size[SLICE_TYPE_B]);
 
+    if( h->param.i_threads > 1 )
+    {
+        int j = h->rc - h->thread[0]->rc;
+        int i;
+        for( i=1; i<h->param.i_threads; i++ )
+        {
+            x264_t *t = h->thread[ (j+i)%h->param.i_threads ];
+            double bits = t->rc->frame_size_planned;
+            if( !t->b_thread_active )
+                continue;
+            bits  = X264_MAX(bits, x264_ratecontrol_get_estimated_size(t));
+            total_bits += (int64_t)bits;
+        }
+    }
+
     if( rcc->b_2pass )
     {
         rce = *rcc->rce;