summaryrefslogtreecommitdiff
path: root/vp8/decoder/decodemv.c
diff options
context:
space:
mode:
Diffstat (limited to 'vp8/decoder/decodemv.c')
-rw-r--r--vp8/decoder/decodemv.c47
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) {