} else if (tx_size == TX_8X8) {
eobtotal = vp9_decode_mb_tokens_8x8(pbi, xd, bc);
} else {
- eobtotal = vp9_decode_mb_tokens(pbi, xd, bc);
+ eobtotal = vp9_decode_mb_tokens_4x4(pbi, xd, bc);
}
if (eobtotal == 0) { // skip loopfilter
xd->mode_info_context->mbmi.mb_skip_coeff = 1;
eobtotal = vp9_decode_mb_tokens_16x16(pbi, xd, bc);
} else if (tx_size == TX_8X8) {
eobtotal = vp9_decode_mb_tokens_8x8(pbi, xd, bc);
- } else if (mode != B_PRED) {
- eobtotal = vp9_decode_mb_tokens(pbi, xd, bc);
+ } else {
+ eobtotal = vp9_decode_mb_tokens_4x4(pbi, xd, bc);
}
}
/* do prediction */
if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) {
if (mode != I8X8_PRED) {
- if (mode != B_PRED) {
- vp9_build_intra_predictors_mbuv(xd);
- }
+ vp9_build_intra_predictors_mbuv(xd);
if (mode != B_PRED) {
vp9_build_intra_predictors_mby(xd);
}
xd->mode_info_context->bmi[i].as_mode.context = b->bmi.as_mode.context =
vp9_find_bpred_context(b);
#endif
- if (!xd->mode_info_context->mbmi.mb_skip_coeff)
- eobtotal += vp9_decode_coefs_4x4(pbi, xd, bc, PLANE_TYPE_Y_WITH_DC, i);
#if CONFIG_COMP_INTRA_PRED
b_mode2 = xd->mode_info_context->bmi[i].as_mode.second;
*(b->base_dst) + b->dst, 16, b->dst_stride);
}
}
- if (!xd->mode_info_context->mbmi.mb_skip_coeff) {
- for (i = 16; i < 24; ++i)
- eobtotal += vp9_decode_coefs_4x4(pbi, xd, bc, PLANE_TYPE_UV, i);
- }
- vp9_build_intra_predictors_mbuv(xd);
- pbi->idct_add_uv_block(xd->qcoeff + 16 * 16, xd->block[16].dequant,
- xd->predictor + 16 * 16, xd->dst.u_buffer,
- xd->dst.v_buffer, xd->dst.uv_stride, xd->eobs + 16);
} else if (mode == SPLITMV) {
if (tx_size == TX_8X8) {
vp9_dequant_idct_add_y_block_8x8(xd->qcoeff, xd->block[0].dequant,
(xd->qcoeff + 16 * 16, xd->block[16].dequant,
xd->predictor + 16 * 16, xd->dst.u_buffer, xd->dst.v_buffer,
xd->dst.uv_stride, xd->eobs + 16, xd);
- else if (xd->mode_info_context->mbmi.mode != I8X8_PRED &&
- xd->mode_info_context->mbmi.mode != B_PRED)
+ else if (xd->mode_info_context->mbmi.mode != I8X8_PRED)
pbi->idct_add_uv_block(xd->qcoeff + 16 * 16, xd->block[16].dequant,
xd->predictor + 16 * 16, xd->dst.u_buffer, xd->dst.v_buffer,
xd->dst.uv_stride, xd->eobs + 16);
return eobtotal;
}
-int vp9_decode_coefs_4x4(VP9D_COMP *dx, MACROBLOCKD *xd,
- BOOL_DECODER* const bc, int type, int i) {
+static int decode_coefs_4x4(VP9D_COMP *dx, MACROBLOCKD *xd,
+ BOOL_DECODER* const bc,
+ PLANE_TYPE type, int i) {
ENTROPY_CONTEXT *const A = (ENTROPY_CONTEXT *)xd->above_context;
ENTROPY_CONTEXT *const L = (ENTROPY_CONTEXT *)xd->left_context;
ENTROPY_CONTEXT *const a = A + vp9_block2above[i];
INT16 *qcoeff_ptr = &xd->qcoeff[0];
const int *scan = vp9_default_zig_zag1d;
unsigned short *const eobs = xd->eobs;
- int c, seg_eob;
- TX_TYPE tx_type = DCT_DCT;
int segment_id = xd->mode_info_context->mbmi.segment_id;
-
- seg_eob = get_eob(xd, segment_id, 16);
-
- if (i == 24)
- type = PLANE_TYPE_Y2;
- else if (i >= 16)
- type = PLANE_TYPE_UV;
+ int c, seg_eob = get_eob(xd, segment_id, 16);
+ TX_TYPE tx_type = DCT_DCT;
if (type == PLANE_TYPE_Y_WITH_DC)
tx_type = get_tx_type(xd, &xd->block[i]);
return c;
}
-int vp9_decode_mb_tokens(VP9D_COMP* const dx,
- MACROBLOCKD* const xd,
- BOOL_DECODER* const bc) {
- int i, type, eobtotal = 0;
+int vp9_decode_mb_tokens_4x4(VP9D_COMP* const dx,
+ MACROBLOCKD* const xd,
+ BOOL_DECODER* const bc) {
+ int i, eobtotal = 0;
+ PLANE_TYPE type;
if (xd->mode_info_context->mbmi.mode != B_PRED &&
xd->mode_info_context->mbmi.mode != I8X8_PRED &&
xd->mode_info_context->mbmi.mode != SPLITMV) {
-
- eobtotal += vp9_decode_coefs_4x4(dx, xd, bc, PLANE_TYPE_Y2, 24) - 16;
-
+ eobtotal += decode_coefs_4x4(dx, xd, bc, PLANE_TYPE_Y2, 24) - 16;
type = PLANE_TYPE_Y_NO_DC;
} else {
type = PLANE_TYPE_Y_WITH_DC;
}
- for (i = 0; i < 24; ++i) {
- eobtotal += vp9_decode_coefs_4x4(dx, xd, bc, type, i);
+ for (i = 0; i < 16; ++i) {
+ eobtotal += decode_coefs_4x4(dx, xd, bc, type, i);
}
+ do {
+ eobtotal += decode_coefs_4x4(dx, xd, bc, PLANE_TYPE_UV, i);
+ } while (++i < 24);
return eobtotal;
}
#include "onyxd_int.h"
void vp9_reset_mb_tokens_context(MACROBLOCKD* const);
-int vp9_decode_mb_tokens(VP9D_COMP* const, MACROBLOCKD* const,
- BOOL_DECODER* const);
+
+int vp9_decode_mb_tokens_4x4(VP9D_COMP* const, MACROBLOCKD* const,
+ BOOL_DECODER* const);
+
int vp9_decode_mb_tokens_8x8(VP9D_COMP* const, MACROBLOCKD* const,
BOOL_DECODER* const);
+
int vp9_decode_mb_tokens_16x16(VP9D_COMP* const, MACROBLOCKD* const,
BOOL_DECODER* const);
-int vp9_decode_coefs_4x4(VP9D_COMP *dx, MACROBLOCKD *xd, BOOL_DECODER* const bc,
- int type, int i);
#endif /* DETOKENIZE_H */