Skip redundant call to intra_model_yrd

Removed redundant intra_model_yrd calculation in
calc_rd_for_given_intra_angle()

            Encode Time
Cpu-used    Reduction(%)
  1           0.32
  2           0.29
  3           0.71
  4           0.44

Change-Id: I7732d7990ec6969c2f8c7653b22f2bd4490269a6
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 0f492c2..35ba214 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -4408,18 +4408,20 @@
     int mi_col, int mode_cost, int64_t best_rd_in, int8_t angle_delta,
     int max_angle_delta, int *rate, RD_STATS *rd_stats, int *best_angle_delta,
     TX_SIZE *best_tx_size, int64_t *best_rd, int64_t *best_model_rd,
-    TX_TYPE *best_txk_type, uint8_t *best_blk_skip) {
+    TX_TYPE *best_txk_type, uint8_t *best_blk_skip, int skip_model_rd) {
   RD_STATS tokenonly_rd_stats;
   int64_t this_rd, this_model_rd;
   MB_MODE_INFO *mbmi = x->e_mbd.mi[0];
   const int n4 = bsize_to_num_blk(bsize);
   assert(!is_inter_block(mbmi));
   mbmi->angle_delta[PLANE_TYPE_Y] = angle_delta;
-  this_model_rd = intra_model_yrd(cpi, x, bsize, mode_cost, mi_row, mi_col);
-  if (*best_model_rd != INT64_MAX &&
-      this_model_rd > *best_model_rd + (*best_model_rd >> 1))
-    return INT64_MAX;
-  if (this_model_rd < *best_model_rd) *best_model_rd = this_model_rd;
+  if (!skip_model_rd) {
+    this_model_rd = intra_model_yrd(cpi, x, bsize, mode_cost, mi_row, mi_col);
+    if (*best_model_rd != INT64_MAX &&
+        this_model_rd > *best_model_rd + (*best_model_rd >> 1))
+      return INT64_MAX;
+    if (this_model_rd < *best_model_rd) *best_model_rd = this_model_rd;
+  }
   super_block_yrd(cpi, x, &tokenonly_rd_stats, bsize, best_rd_in);
   if (tokenonly_rd_stats.rate == INT_MAX) return INT64_MAX;
 
@@ -4449,7 +4451,8 @@
                                        int mi_row, int mi_col, int *rate,
                                        RD_STATS *rd_stats, BLOCK_SIZE bsize,
                                        int mode_cost, int64_t best_rd,
-                                       int64_t *best_model_rd) {
+                                       int64_t *best_model_rd,
+                                       int skip_model_rd_for_zero_deg) {
   MB_MODE_INFO *mbmi = x->e_mbd.mi[0];
   assert(!is_inter_block(mbmi));
 
@@ -4471,7 +4474,8 @@
           cpi, x, bsize, mi_row, mi_col, mode_cost, best_rd_in,
           (1 - 2 * i) * angle_delta, MAX_ANGLE_DELTA, rate, rd_stats,
           &best_angle_delta, &best_tx_size, &best_rd, best_model_rd,
-          best_txk_type, best_blk_skip);
+          best_txk_type, best_blk_skip,
+          (skip_model_rd_for_zero_deg & !angle_delta));
       rd_cost[2 * angle_delta + i] = this_rd;
       if (first_try && this_rd == INT64_MAX) return best_rd;
       first_try = 0;
@@ -4491,11 +4495,11 @@
           rd_cost[2 * (angle_delta - 1) + i] > rd_thresh)
         skip_search = 1;
       if (!skip_search) {
-        calc_rd_given_intra_angle(cpi, x, bsize, mi_row, mi_col, mode_cost,
-                                  best_rd, (1 - 2 * i) * angle_delta,
-                                  MAX_ANGLE_DELTA, rate, rd_stats,
-                                  &best_angle_delta, &best_tx_size, &best_rd,
-                                  best_model_rd, best_txk_type, best_blk_skip);
+        calc_rd_given_intra_angle(
+            cpi, x, bsize, mi_row, mi_col, mode_cost, best_rd,
+            (1 - 2 * i) * angle_delta, MAX_ANGLE_DELTA, rate, rd_stats,
+            &best_angle_delta, &best_tx_size, &best_rd, best_model_rd,
+            best_txk_type, best_blk_skip, 0);
       }
     }
   }
@@ -4732,7 +4736,7 @@
       this_rd_stats.rate = INT_MAX;
       rd_pick_intra_angle_sby(cpi, x, mi_row, mi_col, &this_rate,
                               &this_rd_stats, bsize, bmode_costs[mbmi->mode],
-                              best_rd, &best_model_rd);
+                              best_rd, &best_model_rd, 1);
     } else {
       super_block_yrd(cpi, x, &this_rd_stats, bsize, best_rd);
     }
@@ -11963,7 +11967,7 @@
     rd_stats_y->rate = INT_MAX;
     rd_pick_intra_angle_sby(cpi, x, mi_row, mi_col, &rate_dummy, rd_stats_y,
                             bsize, intra_mode_cost[mbmi->mode],
-                            search_state->best_rd, &model_rd);
+                            search_state->best_rd, &model_rd, 0);
   } else {
     av1_init_rd_stats(rd_stats_y);
     mbmi->angle_delta[PLANE_TYPE_Y] = 0;