ref: e931dac733665970949138933b73621e55b321cd
parent: 06df1f82fbec9edfdf596d86f5dd2e7ecba7de7e
author: Ronald S. Bultje <[email protected]>
date: Thu May 2 09:00:33 EDT 2013
Fix i4x4 mode reading and writing in sb8x8 bitstream. Don't allow i4x4 except for sb8x8 recursion step. Read only 4 (not 16) i4x4 submodes if we are i4x4. Change-Id: Iaaaced1a134006b2c96eed66f014300eae41e0ed
--- a/vp9/decoder/vp9_decodemv.c
+++ b/vp9/decoder/vp9_decodemv.c
@@ -968,7 +968,12 @@
// required for left and above block mv
mv0->as_int = 0;
- if (mbmi->sb_type > BLOCK_SIZE_MB16X16) {
+#if CONFIG_SB8X8
+ if (mbmi->sb_type > BLOCK_SIZE_SB8X8)
+#else
+ if (mbmi->sb_type > BLOCK_SIZE_MB16X16)
+#endif
+ {
mbmi->mode = read_sb_ymode(r, cm->fc.sb_ymode_prob);
cm->fc.sb_ymode_counts[mbmi->mode]++;
} else {
@@ -986,7 +991,7 @@
if (m == B_CONTEXT_PRED) m -= CONTEXT_PRED_REPLACEMENTS;
#endif
cm->fc.bmode_counts[m]++;
- } while (++j < 16);
+ } while (++j < (16 >> (2 * CONFIG_SB8X8)));
}
#if !CONFIG_SB8X8
--- a/vp9/encoder/vp9_bitstream.c
+++ b/vp9/encoder/vp9_bitstream.c
@@ -722,7 +722,11 @@
active_section = 6;
#endif
+#if CONFIG_SB8X8
+ if (m->mbmi.sb_type > BLOCK_SIZE_SB8X8)
+#else
if (m->mbmi.sb_type > BLOCK_SIZE_MB16X16)
+#endif
write_sb_ymode(bc, mode, pc->fc.sb_ymode_prob);
else
write_ymode(bc, mode, pc->fc.ymode_prob);
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -2073,7 +2073,12 @@
#endif
#endif
- if (xd->mode_info_context->mbmi.sb_type > BLOCK_SIZE_MB16X16) {
+#if CONFIG_SB8X8
+ if (xd->mode_info_context->mbmi.sb_type > BLOCK_SIZE_SB8X8)
+#else
+ if (xd->mode_info_context->mbmi.sb_type > BLOCK_SIZE_MB16X16)
+#endif
+ {
++cpi->sb_ymode_count[m];
} else {
++cpi->ymode_count[m];