shithub: libvpx

Download patch

ref: 6de407b63897d950d43681ba8e633fcd3e8dc8c2
parent: 8de26efa66184ba6f51a800aa56b93997b52793b
parent: 60e01c65302d08e3e8c5b7f22a111b003545dc34
author: Jingning Han <jingning@google.com>
date: Tue Apr 7 08:50:30 EDT 2015

Merge "Account for eob cost in the RTC mode decision process"

--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -589,6 +589,7 @@
       xd->mb_to_right_edge >> (5 + pd->subsampling_x));
   const int max_blocks_high = num_4x4_h + (xd->mb_to_bottom_edge >= 0 ? 0 :
       xd->mb_to_bottom_edge >> (5 + pd->subsampling_y));
+  int eob_cost = 0;
 
   (void)cpi;
   vp9_subtract_plane(x, bsize, plane);
@@ -641,6 +642,7 @@
             break;
         }
         *skippable &= (*eob == 0);
+        eob_cost += 1;
       }
       block += step;
     }
@@ -647,6 +649,7 @@
   }
 
   if (*skippable && *sse < INT64_MAX) {
+    *rate = 0;
     *dist = (*sse << 6) >> shift;
     *sse = *dist;
     return;
@@ -675,8 +678,8 @@
     }
   }
 
-  *rate <<= 8;
-  *rate *= 6;
+  *rate <<= 10;
+  *rate += (eob_cost << 8);
 }
 #endif
 
@@ -905,9 +908,9 @@
                           i, j, 0);
 
   // TODO(jingning): This needs further refactoring.
-  if (plane_bsize <= BLOCK_16X16) {
+  if (plane_bsize <= BLOCK_32X32) {
     block_yrd(cpi, x, &rate, &dist, &is_skippable, &this_sse, 0,
-              bsize_tx, tx_size);
+              bsize_tx, MIN(tx_size, TX_16X16));
     x->skip_txfm[0] = is_skippable;
     if (is_skippable)
       rate = vp9_cost_bit(vp9_get_skip_prob(&cpi->common, xd), 1);
@@ -1348,10 +1351,10 @@
               vp9_get_switchable_rate(cpi, xd) : 0;
     }
 
-    if (bsize <= BLOCK_16X16) {
+    if (bsize <= BLOCK_32X32) {
       this_sse = (int64_t)sse_y;
       block_yrd(cpi, x, &this_rdc.rate, &this_rdc.dist, &is_skippable,
-                &this_sse, 0, bsize, mbmi->tx_size);
+                &this_sse, 0, bsize, MIN(mbmi->tx_size, TX_16X16));
       x->skip_txfm[0] = is_skippable;
       if (is_skippable) {
         this_rdc.rate = vp9_cost_bit(vp9_get_skip_prob(cm, xd), 1);
--