Fix eobs buffer pointer mis-use
authorJingning Han <jingning@google.com>
Mon, 6 Oct 2014 22:53:27 +0000 (15:53 -0700)
committerJingning Han <jingning@google.com>
Mon, 6 Oct 2014 22:57:13 +0000 (15:57 -0700)
This commit fixes a buffer pointer mis-use in store_coding_context.
The compression performance for stdhd set of speed 3 is improved by
0.097%. It fixes issue 869.

Change-Id: Idc59e22035eaf39f7133ca04174894374d647ff7

vp9/encoder/vp9_rdopt.c

index 20a4b70..f793269 100644 (file)
@@ -1953,9 +1953,19 @@ static void store_coding_context(MACROBLOCK *x, PICK_MODE_CONTEXT *ctx,
   int plane, has_high_freq_coeff = 0;
   BLOCK_SIZE bsize = xd->mi[0].src_mi->mbmi.sb_type;
 
-  if (bsize >= BLOCK_8X8)
-    for (plane = 0; plane < MAX_MB_PLANE; ++plane)
+  if (bsize >= BLOCK_8X8) {
+    int max_plane = is_inter_block(&xd->mi[0].src_mi->mbmi)
+                        ? MAX_MB_PLANE : 1;
+    for (plane = 0; plane < max_plane; ++plane) {
+      x->plane[plane].eobs = ctx->eobs_pbuf[plane][1];
+      has_high_freq_coeff |= vp9_has_high_freq_in_plane(x, bsize, plane);
+    }
+
+    for (plane = max_plane; plane < MAX_MB_PLANE; ++plane) {
+      x->plane[plane].eobs = ctx->eobs_pbuf[plane][2];
       has_high_freq_coeff |= vp9_has_high_freq_in_plane(x, bsize, plane);
+    }
+  }
 
   // Take a snapshot of the coding context so it can be
   // restored if we decide to encode this way