Fix bug in sb8x8 partition context
authorJingning Han <jingning@google.com>
Thu, 2 May 2013 05:26:08 +0000 (22:26 -0700)
committerJingning Han <jingning@google.com>
Thu, 2 May 2013 05:34:27 +0000 (22:34 -0700)
Fix the issue that causes array bound excess in getting partition
context.

Change-Id: I66166f047f0bcaefebb0bcf441c5b1f777d8da44

vp9/common/vp9_blockd.h

index 4f07afc..fb0d2d0 100644 (file)
@@ -498,7 +498,7 @@ static INLINE void update_partition_context(MACROBLOCKD *xd,
 
 static INLINE int partition_plane_context(MACROBLOCKD *xd,
                                           BLOCK_SIZE_TYPE sb_type) {
-  int bsl = mi_width_log2(sb_type), bs = 1 << bsl;
+  int bsl = mi_width_log2(sb_type), bs;
   int above = 0, left = 0, i;
   int boffset = mi_width_log2(BLOCK_SIZE_SB64X64) - bsl;
 
@@ -506,6 +506,12 @@ static INLINE int partition_plane_context(MACROBLOCKD *xd,
   assert(bsl >= 0);
   assert(boffset >= 0);
 
+#if CONFIG_SB8X8
+  bs = 1 << (bsl - 1);
+#else
+  bs = 1 << bsl;
+#endif
+
   for (i = 0; i < bs; i++)
     above |= (xd->above_seg_context[i] & (1 << boffset));
   for (i = 0; i < bs; i++)