shithub: libvpx

Download patch

ref: 6c0c6b86c14a89120beed55fcf7e68c038476eb5
parent: 15255eef8251eb645b9b89f6e211663e6f22563d
author: John Koleszar <[email protected]>
date: Wed Apr 24 11:01:35 EDT 2013

Remove diff from BLOCKD

The underlying storage for these buffers is in the per-plane MACROBLOCKD
area, so read it from there directly.

Change-Id: Id6bd835117fdd9dea07db95ad06eff9f12afaaf7

--- a/vp9/common/vp9_blockd.h
+++ b/vp9/common/vp9_blockd.h
@@ -279,8 +279,6 @@
 } MODE_INFO;
 
 typedef struct blockd {
-  int16_t *diff;
-
   /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */
   uint8_t **base_pre;
   uint8_t **base_second_pre;
--- a/vp9/common/vp9_mbpitch.c
+++ b/vp9/common/vp9_mbpitch.c
@@ -70,32 +70,7 @@
 }
 
 void vp9_setup_block_dptrs(MACROBLOCKD *mb) {
-  int r, c, i;
-  BLOCKD *blockd = mb->block;
-
-  for (r = 0; r < 4; r++) {
-    for (c = 0; c < 4; c++) {
-      const int to = r * 4 + c;
-      const int from = r * 4 * 16 + c * 4;
-      blockd[to].diff = &mb->plane[0].diff[from];
-    }
-  }
-
-  for (r = 0; r < 2; r++) {
-    for (c = 0; c < 2; c++) {
-      const int to = 16 + r * 2 + c;
-      const int from = r * 4 * 8 + c * 4;
-      blockd[to].diff = &mb->plane[1].diff[from];
-    }
-  }
-
-  for (r = 0; r < 2; r++) {
-    for (c = 0; c < 2; c++) {
-      const int to = 20 + r * 2 + c;
-      const int from = r * 4 * 8 + c * 4;
-      blockd[to].diff = &mb->plane[2].diff[from];
-    }
-  }
+  int i;
 
   for (i = 0; i < MAX_MB_PLANE; i++) {
     mb->plane[i].plane_type = i ? PLANE_TYPE_UV : PLANE_TYPE_Y_WITH_DC;
--- a/vp9/encoder/vp9_encodeintra.c
+++ b/vp9/encoder/vp9_encodeintra.c
@@ -50,6 +50,9 @@
   int16_t* const src_diff =
       raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, ib,
                                 x->plane[0].src_diff);
+  int16_t* const diff =
+      raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, ib,
+                                xd->plane[0].diff);
   int16_t* const coeff = BLOCK_OFFSET(x->plane[0].coeff, ib, 16);
 
   assert(ib < 16);
@@ -69,16 +72,16 @@
     vp9_short_fht4x4(src_diff, coeff, 16, tx_type);
     vp9_ht_quantize_b_4x4(x, ib, tx_type);
     vp9_short_iht4x4(BLOCK_OFFSET(xd->plane[0].dqcoeff, ib, 16),
-                     b->diff, 16, tx_type);
+                     diff, 16, tx_type);
   } else {
     x->fwd_txm4x4(src_diff, coeff, 32);
     x->quantize_b_4x4(x, ib, 16);
     vp9_inverse_transform_b_4x4(&x->e_mbd, xd->plane[0].eobs[ib],
                                 BLOCK_OFFSET(xd->plane[0].dqcoeff, ib, 16),
-                                b->diff, 32);
+                                diff, 32);
   }
 
-  vp9_recon_b(*(b->base_dst) + b->dst, b->diff,
+  vp9_recon_b(*(b->base_dst) + b->dst, diff,
               *(b->base_dst) + b->dst, b->dst_stride);
 }
 
@@ -159,6 +162,9 @@
   int16_t* const src_diff =
       raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, ib,
                                 x->plane[0].src_diff);
+  int16_t* const diff =
+      raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, ib,
+                                xd->plane[0].diff);
   const int iblock[4] = {0, 1, 4, 5};
   int i;
   TX_TYPE tx_type;
@@ -180,12 +186,11 @@
     if (tx_type != DCT_DCT) {
       vp9_short_fht8x8(src_diff, coeff, 16, tx_type);
       x->quantize_b_8x8(x, idx, tx_type, 16);
-      vp9_short_iht8x8(dqcoeff, xd->block[ib].diff,
-                            16, tx_type);
+      vp9_short_iht8x8(dqcoeff, diff, 16, tx_type);
     } else {
       x->fwd_txm8x8(src_diff, coeff, 32);
       x->quantize_b_8x8(x, idx, DCT_DCT, 16);
-      vp9_short_idct8x8(dqcoeff, xd->block[ib].diff, 32);
+      vp9_short_idct8x8(dqcoeff, diff, 32);
     }
   } else {
     for (i = 0; i < 4; i++) {
@@ -195,6 +200,9 @@
       int16_t* const src_diff =
           raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, idx,
                                     x->plane[0].src_diff);
+      int16_t* const diff =
+          raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, idx,
+                                    xd->plane[0].diff);
 
       assert(idx < 16);
       b = &xd->block[ib + iblock[i]];
