ref: 879a2f053d9ff9d596e939688940fe365bccac38
parent: 1e26cdc178e6731b2e8bf8db882f6fb15c7021d5
author: Jingning Han <[email protected]>
date: Thu May 2 10:38:01 EDT 2013
Fix state update in sb8x8 rate-distortion loop Update mode_info of 8x8 blocks within the scope of current block. Change-Id: I110c599e60664a5acde6afd919b107cea8419a0d
--- a/vp9/encoder/vp9_bitstream.c
+++ b/vp9/encoder/vp9_bitstream.c
@@ -715,11 +715,10 @@
// If segment skip is not enabled code the mode.
if (!vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) {
#if CONFIG_SB8X8
- if (mi->sb_type > BLOCK_SIZE_SB8X8)
+ if (mi->sb_type > BLOCK_SIZE_SB8X8) {
#else
- if (mi->sb_type > BLOCK_SIZE_MB16X16)
+ if (mi->sb_type > BLOCK_SIZE_MB16X16) {
#endif
- {
write_sb_mv_ref(bc, mode, mv_ref_p);
} else {
write_mv_ref(bc, mode, mv_ref_p);
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -488,12 +488,15 @@
mbmi->best_mv.as_int = best_mv.as_int;
mbmi->best_second_mv.as_int = best_second_mv.as_int;
vp9_update_nmv_count(cpi, x, &best_mv, &best_second_mv);
+ }
#if CONFIG_SB8X8
- xd->mode_info_context[1].mbmi =
- xd->mode_info_context[mis].mbmi =
- xd->mode_info_context[1 + mis].mbmi = *mbmi;
-#endif
+ if (bsize > BLOCK_SIZE_SB8X8 && mbmi->mode == NEWMV) {
+ int i, j;
+ for (j = 0; j < bh; ++j)
+ for (i = 0; i < bw; ++i)
+ xd->mode_info_context[mis * j + i].mbmi = *mbmi;
}
+#endif
#if CONFIG_COMP_INTERINTRA_PRED
if (mbmi->mode >= NEARESTMV && mbmi->mode < SPLITMV &&
mbmi->second_ref_frame <= INTRA_FRAME) {