rtc: Dereference search_state.best_pickmode to a local pointer

Used a local pointer to dereference frequently used pointer
search_state.best_pickmode.

Change-Id: I244acde341ec37ff5000704e3994fe5c69cb6482
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 26a8d0d..d65d4ca 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -3692,6 +3692,7 @@
   TxfmSearchInfo *txfm_info = &x->txfm_search_info;
   const ModeCosts *mode_costs = &x->mode_costs;
   const REAL_TIME_SPEED_FEATURES *const rt_sf = &cpi->sf.rt_sf;
+  BEST_PICKMODE *const best_pickmode = &search_state->best_pickmode;
 
   MV_REFERENCE_FRAME ref_frame = mi->ref_frame[0];
   MV_REFERENCE_FRAME ref_frame2 = mi->ref_frame[1];
@@ -3825,11 +3826,10 @@
 #if COLLECT_PICK_MODE_STAT
     aom_usec_timer_start(&ms_stat.timer2);
 #endif
-    search_filter_ref(cpi, x, &search_state->this_rdc, &inter_pred_params_sr,
-                      mi_row, mi_col, tmp_buffer, bsize, reuse_inter_pred,
-                      this_mode_pred, &this_early_term, &var,
-                      use_model_yrd_large, search_state->best_pickmode.best_sse,
-                      is_single_pred);
+    search_filter_ref(
+        cpi, x, &search_state->this_rdc, &inter_pred_params_sr, mi_row, mi_col,
+        tmp_buffer, bsize, reuse_inter_pred, this_mode_pred, &this_early_term,
+        &var, use_model_yrd_large, best_pickmode->best_sse, is_single_pred);
 #if COLLECT_PICK_MODE_STAT
     aom_usec_timer_mark(&ms_stat.timer2);
     ms_stat.ifs_time[bsize][this_mode] +=
@@ -3840,7 +3840,7 @@
              this_mode == NEWMV) {
     search_motion_mode(cpi, x, &search_state->this_rdc, mi_row, mi_col, bsize,
                        &this_early_term, use_model_yrd_large, &rate_mv,
-                       search_state->best_pickmode.best_sse);
+                       best_pickmode->best_sse);
     if (this_mode == NEWMV) {
       this_mv[0] = mi->mv[0];
     }
@@ -3877,8 +3877,7 @@
     if (use_model_yrd_large) {
       model_skip_for_sb_y_large(cpi, bsize, mi_row, mi_col, x, xd,
                                 &search_state->this_rdc, &this_early_term, 0,
-                                search_state->best_pickmode.best_sse, &var,
-                                var_threshold);
+                                best_pickmode->best_sse, &var, var_threshold);
     } else {
       model_rd_for_sb_y(cpi, bsize, x, xd, &search_state->this_rdc, &var, 0,
                         &this_early_term);
@@ -3910,9 +3909,9 @@
   }
 
   if (rt_sf->sse_early_term_inter_search &&
-      early_term_inter_search_with_sse(
-          rt_sf->sse_early_term_inter_search, bsize, search_state->this_rdc.sse,
-          search_state->best_pickmode.best_sse, this_mode)) {
+      early_term_inter_search_with_sse(rt_sf->sse_early_term_inter_search,
+                                       bsize, search_state->this_rdc.sse,
+                                       best_pickmode->best_sse, this_mode)) {
     if (reuse_inter_pred) free_pred_buffer(*this_mode_pred);
     return true;
   }
