ref: e85eaf6acd9c446cbfa25b90d2f1b115a0d85843
parent: 54c87058bfa5124408f0725deb8373ef94c4b98e
author: Jingning Han <jingning@google.com>
date: Mon Sep 23 13:06:27 EDT 2013
Remove redundant mode update in sub8x8 decoding The probability model used to code prediction mode is conditioned on the immediate above and left 8x8 blocks' prediction modes. When the above/left block is coded in sub8x8 mode, we use the prediction mode of the bottom-right sub8x8 block as the reference to generate the context. This commit moves the update of mbmi.mode out of the sub8x8 decoding loop, hence removing redundant update steps and keeping the bottom- right block's mode for the decoding process of next blocks. Change-Id: I1e8d749684d201c1a1151697621efa5d569218b6
--- a/vp9/decoder/vp9_decodemv.c
+++ b/vp9/decoder/vp9_decodemv.c
@@ -493,11 +493,12 @@
const int num_4x4_w = num_4x4_blocks_wide_lookup[bsize]; // 1 or 2
const int num_4x4_h = num_4x4_blocks_high_lookup[bsize]; // 1 or 2
int idx, idy;
+ int b_mode;
for (idy = 0; idy < 2; idy += num_4x4_h) {
for (idx = 0; idx < 2; idx += num_4x4_w) {
int_mv blockmv, secondmv;
const int j = idy * 2 + idx;
- const int b_mode = read_inter_mode(cm, r, inter_mode_ctx);
+ b_mode = read_inter_mode(cm, r, inter_mode_ctx);
if (b_mode == NEARESTMV || b_mode == NEARMV) {
vp9_append_sub8x8_mvs_for_idx(cm, xd, &nearest, &nearby, j, 0,
@@ -544,10 +545,10 @@
mi->bmi[j + 2] = mi->bmi[j];
if (num_4x4_w == 2)
mi->bmi[j + 1] = mi->bmi[j];
- mi->mbmi.mode = b_mode;
}
}
+ mi->mbmi.mode = b_mode;
mv0->as_int = mi->bmi[3].as_mv[0].as_int;
mv1->as_int = mi->bmi[3].as_mv[1].as_int;
} else {
--
⑨