diff --git a/vp9/common/vp9_pred_common.c b/vp9/common/vp9_pred_common.c index 81fbf1f2664ee7ef03cf809da44d7a54cedb8328..e89683150de5026ab8793dcd214e248ce4abb5d2 100644 --- a/vp9/common/vp9_pred_common.c +++ b/vp9/common/vp9_pred_common.c @@ -392,11 +392,6 @@ void vp9_set_pred_flag_seg_id(MACROBLOCKD *xd, uint8_t pred_flag) { xd->this_mi->mbmi.seg_id_predicted = pred_flag; } -void vp9_set_pred_flag_mbskip(MACROBLOCKD *xd, BLOCK_SIZE bsize, - uint8_t pred_flag) { - xd->this_mi->mbmi.skip_coeff = pred_flag; -} - int vp9_get_segment_id(VP9_COMMON *cm, const uint8_t *segment_ids, BLOCK_SIZE bsize, int mi_row, int mi_col) { const int mi_offset = mi_row * cm->mi_cols + mi_col; diff --git a/vp9/common/vp9_pred_common.h b/vp9/common/vp9_pred_common.h index 3ec9f3416daa843f8d2c031a5cd32710dc08841c..9230c4531d332310333b02d3da1b4d8904a7899c 100644 --- a/vp9/common/vp9_pred_common.h +++ b/vp9/common/vp9_pred_common.h @@ -52,9 +52,6 @@ static INLINE unsigned char vp9_get_pred_flag_mbskip(const MACROBLOCKD *xd) { return xd->this_mi->mbmi.skip_coeff; } -void vp9_set_pred_flag_mbskip(MACROBLOCKD *xd, BLOCK_SIZE bsize, - uint8_t pred_flag); - unsigned char vp9_get_pred_context_switchable_interp(const MACROBLOCKD *xd); unsigned char vp9_get_pred_context_intra_inter(const MACROBLOCKD *xd); diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c index 77fec5061ffa7e2e55bb88e13b73b4a018ea74b0..fa56859dc3be3abbe00b4167d12ea8f1536ec94d 100644 --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@ -219,6 +219,7 @@ static void decode_modes_b(VP9D_COMP *pbi, int mi_row, int mi_col, MACROBLOCKD *const xd = &pbi->mb; const int less8x8 = bsize < BLOCK_8X8; MB_MODE_INFO *mbmi; + int eobtotal; if (less8x8) if (xd->ab_index > 0) @@ -232,14 +233,20 @@ static void decode_modes_b(VP9D_COMP *pbi, int mi_row, int mi_col, // Has to be called after set_offsets mbmi = &xd->this_mi->mbmi; + eobtotal = decode_tokens(pbi, bsize, r); if (!is_inter_block(mbmi)) { // Intra reconstruction - decode_tokens(pbi, bsize, r); foreach_transformed_block(xd, bsize, decode_block_intra, xd); } else { // Inter reconstruction - int eobtotal; + const int decode_blocks = (eobtotal > 0); + + if (!less8x8) { + assert(mbmi->sb_type == bsize); + if (eobtotal == 0) + mbmi->skip_coeff = 1; // skip loopfilter + } set_ref(pbi, 0, mi_row, mi_col); if (has_second_ref(mbmi)) @@ -247,18 +254,9 @@ static void decode_modes_b(VP9D_COMP *pbi, int mi_row, int mi_col, vp9_setup_interp_filters(xd, mbmi->interp_filter, cm); vp9_build_inter_predictors_sb(xd, mi_row, mi_col, bsize); - eobtotal = decode_tokens(pbi, bsize, r); - if (less8x8) { - if (eobtotal >= 0) - foreach_transformed_block(xd, bsize, decode_block, xd); - } else { - assert(mbmi->sb_type == bsize); - if (eobtotal == 0) - // skip loopfilter - vp9_set_pred_flag_mbskip(xd, bsize, 1); - else if (eobtotal > 0) - foreach_transformed_block(xd, bsize, decode_block, xd); - } + + if (decode_blocks) + foreach_transformed_block(xd, bsize, decode_block, xd); } xd->corrupted |= vp9_reader_has_error(r); }