From: Dmitry Kovalev Date: Mon, 1 Jul 2013 21:58:06 +0000 (-0700) Subject: Merge "Inlining decode_atom, decode_sb_intra, and decode_sb." X-Git-Tag: v1.3.0~976 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=33fffc155e3c7cfdf53de347d0c7355edb4a695c;p=libvpx Merge "Inlining decode_atom, decode_sb_intra, and decode_sb." --- 33fffc155e3c7cfdf53de347d0c7355edb4a695c diff --cc vp9/decoder/vp9_decodframe.c index 5238658d0,befa23823..f4e80fe7e --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@@ -294,17 -255,35 +255,35 @@@ static void decode_modes_b(VP9D_COMP *p return; set_offsets(pbi, bsize, mi_row, mi_col); - vp9_decode_mb_mode_mv(pbi, xd, mi_row, mi_col, r); + vp9_read_mode_info(pbi, mi_row, mi_col, r); - if (xd->mode_info_context->mbmi.ref_frame[0] == INTRA_FRAME) { - decode_sb_intra(pbi, mi_row, mi_col, r, - (bsize < BLOCK_SIZE_SB8X8) ? BLOCK_SIZE_SB8X8 : bsize); + if (less8x8) + bsize = BLOCK_SIZE_SB8X8; + + // Has to be called after set_offsets + mbmi = &xd->mode_info_context->mbmi; + + if (mbmi->ref_frame[0] == INTRA_FRAME) { + // Intra reconstruction + decode_tokens(pbi, bsize, r); + foreach_transformed_block(xd, bsize, decode_block_intra, xd); } else { + // Inter reconstruction + int eobtotal; set_refs(pbi, mi_row, mi_col); - if (bsize < BLOCK_SIZE_SB8X8) - decode_atom(pbi, mi_row, mi_col, r); - else - decode_sb(pbi, mi_row, mi_col, r, bsize); + 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) + vp9_set_pred_flag(xd, bsize, PRED_MBSKIP, 1); // skip loopfilter + else if (eobtotal > 0) + foreach_transformed_block(xd, bsize, decode_block, xd); + } } xd->corrupted |= vp9_reader_has_error(r); }