shithub: libvpx

Download patch

ref: 3819f11b28b6634c4bb27f22a7cf2ded055bcb2e
parent: b10b8879070ee788731fd06452e602f96efa7d59
author: Jingning Han <jingning@google.com>
date: Thu May 16 09:30:00 EDT 2013

Use b_width_log2_ in partition type parse

Replace mi_width/height_log2 with b_width/height_log2 in partition
type parsing at bit-stream writing stage. This allows parsing
resolution at 4x4 block level and makes the 4x4/4x8/8x4 partition
coding consistent with other superblock types.

Change-Id: I7db3617ea042e0db2dc898999b0c323bff91a22f

--- a/vp9/encoder/vp9_bitstream.c
+++ b/vp9/encoder/vp9_bitstream.c
@@ -887,8 +887,8 @@
   MACROBLOCKD *xd = &cpi->mb.e_mbd;
   const int mis = cm->mode_info_stride;
   int bwl, bhl;
-  int bw, bh;
-  int bsl = mi_width_log2(bsize), bs = (1 << bsl) / 2;
+  int bsl = b_width_log2(bsize);
+  int bs = (1 << bsl) / 4;  // mode_info step for subsize
   int n;
   PARTITION_TYPE partition;
   BLOCK_SIZE_TYPE subsize;
@@ -896,10 +896,8 @@
   if (mi_row >= cm->mi_rows || mi_col >= cm->mi_cols)
     return;
 
-  bwl = mi_width_log2(m->mbmi.sb_type);
-  bhl = mi_height_log2(m->mbmi.sb_type);
-  bw = 1 << bwl;
-  bh = 1 << bhl;
+  bwl = b_width_log2(m->mbmi.sb_type);
+  bhl = b_height_log2(m->mbmi.sb_type);
 
   // parse the partition type
   if ((bwl == bsl) && (bhl == bsl))
@@ -914,8 +912,6 @@
     assert(0);
 
 #if CONFIG_AB4X4
-  if (bsize == BLOCK_SIZE_SB8X8 && m->mbmi.sb_type < BLOCK_SIZE_SB8X8)
-    partition = PARTITION_SPLIT;
   if (bsize < BLOCK_SIZE_SB8X8)
     if (xd->ab_index != 0)
       return;
@@ -943,13 +939,13 @@
       break;
     case PARTITION_HORZ:
       write_modes_b(cpi, m, bc, tok, tok_end, mi_row, mi_col);
-      if ((mi_row + bh) < cm->mi_rows)
-        write_modes_b(cpi, m + bh * mis, bc, tok, tok_end, mi_row + bh, mi_col);
+      if ((mi_row + bs) < cm->mi_rows)
+        write_modes_b(cpi, m + bs * mis, bc, tok, tok_end, mi_row + bs, mi_col);
       break;
     case PARTITION_VERT:
       write_modes_b(cpi, m, bc, tok, tok_end, mi_row, mi_col);
-      if ((mi_col + bw) < cm->mi_cols)
-        write_modes_b(cpi, m + bw, bc, tok, tok_end, mi_row, mi_col + bw);
+      if ((mi_col + bs) < cm->mi_cols)
+        write_modes_b(cpi, m + bs, bc, tok, tok_end, mi_row, mi_col + bs);
       break;
     case PARTITION_SPLIT:
       for (n = 0; n < 4; n++) {