diff options
Diffstat (limited to 'vp8/decoder/decodemv.c')
-rw-r--r-- | vp8/decoder/decodemv.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/vp8/decoder/decodemv.c b/vp8/decoder/decodemv.c index 7f7567e4e..ddf5301f9 100644 --- a/vp8/decoder/decodemv.c +++ b/vp8/decoder/decodemv.c @@ -170,6 +170,27 @@ static void vp8_kfread_modes(VP8D_COMP *pbi, m->mbmi.second_uv_mode = (MB_PREDICTION_MODE)(DC_PRED - 1); #endif +#if CONFIG_TX_SELECT + if (cm->txfm_mode == TX_MODE_SELECT && m->mbmi.mb_skip_coeff == 0 && + m->mbmi.mode <= TM_PRED) { + // FIXME(rbultje) code ternary symbol once all experiments are merged + m->mbmi.txfm_size = vp8_read(bc, cm->prob_tx[0]); +#if CONFIG_TX16X16 + if (m->mbmi.txfm_size != TX_4X4) + m->mbmi.txfm_size += vp8_read(bc, cm->prob_tx[1]); +#endif + } else +#endif +#if CONFIG_TX16X16 + if (cm->txfm_mode >= ALLOW_16X16 && m->mbmi.mode <= TM_PRED) { + m->mbmi.txfm_size = TX_16X16; + } else +#endif + if (cm->txfm_mode >= ALLOW_8X8 && m->mbmi.mode != B_PRED) { + m->mbmi.txfm_size = TX_8X8; + } else { + m->mbmi.txfm_size = TX_4X4; + } } #if CONFIG_NEWMVENTROPY @@ -1263,6 +1284,32 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, #endif } +#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 != SPLITMV))) { + // FIXME(rbultje) code ternary symbol once all experiments are merged + mbmi->txfm_size = vp8_read(bc, cm->prob_tx[0]); +#if CONFIG_TX16X16 + if (mbmi->txfm_size != TX_4X4) + mbmi->txfm_size += vp8_read(bc, cm->prob_tx[1]); +#endif + } else +#endif +#if CONFIG_TX16X16 + if (cm->txfm_mode >= ALLOW_16X16 && + ((mbmi->ref_frame == INTRA_FRAME && mbmi->mode <= TM_PRED) || + (mbmi->ref_frame != INTRA_FRAME && mbmi->mode != SPLITMV))) { + mbmi->txfm_size = TX_16X16; + } else +#endif + if (cm->txfm_mode >= ALLOW_8X8 && + ((mbmi->ref_frame == INTRA_FRAME && mbmi->mode != B_PRED) || + (mbmi->ref_frame != INTRA_FRAME && mbmi->mode != SPLITMV))) { + mbmi->txfm_size = TX_8X8; + } else { + mbmi->txfm_size = TX_4X4; + } } void vp8_decode_mode_mvs(VP8D_COMP *pbi) { |