shithub: libvpx

Download patch

ref: 78d33cad9a23e8678c49f0659fc4b584c072d390
parent: 0b17ea6f689a2716f314d13000901c9107eb03af
author: Daniel Kang <ddkang@google.com>
date: Mon Aug 6 11:03:04 EDT 2012

Combine vp8_block_error_c and vp8_submb_error_c.

Change-Id: I58792bac6c7e5a524a6dcdb5241ef18bcc0c3a45

--- a/vp8/encoder/encodemb.h
+++ b/vp8/encoder/encodemb.h
@@ -19,7 +19,7 @@
   int (sym)(MACROBLOCK *mb, int dc)
 
 #define prototype_berr(sym) \
-  int (sym)(short *coeff, short *dqcoeff)
+  int (sym)(short *coeff, short *dqcoeff, int block_size)
 
 #define prototype_mbuverr(sym) \
   int (sym)(MACROBLOCK *mb)
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -279,8 +279,7 @@
 
 
 void vp8_initialize_rd_consts(VP8_COMP *cpi, int QIndex) {
-  int q;
-  int i;
+  int q, i;
 
   vp8_clear_system_state();  // __asm emms;
 
@@ -438,11 +437,10 @@
   }
 }
 
-int vp8_block_error_c(short *coeff, short *dqcoeff) {
-  int i;
-  int error = 0;
+int vp8_block_error_c(short *coeff, short *dqcoeff, int block_size) {
+  int i, error = 0;
 
-  for (i = 0; i < 16; i++) {
+  for (i = 0; i < block_size; i++) {
     int this_diff = coeff[i] - dqcoeff[i];
     error += this_diff * this_diff;
   }
@@ -450,20 +448,6 @@
   return error;
 }
 
-#if CONFIG_HYBRIDTRANSFORM8X8
-int vp8_submb_error_c(short *coeff, short *dqcoeff) {
-  int i;
-  int error = 0;
-
-  for (i = 0; i < 64; i++) {
-    int this_diff = coeff[i] - dqcoeff[i];
-    error += this_diff * this_diff;
-  }
-
-  return error;
-}
-#endif
-
 int vp8_mbblock_error_c(MACROBLOCK *mb, int dc) {
   BLOCK  *be;
   BLOCKD *bd;
@@ -500,7 +484,7 @@
     be = &mb->block[i];
     bd = &mb->e_mbd.block[i];
 
-    error += vp8_block_error_c(be->coeff, bd->dqcoeff);
+    error += vp8_block_error_c(be->coeff, bd->dqcoeff, 16);
   }
 
   return error;
@@ -729,7 +713,7 @@
   // Distortion
   d = ENCODEMB_INVOKE(&rtcd->encodemb, mberr)(mb, 1);
 
-  d += ENCODEMB_INVOKE(&rtcd->encodemb, berr)(mb_y2->coeff, x_y2->dqcoeff);
+  d += ENCODEMB_INVOKE(&rtcd->encodemb, berr)(mb_y2->coeff, x_y2->dqcoeff, 16);
 
   *Distortion = (d >> 2);
   // rate
@@ -789,7 +773,7 @@
   mb->e_mbd.dqcoeff[192] = 0;
 
   d = ENCODEMB_INVOKE(&rtcd->encodemb, mberr)(mb, 0);
-  d += ENCODEMB_INVOKE(&rtcd->encodemb, berr)(mb_y2->coeff, x_y2->dqcoeff);
+  d += ENCODEMB_INVOKE(&rtcd->encodemb, berr)(mb_y2->coeff, x_y2->dqcoeff, 16);
 
   *Distortion = (d >> 2);
   // rate
@@ -954,7 +938,7 @@
         ratey = cost_coeffs(x, b, PLANE_TYPE_Y_WITH_DC, &tempa, &templ, TX_4X4);
         rate += ratey;
         distortion = ENCODEMB_INVOKE(IF_RTCD(&cpi->rtcd.encodemb), berr)(
-            be->coeff, b->dqcoeff) >> 2;
+            be->coeff, b->dqcoeff, 16) >> 2;
 
         this_rd = RDCOST(x->rdmult, x->rddiv, rate, distortion);
 
@@ -1234,8 +1218,8 @@
       x->quantize_b_8x8(x->block + idx, xd->block + idx);
 
       // compute quantization mse of 8x8 block
-      distortion = vp8_submb_error_c((x->block + idx)->coeff,
-                                     (xd->block + idx)->dqcoeff)>>2;
+      distortion = vp8_block_error_c((x->block + idx)->coeff,
+                                     (xd->block + idx)->dqcoeff, 64)>>2;
 
       ta0 = *(a + vp8_block2above_8x8[idx]);
       tl0 = *(l + vp8_block2left_8x8 [idx]);
@@ -1255,13 +1239,13 @@
                          xd->block + ib + 4, xd->block + ib + 5);
 
       distortion = ENCODEMB_INVOKE(IF_RTCD(&cpi->rtcd.encodemb), berr)
-                   ((x->block + ib)->coeff, (xd->block + ib)->dqcoeff) >> 2;
+                   ((x->block + ib)->coeff, (xd->block + ib)->dqcoeff, 16) >> 2;
       distortion += ENCODEMB_INVOKE(IF_RTCD(&cpi->rtcd.encodemb), berr)
-                    ((x->block + ib + 1)->coeff, (xd->block + ib + 1)->dqcoeff) >> 2;
+                    ((x->block + ib + 1)->coeff, (xd->block + ib + 1)->dqcoeff, 16) >> 2;
       distortion += ENCODEMB_INVOKE(IF_RTCD(&cpi->rtcd.encodemb), berr)
-                    ((x->block + ib + 4)->coeff, (xd->block + ib + 4)->dqcoeff) >> 2;
+                    ((x->block + ib + 4)->coeff, (xd->block + ib + 4)->dqcoeff, 16) >> 2;
       distortion += ENCODEMB_INVOKE(IF_RTCD(&cpi->rtcd.encodemb), berr)
-                    ((x->block + ib + 5)->coeff, (xd->block + ib + 5)->dqcoeff) >> 2;
+                    ((x->block + ib + 5)->coeff, (xd->block + ib + 5)->dqcoeff, 16) >> 2;
 
       ta0 = *(a + vp8_block2above[ib]);
       ta1 = *(a + vp8_block2above[ib + 1]);
@@ -1760,8 +1744,7 @@
       // be->coeff[0] = 0;
       x->quantize_b(be, bd);
       thisdistortion = ENCODEMB_INVOKE(&rtcd->encodemb, berr)(
-                         be->coeff,
-                         bd->dqcoeff) / 4;
+                         be->coeff, bd->dqcoeff, 16) / 4;
       distortion += thisdistortion;
     }
   }