diff options
Diffstat (limited to 'vp8/decoder')
-rw-r--r-- | vp8/decoder/decodemv.c | 8 | ||||
-rw-r--r-- | vp8/decoder/decodframe.c | 46 |
2 files changed, 31 insertions, 23 deletions
diff --git a/vp8/decoder/decodemv.c b/vp8/decoder/decodemv.c index 8a231b220..fa15af9e9 100644 --- a/vp8/decoder/decodemv.c +++ b/vp8/decoder/decodemv.c @@ -172,10 +172,10 @@ static void vp8_kfread_modes(VP8D_COMP *pbi, #if CONFIG_TX_SELECT if (cm->txfm_mode == TX_MODE_SELECT && m->mbmi.mb_skip_coeff == 0 && - m->mbmi.mode <= TM_PRED) { + m->mbmi.mode <= I8X8_PRED) { // FIXME(rbultje) code ternary symbol once all experiments are merged m->mbmi.txfm_size = vp8_read(bc, cm->prob_tx[0]); - if (m->mbmi.txfm_size != TX_4X4) + if (m->mbmi.txfm_size != TX_4X4 && m->mbmi.mode != I8X8_PRED) m->mbmi.txfm_size += vp8_read(bc, cm->prob_tx[1]); } else #endif @@ -1281,11 +1281,11 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, #if CONFIG_TX_SELECT if (cm->txfm_mode == TX_MODE_SELECT && mbmi->mb_skip_coeff == 0 && - ((mbmi->ref_frame == INTRA_FRAME && mbmi->mode <= TM_PRED) || + ((mbmi->ref_frame == INTRA_FRAME && mbmi->mode <= I8X8_PRED) || (mbmi->ref_frame != INTRA_FRAME && mbmi->mode != SPLITMV))) { // FIXME(rbultje) code ternary symbol once all experiments are merged mbmi->txfm_size = vp8_read(bc, cm->prob_tx[0]); - if (mbmi->txfm_size != TX_4X4) + if (mbmi->txfm_size != TX_4X4 && mbmi->mode != I8X8_PRED) mbmi->txfm_size += vp8_read(bc, cm->prob_tx[1]); } else #endif diff --git a/vp8/decoder/decodframe.c b/vp8/decoder/decodframe.c index b2aca859b..3fa6660aa 100644 --- a/vp8/decoder/decodframe.c +++ b/vp8/decoder/decodframe.c @@ -364,10 +364,8 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, if (mode == I8X8_PRED) { for (i = 0; i < 4; i++) { int ib = vp8_i8x8_block[i]; -#if !CONFIG_HYBRIDTRANSFORM8X8 const int iblock[4] = {0, 1, 4, 5}; int j; -#endif int i8x8mode; BLOCKD *b; @@ -381,30 +379,40 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, b = &xd->block[ib]; i8x8mode = b->bmi.as_mode.first; - RECON_INVOKE(RTCD_VTABLE(recon), intra8x8_predict) - (b, i8x8mode, b->predictor); + RECON_INVOKE(RTCD_VTABLE(recon), intra8x8_predict)(b, i8x8mode, + b->predictor); + if (xd->mode_info_context->mbmi.txfm_size == TX_8X8) { #if CONFIG_HYBRIDTRANSFORM8X8 - vp8_ht_dequant_idct_add_8x8_c(b->bmi.as_mode.tx_type, - q, dq, pre, dst, 16, stride); - q += 64; + vp8_ht_dequant_idct_add_8x8_c(b->bmi.as_mode.tx_type, + q, dq, pre, dst, 16, stride); + q += 64; #else - vp8_dequant_idct_add_8x8_c(q, dq, pre, dst, 16, stride); - q += 64; + vp8_dequant_idct_add_8x8_c(q, dq, pre, dst, 16, stride); + q += 64; #endif + } else { + for (j = 0; j < 4; j++) { + b = &xd->block[ib + iblock[j]]; + vp8_dequant_idct_add_c(b->qcoeff, b->dequant, b->predictor, + *(b->base_dst) + b->dst, 16, b->dst_stride); + } + } b = &xd->block[16 + i]; - RECON_INVOKE(RTCD_VTABLE(recon), intra_uv4x4_predict) - (b, i8x8mode, b->predictor); - DEQUANT_INVOKE(&pbi->dequant, idct_add) - (b->qcoeff, b->dequant, b->predictor, - *(b->base_dst) + b->dst, 8, b->dst_stride); + RECON_INVOKE(RTCD_VTABLE(recon), intra_uv4x4_predict)(b, i8x8mode, + b->predictor); + DEQUANT_INVOKE(&pbi->dequant, idct_add)(b->qcoeff, b->dequant, + b->predictor, + *(b->base_dst) + b->dst, 8, + b->dst_stride); b = &xd->block[20 + i]; - RECON_INVOKE(RTCD_VTABLE(recon), intra_uv4x4_predict) - (b, i8x8mode, b->predictor); - DEQUANT_INVOKE(&pbi->dequant, idct_add) - (b->qcoeff, b->dequant, b->predictor, - *(b->base_dst) + b->dst, 8, b->dst_stride); + RECON_INVOKE(RTCD_VTABLE(recon), intra_uv4x4_predict)(b, i8x8mode, + b->predictor); + DEQUANT_INVOKE(&pbi->dequant, idct_add)(b->qcoeff, b->dequant, + b->predictor, + *(b->base_dst) + b->dst, 8, + b->dst_stride); } } else if (mode == B_PRED) { for (i = 0; i < 16; i++) { |