From fff019cea4308fc3c776d7426f315d46a7120ac5 Mon Sep 17 00:00:00 2001
From: Yaowu Xu <yaowu@google.com>
Date: Thu, 20 Sep 2012 12:41:59 -0700
Subject: [PATCH] fixed inconsistency of transform size decision

for MBs using i8x8 prediciton mode when hybridtransform8x8 is not
enabled in configure.

Change-Id: I3e3c8bb1c0261108c1c71213ca9557b0ce558036
---
 vp8/common/blockd.h       | 32 ++------------------------------
 vp8/decoder/decodframe.c  | 13 +++++++++++--
 vp8/encoder/encodeframe.c |  9 +++++++++
 3 files changed, 22 insertions(+), 32 deletions(-)

diff --git a/vp8/common/blockd.h b/vp8/common/blockd.h
index 57dacf841f..96345c2bde 100644
--- a/vp8/common/blockd.h
+++ b/vp8/common/blockd.h
@@ -479,34 +479,6 @@ static void txfm_map(BLOCKD *b, B_PREDICTION_MODE bmode) {
       break;
   }
 }
-
-static TX_TYPE get_tx_type(MACROBLOCKD *xd, BLOCKD *b) {
-  TX_TYPE tx_type = DCT_DCT;
-#if CONFIG_HYBRIDTRANSFORM16X16
-  if (xd->mode_info_context->mbmi.txfm_size == TX_16X16) {
-    if (xd->mode_info_context->mbmi.mode < I8X8_PRED &&
-        xd->q_index < ACTIVE_HT16)
-      tx_type = b->bmi.as_mode.tx_type;
-    return tx_type;
-  }
-#endif
-#if CONFIG_HYBRIDTRANSFORM8X8
-  if (xd->mode_info_context->mbmi.txfm_size  == TX_8X8) {
-    if (xd->mode_info_context->mbmi.mode == I8X8_PRED)
-      tx_type = b->bmi.as_mode.tx_type;
-    return tx_type;
-  }
-#endif
-#if CONFIG_HYBRIDTRANSFORM
-  if (xd->mode_info_context->mbmi.txfm_size  == TX_4X4) {
-    if (xd->mode_info_context->mbmi.mode == B_PRED &&
-        xd->q_index < ACTIVE_HT)
-      tx_type = b->bmi.as_mode.tx_type;
-    return tx_type;
-  }
-#endif
-  return tx_type;
-}
 #endif
 
 extern void vp8_build_block_doffsets(MACROBLOCKD *xd);
@@ -516,8 +488,8 @@ static void update_blockd_bmi(MACROBLOCKD *xd) {
   int i;
   int is_4x4;
   is_4x4 = (xd->mode_info_context->mbmi.mode == SPLITMV) ||
-      (xd->mode_info_context->mbmi.mode == I8X8_PRED) ||
-      (xd->mode_info_context->mbmi.mode == B_PRED);
+           (xd->mode_info_context->mbmi.mode == I8X8_PRED) ||
+           (xd->mode_info_context->mbmi.mode == B_PRED);
 
   if (is_4x4) {
     for (i = 0; i < 16; i++) {
diff --git a/vp8/decoder/decodframe.c b/vp8/decoder/decodframe.c
index 80efa58026..e2d0223889 100644
--- a/vp8/decoder/decodframe.c
+++ b/vp8/decoder/decodframe.c
@@ -243,6 +243,9 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
     else
 #endif
       if (pbi->common.txfm_mode == ALLOW_8X8 &&
+#if !CONFIG_HYBRIDTRANSFORM8X8
+          xd->mode_info_context->mbmi.mode != I8X8_PRED &&
+#endif
         xd->mode_info_context->mbmi.mode != B_PRED)
       xd->mode_info_context->mbmi.txfm_size = TX_8X8;
     else
@@ -258,6 +261,9 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
     else
 #endif
       if (pbi->common.txfm_mode == ALLOW_8X8 &&
+#if !CONFIG_HYBRIDTRANSFORM8X8
+        xd->mode_info_context->mbmi.mode != I8X8_PRED &&
+#endif
         xd->mode_info_context->mbmi.mode != B_PRED &&
         xd->mode_info_context->mbmi.mode != SPLITMV)
       xd->mode_info_context->mbmi.txfm_size = TX_8X8;
@@ -616,8 +622,11 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
 #if CONFIG_SUPERBLOCKS
     if (!xd->mode_info_context->mbmi.encoded_as_sb) {
 #endif
-      if ((tx_type == TX_8X8 &&
-           xd->mode_info_context->mbmi.mode != I8X8_PRED)
+      if ((tx_type == TX_8X8
+#if CONFIG_HYBRIDTRANSFORM8X8
+           && xd->mode_info_context->mbmi.mode != I8X8_PRED
+#endif
+           )
 #if CONFIG_TX16X16 || CONFIG_HYBRIDTRANSFORM16X16
       || tx_type == TX_16X16
 #endif
diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c
index e25b64305d..0d125ec941 100644
--- a/vp8/encoder/encodeframe.c
+++ b/vp8/encoder/encodeframe.c
@@ -1833,6 +1833,9 @@ void vp8cx_encode_intra_macro_block(VP8_COMP *cpi,
   else
 #endif
   if (cpi->common.txfm_mode == ALLOW_8X8
+#if !CONFIG_HYBRIDTRANSFORM8X8
+      && mbmi->mode != I8X8_PRED
+#endif
       && mbmi->mode != B_PRED) {
     mbmi->txfm_size = TX_8X8;
     cpi->t8x8_count++;
@@ -1929,6 +1932,9 @@ void vp8cx_encode_inter_macroblock (VP8_COMP *cpi, MACROBLOCK *x,
   } else
 #endif
   if (cpi->common.txfm_mode == ALLOW_8X8
+#if !CONFIG_HYBRIDTRANSFORM8X8
+      && mbmi->mode != I8X8_PRED
+#endif
       && mbmi->mode != B_PRED
       && mbmi->mode != SPLITMV) {
     mbmi->txfm_size = TX_8X8;
@@ -2109,6 +2115,9 @@ void vp8cx_encode_inter_superblock(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t,
 
   /* test code: set transform size based on mode selection */
   if (cpi->common.txfm_mode == ALLOW_8X8
+#if !CONFIG_HYBRIDTRANSFORM8X8
+      && x->e_mbd.mode_info_context->mbmi.mode != I8X8_PRED
+#endif
       && x->e_mbd.mode_info_context->mbmi.mode != B_PRED
       && x->e_mbd.mode_info_context->mbmi.mode != SPLITMV) {
     x->e_mbd.mode_info_context->mbmi.txfm_size = TX_8X8;
-- 
GitLab