@@ -202,21 +210,21 @@
       if (tx_type != DCT_DCT) {
         vp9_short_fht4x4(src_diff, coeff, 16, tx_type);
         vp9_ht_quantize_b_4x4(x, ib + iblock[i], tx_type);
-        vp9_short_iht4x4(dqcoeff, b->diff, 16, tx_type);
+        vp9_short_iht4x4(dqcoeff, diff, 16, tx_type);
       } else if (!(i & 1) &&
                  get_tx_type_4x4(xd, ib + iblock[i] + 1) == DCT_DCT) {
         x->fwd_txm8x4(src_diff, coeff, 32);
         x->quantize_b_4x4_pair(x, ib + iblock[i], ib + iblock[i] + 1, 16);
         vp9_inverse_transform_b_4x4(xd, xd->plane[0].eobs[ib + iblock[i]],
-                                    dqcoeff, b->diff, 32);
+                                    dqcoeff, diff, 32);
         vp9_inverse_transform_b_4x4(xd, xd->plane[0].eobs[ib + iblock[i] + 1],
-                                    dqcoeff + 16, (b + 1)->diff, 32);
+                                    dqcoeff + 16, diff + 4, 32);
         i++;
       } else {
         x->fwd_txm4x4(src_diff, coeff, 32);
         x->quantize_b_4x4(x, ib + iblock[i], 16);
         vp9_inverse_transform_b_4x4(xd, xd->plane[0].eobs[ib + iblock[i]],
-                                    dqcoeff, b->diff, 32);
+                                    dqcoeff, diff, 32);
       }
     }
   }
@@ -223,8 +231,11 @@
 
   // reconstruct submacroblock
   for (i = 0; i < 4; i++) {
+    int16_t* const diff =
+        raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, ib + iblock[i],
+                                  xd->plane[0].diff);
     b = &xd->block[ib + iblock[i]];
-    vp9_recon_b_c(*(b->base_dst) + b->dst, b->diff, *(b->base_dst) + b->dst,
+    vp9_recon_b_c(*(b->base_dst) + b->dst, diff, *(b->base_dst) + b->dst,
                   b->dst_stride);
   }
 }
@@ -250,6 +261,9 @@
   int16_t* const src_diff =
       raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, plane, block,
                                 x->plane[plane].src_diff);
+  int16_t* const diff =
+      raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, plane, block,
+                                xd->plane[plane].diff);
 
   assert(ib >= 16 && ib < 24);
   vp9_intra_uv4x4_predict(&x->e_mbd, b, mode,
@@ -263,9 +277,9 @@
   x->fwd_txm4x4(src_diff, coeff, 16);
   x->quantize_b_4x4(x, ib, 16);
   vp9_inverse_transform_b_4x4(&x->e_mbd, xd->plane[plane].eobs[block],
-                              dqcoeff, b->diff, 16);
+                              dqcoeff, diff, 16);
 
-  vp9_recon_uv_b_c(*(b->base_dst) + b->dst, b->diff, *(b->base_dst) + b->dst,
+  vp9_recon_uv_b_c(*(b->base_dst) + b->dst, diff, *(b->base_dst) + b->dst,
                    b->dst_stride);
 }
 
--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -858,6 +858,9 @@
   int16_t* const src_diff =
       raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, ib,
                                 x->plane[0].src_diff);
+  int16_t* const diff =
+      raster_block_offset_int16(xd, BLOCK_SIZE_MB16X16, 0, ib,
+                                xd->plane[0].diff);
   int16_t* const coeff = BLOCK_OFFSET(x->plane[0].coeff, ib, 16);
   ENTROPY_CONTEXT ta = *a, tempa = *a;
   ENTROPY_CONTEXT tl = *l, templ = *l;
@@ -940,13 +943,13 @@
 
   // inverse transform
   if (best_tx_type != DCT_DCT)
-    vp9_short_iht4x4(best_dqcoeff, b->diff, 16, best_tx_type);
+    vp9_short_iht4x4(best_dqcoeff, diff, 16, best_tx_type);
   else
-    xd->inv_txm4x4(best_dqcoeff, b->diff, 32);
+    xd->inv_txm4x4(best_dqcoeff, diff, 32);
 
   vp9_intra4x4_predict(xd, b, *best_mode,
                        *(b->base_dst) + b->dst, b->dst_stride);
-  vp9_recon_b(*(b->base_dst) + b->dst, b->diff,
+  vp9_recon_b(*(b->base_dst) + b->dst, diff,
               *(b->base_dst) + b->dst, b->dst_stride);
 
   return best_rd;