summaryrefslogtreecommitdiff
path: root/vp9/decoder/vp9_decodframe.c
diff options
context:
space:
mode:
authorDmitry Kovalev <dkovalev@google.com>2013-07-01 14:58:06 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-07-01 14:58:06 -0700
commit33fffc155e3c7cfdf53de347d0c7355edb4a695c (patch)
treed2db4505e2d72f8c6379619f66a02dd3266a87f3 /vp9/decoder/vp9_decodframe.c
parent2381d4648066c55b8d0460db0f5937ee37fcd63d (diff)
parent1947828c3dda1a2b3f4b22f1023f6d53d422121e (diff)
downloadlibvpx-33fffc155e3c7cfdf53de347d0c7355edb4a695c.tar
libvpx-33fffc155e3c7cfdf53de347d0c7355edb4a695c.tar.gz
libvpx-33fffc155e3c7cfdf53de347d0c7355edb4a695c.tar.bz2
libvpx-33fffc155e3c7cfdf53de347d0c7355edb4a695c.zip
Merge "Inlining decode_atom, decode_sb_intra, and decode_sb."
Diffstat (limited to 'vp9/decoder/vp9_decodframe.c')
-rw-r--r--vp9/decoder/vp9_decodframe.c79
1 files changed, 29 insertions, 50 deletions
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
index 5238658d0..f4e80fe7e 100644
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -185,48 +185,6 @@ static int decode_tokens(VP9D_COMP *pbi, BLOCK_SIZE_TYPE bsize, vp9_reader *r) {
}
}
-static void decode_atom(VP9D_COMP *pbi, int mi_row, int mi_col,
- vp9_reader *r) {
- BLOCK_SIZE_TYPE bsize = BLOCK_SIZE_SB8X8;
- MACROBLOCKD *const xd = &pbi->mb;
- MB_MODE_INFO *const mbmi = &xd->mode_info_context->mbmi;
-
- assert(mbmi->ref_frame[0] != INTRA_FRAME);
- vp9_setup_interp_filters(xd, mbmi->interp_filter, &pbi->common);
- vp9_build_inter_predictors_sb(xd, mi_row, mi_col, bsize);
- if (decode_tokens(pbi, bsize, r) >= 0)
- foreach_transformed_block(xd, bsize, decode_block, xd);
-}
-
-static void decode_sb_intra(VP9D_COMP *pbi, int mi_row, int mi_col,
- vp9_reader *r, BLOCK_SIZE_TYPE bsize) {
- MACROBLOCKD *const xd = &pbi->mb;
- decode_tokens(pbi, bsize, r);
- foreach_transformed_block(xd, bsize, decode_block_intra, xd);
-}
-
-static void decode_sb(VP9D_COMP *pbi, int mi_row, int mi_col, vp9_reader *r,
- BLOCK_SIZE_TYPE bsize) {
- VP9_COMMON *const cm = &pbi->common;
- MACROBLOCKD *const xd = &pbi->mb;
- MODE_INFO *const mi = xd->mode_info_context;
- MB_MODE_INFO *const mbmi = &mi->mbmi;
- int eobtotal;
-
- assert(mbmi->sb_type == bsize);
- assert(mbmi->ref_frame[0] != INTRA_FRAME);
-
- 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 (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);
- }
-}
-
static void set_offsets(VP9D_COMP *pbi, BLOCK_SIZE_TYPE bsize,
int mi_row, int mi_col) {
VP9_COMMON *const cm = &pbi->common;
@@ -287,24 +245,45 @@ static void set_refs(VP9D_COMP *pbi, int mi_row, int mi_col) {
static void decode_modes_b(VP9D_COMP *pbi, int mi_row, int mi_col,
vp9_reader *r, BLOCK_SIZE_TYPE bsize) {
+ VP9_COMMON *const cm = &pbi->common;
MACROBLOCKD *const xd = &pbi->mb;
+ const int less8x8 = bsize < BLOCK_SIZE_SB8X8;
+ MB_MODE_INFO *mbmi;
- if (bsize < BLOCK_SIZE_SB8X8)
+ if (less8x8)
if (xd->ab_index > 0)
return;
set_offsets(pbi, bsize, mi_row, mi_col);
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);
}