@@ -4059,21 +4058,20 @@
   if (search_state->this_rdc.rdcost < search_state->best_rdc.rdcost) {
     search_state->best_rdc = search_state->this_rdc;
     *best_early_term = this_early_term;
-    search_state->best_pickmode.best_sse = sse_y;
-    search_state->best_pickmode.best_mode = this_best_mode;
-    search_state->best_pickmode.best_motion_mode = mi->motion_mode;
-    search_state->best_pickmode.wm_params = mi->wm_params;
-    search_state->best_pickmode.num_proj_ref = mi->num_proj_ref;
-    search_state->best_pickmode.best_pred_filter = mi->interp_filters;
-    search_state->best_pickmode.best_tx_size = mi->tx_size;
-    search_state->best_pickmode.best_ref_frame = ref_frame;
-    search_state->best_pickmode.best_second_ref_frame = ref_frame2;
-    search_state->best_pickmode.best_mode_skip_txfm =
-        search_state->this_rdc.skip_txfm;
-    search_state->best_pickmode.best_mode_initial_skip_flag =
+    best_pickmode->best_sse = sse_y;
+    best_pickmode->best_mode = this_best_mode;
+    best_pickmode->best_motion_mode = mi->motion_mode;
+    best_pickmode->wm_params = mi->wm_params;
+    best_pickmode->num_proj_ref = mi->num_proj_ref;
+    best_pickmode->best_pred_filter = mi->interp_filters;
+    best_pickmode->best_tx_size = mi->tx_size;
+    best_pickmode->best_ref_frame = ref_frame;
+    best_pickmode->best_second_ref_frame = ref_frame2;
+    best_pickmode->best_mode_skip_txfm = search_state->this_rdc.skip_txfm;
+    best_pickmode->best_mode_initial_skip_flag =
         (nonskip_rdc.rate == INT_MAX && search_state->this_rdc.skip_txfm);
-    if (!search_state->best_pickmode.best_mode_skip_txfm) {
-      memcpy(search_state->best_pickmode.blk_skip, txfm_info->blk_skip,
+    if (!best_pickmode->best_mode_skip_txfm) {
+      memcpy(best_pickmode->blk_skip, txfm_info->blk_skip,
              sizeof(txfm_info->blk_skip[0]) * num_8x8_blocks);
     }
 
@@ -4086,8 +4084,8 @@
     }
 
     if (reuse_inter_pred) {
-      free_pred_buffer(search_state->best_pickmode.best_pred);
-      search_state->best_pickmode.best_pred = *this_mode_pred;
+      free_pred_buffer(best_pickmode->best_pred);
+      best_pickmode->best_pred = *this_mode_pred;
     }
   } else {
     if (reuse_inter_pred) free_pred_buffer(*this_mode_pred);
@@ -4116,6 +4114,7 @@
   const int bw = block_size_wide[bsize];
   const int num_8x8_blocks = ctx->num_4x4_blk / 4;
   TxfmSearchInfo *txfm_info = &x->txfm_search_info;
+  BEST_PICKMODE *const best_pickmode = &search_state->best_pickmode;
 
   // Check for IDTX: based only on Y channel, so avoid when color_sensitivity
   // is set.
@@ -4124,11 +4123,10 @@
   if (cm->seq_params->bit_depth == 8 &&
       cpi->oxcf.tune_cfg.content == AOM_CONTENT_SCREEN && !skip_idtx_palette &&
       !cpi->oxcf.txfm_cfg.use_inter_dct_only && !x->force_zeromv_skip_for_blk &&
-      is_inter_mode(search_state->best_pickmode.best_mode) &&
+      is_inter_mode(best_pickmode->best_mode) &&
       (!rt_sf->prune_idtx_nonrd ||
        (rt_sf->prune_idtx_nonrd && bsize <= BLOCK_32X32 &&
-        search_state->best_pickmode.best_mode_skip_txfm != 1 &&
-        x->source_variance > 200))) {
+        best_pickmode->best_mode_skip_txfm != 1 && x->source_variance > 200))) {
     RD_STATS idtx_rdc;
     av1_init_rd_stats(&idtx_rdc);
     int is_skippable;
@@ -4144,18 +4142,16 @@
       if (x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_U)] ||
           x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_V)])
         idtx_rdc.skip_txfm = 0;
-      search_state->best_pickmode.tx_type = IDTX;
+      best_pickmode->tx_type = IDTX;
       search_state->best_rdc.rdcost = idx_rdcost;
-      search_state->best_pickmode.best_mode_skip_txfm = idtx_rdc.skip_txfm;
+      best_pickmode->best_mode_skip_txfm = idtx_rdc.skip_txfm;
       if (!idtx_rdc.skip_txfm) {
-        memcpy(search_state->best_pickmode.blk_skip, txfm_info->blk_skip,
+        memcpy(best_pickmode->blk_skip, txfm_info->blk_skip,
                sizeof(txfm_info->blk_skip[0]) * num_8x8_blocks);
       }
-      xd->tx_type_map[0] = search_state->best_pickmode.tx_type;
-      memset(ctx->tx_type_map, search_state->best_pickmode.tx_type,
-             ctx->num_4x4_blk);
-      memset(xd->tx_type_map, search_state->best_pickmode.tx_type,
-             ctx->num_4x4_blk);
+      xd->tx_type_map[0] = best_pickmode->tx_type;
+      memset(ctx->tx_type_map, best_pickmode->tx_type, ctx->num_4x4_blk);
+      memset(xd->tx_type_map, best_pickmode->tx_type, ctx->num_4x4_blk);
     }
     pd->dst = *orig_dst;
   }
