Speed feature to turn off cctx at speed > 1 (#135)

The significant run time increase in long unit tests (#135) is
mostly because cctx is on for high speed configs. Here we turn
it off for speed >= 2 to resolve this issue.

Change-Id: Ib175a5aae943bb8857b69d196b85275856cccdd0
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 7edbf48..f05e447 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -392,6 +392,9 @@
   sf->tx_sf.model_based_prune_tx_search_level = 1;
   sf->tx_sf.tx_type_search.use_reduced_intra_txset = 1;
   sf->tx_sf.tx_type_search.skip_stx_search = 0;
+#if CONFIG_CROSS_CHROMA_TX
+  sf->tx_sf.tx_type_search.skip_cctx_search = 0;
+#endif  // CONFIG_CROSS_CHROMA_TX
 
   if (cpi->twopass.fr_content_type == FC_HIGHMOTION ||
       cpi->is_screen_content_type) {
@@ -490,6 +493,9 @@
 
     // TODO(Sachin): Enable/Enhance this speed feature for speed 2 & 3
     sf->tx_sf.tx_type_search.skip_stx_search = 1;
+#if CONFIG_CROSS_CHROMA_TX
+    sf->tx_sf.tx_type_search.skip_cctx_search = 1;
+#endif  // CONFIG_CROSS_CHROMA_TX
     sf->intra_sf.disable_smooth_intra =
         !frame_is_intra_only(&cpi->common) || (cpi->rc.frames_to_key != 1);
 
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 54f139e..efe6241 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -235,6 +235,10 @@
   int winner_mode_tx_type_pruning;
   // Speed feature to disable intra secondary transform
   int skip_stx_search;
+#if CONFIG_CROSS_CHROMA_TX
+  // Speed feature to disable cross chroma component transform
+  int skip_cctx_search;
+#endif  // CONFIG_CROSS_CHROMA_TX
 } TX_TYPE_SEARCH;
 
 enum {
diff --git a/av1/encoder/tx_search.c b/av1/encoder/tx_search.c
index 26da00c..c72d794 100644
--- a/av1/encoder/tx_search.c
+++ b/av1/encoder/tx_search.c
@@ -2861,7 +2861,8 @@
   // Intra mode needs decoded pixels such that the next transform block
   // can use them for prediction. If cctx is enabled, this reconstruction
   // should be done later in search_cctx_type, when cctx type is chosen.
-  if (plane == AOM_PLANE_Y || !is_cctx_allowed(cm, xd)) {
+  if (plane == AOM_PLANE_Y || !is_cctx_allowed(cm, xd) ||
+      cpi->sf.tx_sf.tx_type_search.skip_cctx_search) {
     recon_intra(cpi, x, plane, block, blk_row, blk_col, plane_bsize, tx_size,
                 txb_ctx, skip_trellis, best_tx_type, 0, &rate_cost, best_eob);
     p->dqcoeff = orig_dqcoeff;
@@ -4606,7 +4607,8 @@
   const TX_SIZE uv_tx_size = av1_get_tx_size(AOM_PLANE_U, xd);
   int is_cost_valid = 1;
 #if CONFIG_CROSS_CHROMA_TX
-  if (is_cctx_allowed(&cpi->common, xd)) {
+  if (is_cctx_allowed(&cpi->common, xd) &&
+      !cpi->sf.tx_sf.tx_type_search.skip_cctx_search) {
     RD_STATS this_rd_stats;
     int64_t chroma_ref_best_rd = ref_best_rd;
     if (cpi->sf.inter_sf.perform_best_rd_based_gating_for_chroma && is_inter &&