@@ -4168,14 +4164,13 @@
                                &search_state->this_rdc,
                                search_state->best_rdc.rdcost);
   if (search_state->this_rdc.rdcost < search_state->best_rdc.rdcost) {
-    search_state->best_pickmode.pmi = mi->palette_mode_info;
-    search_state->best_pickmode.best_mode = DC_PRED;
+    best_pickmode->pmi = mi->palette_mode_info;
+    best_pickmode->best_mode = DC_PRED;
     mi->mv[0].as_int = 0;
     search_state->best_rdc.rate = search_state->this_rdc.rate;
     search_state->best_rdc.dist = search_state->this_rdc.dist;
     search_state->best_rdc.rdcost = search_state->this_rdc.rdcost;
-    search_state->best_pickmode.best_mode_skip_txfm =
-        search_state->this_rdc.skip_txfm;
+    best_pickmode->best_mode_skip_txfm = search_state->this_rdc.skip_txfm;
     // Keep the skip_txfm off if the color_sensitivity is set.
     if (x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_U)] ||
         x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_V)])
@@ -4214,6 +4209,7 @@
       rt_sf->reuse_inter_pred_nonrd && cm->seq_params->bit_depth == AOM_BITS_8;
   InterModeSearchStateNonrd search_state;
   av1_zero(search_state.use_ref_frame_mask);
+  BEST_PICKMODE *const best_pickmode = &search_state.best_pickmode;
 
   const int bh = block_size_high[bsize];
   const int bw = block_size_wide[bsize];
@@ -4386,27 +4382,25 @@
     }
   }
 
-  mi->mode = search_state.best_pickmode.best_mode;
-  mi->motion_mode = search_state.best_pickmode.best_motion_mode;
-  mi->wm_params = search_state.best_pickmode.wm_params;
-  mi->num_proj_ref = search_state.best_pickmode.num_proj_ref;
-  mi->interp_filters = search_state.best_pickmode.best_pred_filter;
-  mi->tx_size = search_state.best_pickmode.best_tx_size;
+  mi->mode = best_pickmode->best_mode;
+  mi->motion_mode = best_pickmode->best_motion_mode;
+  mi->wm_params = best_pickmode->wm_params;
+  mi->num_proj_ref = best_pickmode->num_proj_ref;
+  mi->interp_filters = best_pickmode->best_pred_filter;
+  mi->tx_size = best_pickmode->best_tx_size;
   memset(mi->inter_tx_size, mi->tx_size, sizeof(mi->inter_tx_size));
-  mi->ref_frame[0] = search_state.best_pickmode.best_ref_frame;
-  mi->mv[0].as_int =
-      search_state
-          .frame_mv_best[search_state.best_pickmode.best_mode]
-                        [search_state.best_pickmode.best_ref_frame]
-          .as_int;
+  mi->ref_frame[0] = best_pickmode->best_ref_frame;
+  mi->mv[0].as_int = search_state
+                         .frame_mv_best[best_pickmode->best_mode]
+                                       [best_pickmode->best_ref_frame]
+                         .as_int;
   mi->mv[1].as_int = 0;
-  if (search_state.best_pickmode.best_second_ref_frame > INTRA_FRAME) {
-    mi->ref_frame[1] = search_state.best_pickmode.best_second_ref_frame;
-    mi->mv[1].as_int =
-        search_state
-            .frame_mv_best[search_state.best_pickmode.best_mode]
-                          [search_state.best_pickmode.best_second_ref_frame]
-            .as_int;
+  if (best_pickmode->best_second_ref_frame > INTRA_FRAME) {
+    mi->ref_frame[1] = best_pickmode->best_second_ref_frame;
+    mi->mv[1].as_int = search_state
+                           .frame_mv_best[best_pickmode->best_mode]
+                                         [best_pickmode->best_second_ref_frame]
+                           .as_int;
   }
   // Perform intra prediction search, if the best SAD is above a certain
   // threshold.
@@ -4424,8 +4418,8 @@
     estimate_intra_mode(cpi, x, bsize, best_early_term,
                         search_state.ref_costs_single[INTRA_FRAME],
                         reuse_inter_pred, &orig_dst, tmp_buffer,
-                        &this_mode_pred, &search_state.best_rdc,
-                        &search_state.best_pickmode, ctx);
+                        &this_mode_pred, &search_state.best_rdc, best_pickmode,
+                        ctx);
 
   int skip_idtx_palette = (x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_U)] ||
                            x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_V)]) &&
@@ -4436,8 +4430,7 @@
       !skip_idtx_palette && cpi->oxcf.tool_cfg.enable_palette &&
       av1_allow_palette(cpi->common.features.allow_screen_content_tools,
                         mi->bsize);
-  try_palette = try_palette &&
-                is_mode_intra(search_state.best_pickmode.best_mode) &&
+  try_palette = try_palette && is_mode_intra(best_pickmode->best_mode) &&
                 x->source_variance > 0 && !x->force_zeromv_skip_for_blk &&
                 (cpi->rc.high_source_sad || x->source_variance > 500);
 
@@ -4453,18 +4446,18 @@
 #endif
 
   pd->dst = orig_dst;
-  if (try_palette) mi->palette_mode_info = search_state.best_pickmode.pmi;
-  mi->mode = search_state.best_pickmode.best_mode;
-  mi->ref_frame[0] = search_state.best_pickmode.best_ref_frame;
-  mi->ref_frame[1] = search_state.best_pickmode.best_second_ref_frame;
-  txfm_info->skip_txfm = search_state.best_pickmode.best_mode_skip_txfm;
+  if (try_palette) mi->palette_mode_info = best_pickmode->pmi;
+  mi->mode = best_pickmode->best_mode;
+  mi->ref_frame[0] = best_pickmode->best_ref_frame;
+  mi->ref_frame[1] = best_pickmode->best_second_ref_frame;
+  txfm_info->skip_txfm = best_pickmode->best_mode_skip_txfm;
   if (!txfm_info->skip_txfm) {
     // For inter modes: copy blk_skip from best_pickmode, which is
     // defined for 8x8 blocks. If palette or intra mode was selected
     // as best then blk_skip is already copied into the ctx.
-    if (search_state.best_pickmode.best_mode >= INTRA_MODE_END)
-      memcpy(ctx->blk_skip, search_state.best_pickmode.blk_skip,
-             sizeof(search_state.best_pickmode.blk_skip[0]) * num_8x8_blocks);
+    if (best_pickmode->best_mode >= INTRA_MODE_END)
+      memcpy(ctx->blk_skip, best_pickmode->blk_skip,
+             sizeof(best_pickmode->blk_skip[0]) * num_8x8_blocks);
   }
   if (has_second_ref(mi)) {
     mi->comp_group_idx = 0;
@@ -4476,8 +4469,8 @@
     mi->interp_filters = av1_broadcast_interp_filter(SWITCHABLE_FILTERS);
   }
 
-  if (reuse_inter_pred && search_state.best_pickmode.best_pred != NULL) {
-    PRED_BUFFER *const best_pred = search_state.best_pickmode.best_pred;
+  if (reuse_inter_pred && best_pickmode->best_pred != NULL) {
+    PRED_BUFFER *const best_pred = best_pickmode->best_pred;
     if (best_pred->data != orig_dst.buf && is_inter_mode(mi->mode)) {
       aom_convolve_copy(best_pred->data, best_pred->stride, pd->dst.buf,
                         pd->dst.stride, bw, bh);
@@ -4492,23 +4485,21 @@
     ctx->sb_skip_denoising = 0;
     av1_pickmode_ctx_den_update(
         &ctx_den, zero_last_cost_orig, search_state.ref_costs_single,
-        search_state.frame_mv, reuse_inter_pred, &search_state.best_pickmode);
+        search_state.frame_mv, reuse_inter_pred, best_pickmode);
     av1_denoiser_denoise(cpi, x, mi_row, mi_col, bsize, ctx, &decision,
                          gf_temporal_ref);
     if (denoise_recheck_zeromv)
       recheck_zeromv_after_denoising(
           cpi, mi, x, xd, decision, &ctx_den, search_state.yv12_mb,
-          &search_state.best_rdc, &search_state.best_pickmode, bsize, mi_row,
-          mi_col);
-    search_state.best_pickmode.best_ref_frame = ctx_den.best_ref_frame;
+          &search_state.best_rdc, best_pickmode, bsize, mi_row, mi_col);
+    best_pickmode->best_ref_frame = ctx_den.best_ref_frame;
   }
 #endif
 
   if (cpi->sf.inter_sf.adaptive_rd_thresh && !has_second_ref(mi)) {
     THR_MODES best_mode_idx =
-        mode_idx[search_state.best_pickmode.best_ref_frame]
-                [mode_offset(mi->mode)];
-    if (search_state.best_pickmode.best_ref_frame == INTRA_FRAME) {
+        mode_idx[best_pickmode->best_ref_frame][mode_offset(mi->mode)];
+    if (best_pickmode->best_ref_frame == INTRA_FRAME) {
       // Only consider the modes that are included in the intra_mode_list.
       int intra_modes = sizeof(intra_mode_list) / sizeof(PREDICTION_MODE);
       for (int mode_index = 0; mode_index < intra_modes; mode_index++) {
@@ -4518,8 +4509,7 @@
     } else {
       PREDICTION_MODE this_mode;
       for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) {
-        update_thresh_freq_fact(cpi, x, bsize,
-                                search_state.best_pickmode.best_ref_frame,
+        update_thresh_freq_fact(cpi, x, bsize, best_pickmode->best_ref_frame,
                                 best_mode_idx, this_mode);
       }
     }