Refactor prune_ref_by_selective_ref_frame

The function prune_ref_by_selective_ref_frame is
refactored in order to facilitate reference frame
pruning in tpl mode estimation.

Change-Id: Iae0f3aa86b726185df980a992936793d8d937b1c
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index daea2aa..ec8e1b3 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4901,7 +4901,9 @@
       if (ref_buf[frame]->y_crop_width == cpi->source->y_crop_width &&
           ref_buf[frame]->y_crop_height == cpi->source->y_crop_height &&
           do_gm_search_logic(&cpi->sf, num_refs_using_gm, frame) &&
-          !prune_ref_by_selective_ref_frame(cpi, ref_frame) &&
+          !prune_ref_by_selective_ref_frame(
+              cpi, ref_frame, cm->cur_frame->ref_display_order_hint,
+              cm->current_frame.display_order_hint) &&
           !(cpi->sf.selective_ref_gm && skip_gm_frame(cm, frame))) {
         assert(ref_buf[frame] != NULL);
         if (num_frm_corners < 0) {
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index ab3e631..83866b6 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -11885,7 +11885,10 @@
     }
   }
 
-  if (prune_ref_by_selective_ref_frame(cpi, ref_frame)) return 1;
+  if (prune_ref_by_selective_ref_frame(cpi, ref_frame,
+                                       cm->cur_frame->ref_display_order_hint,
+                                       cm->current_frame.display_order_hint))
+    return 1;
 
   if (skip_motion_mode) return 2;
 
diff --git a/av1/encoder/rdopt.h b/av1/encoder/rdopt.h
index bd1671a..bdb0844 100644
--- a/av1/encoder/rdopt.h
+++ b/av1/encoder/rdopt.h
@@ -352,30 +352,29 @@
 }
 
 static INLINE int prune_ref_by_selective_ref_frame(
-    const AV1_COMP *const cpi, const MV_REFERENCE_FRAME *const ref_frame) {
+    const AV1_COMP *const cpi, const MV_REFERENCE_FRAME *const ref_frame,
+    const unsigned int *const ref_display_order_hint,
+    const unsigned int cur_frame_display_order_hint) {
   const SPEED_FEATURES *const sf = &cpi->sf;
   if (sf->selective_ref_frame) {
     const AV1_COMMON *const cm = &cpi->common;
     const OrderHintInfo *const order_hint_info =
         &cm->seq_params.order_hint_info;
-    const CurrentFrame *const current_frame = &cm->current_frame;
     const int comp_pred = ref_frame[1] > INTRA_FRAME;
     if (sf->selective_ref_frame >= 2 ||
         (sf->selective_ref_frame == 1 && comp_pred)) {
       if (ref_frame[0] == LAST3_FRAME || ref_frame[1] == LAST3_FRAME) {
         if (av1_encoder_get_relative_dist(
                 order_hint_info,
-                cm->cur_frame->ref_display_order_hint[LAST3_FRAME - LAST_FRAME],
-                cm->cur_frame
-                    ->ref_display_order_hint[GOLDEN_FRAME - LAST_FRAME]) <= 0)
+                ref_display_order_hint[LAST3_FRAME - LAST_FRAME],
+                ref_display_order_hint[GOLDEN_FRAME - LAST_FRAME]) <= 0)
           return 1;
       }
       if (ref_frame[0] == LAST2_FRAME || ref_frame[1] == LAST2_FRAME) {
         if (av1_encoder_get_relative_dist(
                 order_hint_info,
-                cm->cur_frame->ref_display_order_hint[LAST2_FRAME - LAST_FRAME],
-                cm->cur_frame
-                    ->ref_display_order_hint[GOLDEN_FRAME - LAST_FRAME]) <= 0)
+                ref_display_order_hint[LAST2_FRAME - LAST_FRAME],
+                ref_display_order_hint[GOLDEN_FRAME - LAST_FRAME]) <= 0)
           return 1;
       }
     }
@@ -389,9 +388,9 @@
         ref_offsets[i] = buf->display_order_hint;
       }
       const int ref0_dist = av1_encoder_get_relative_dist(
-          order_hint_info, ref_offsets[0], current_frame->display_order_hint);
+          order_hint_info, ref_offsets[0], cur_frame_display_order_hint);
       const int ref1_dist = av1_encoder_get_relative_dist(
-          order_hint_info, ref_offsets[1], current_frame->display_order_hint);
+          order_hint_info, ref_offsets[1], cur_frame_display_order_hint);
       if ((ref0_dist <= 0 && ref1_dist <= 0) ||
           (ref0_dist > 0 && ref1_dist > 0)) {
         return 1;
@@ -402,16 +401,14 @@
       if (ref_frame[0] == ALTREF2_FRAME || ref_frame[1] == ALTREF2_FRAME)
         if (av1_encoder_get_relative_dist(
                 order_hint_info,
-                cm->cur_frame
-                    ->ref_display_order_hint[ALTREF2_FRAME - LAST_FRAME],
-                current_frame->display_order_hint) < 0)
+                ref_display_order_hint[ALTREF2_FRAME - LAST_FRAME],
+                cur_frame_display_order_hint) < 0)
           return 1;
       if (ref_frame[0] == BWDREF_FRAME || ref_frame[1] == BWDREF_FRAME)
         if (av1_encoder_get_relative_dist(
                 order_hint_info,
-                cm->cur_frame
-                    ->ref_display_order_hint[BWDREF_FRAME - LAST_FRAME],
-                current_frame->display_order_hint) < 0)
+                ref_display_order_hint[BWDREF_FRAME - LAST_FRAME],
+                cur_frame_display_order_hint) < 0)
           return 1;
     }
 
@@ -422,13 +419,11 @@
           (cpi->ref_frame_flags & av1_ref_frame_flag_list[BWDREF_FRAME])) {
         // Check if both ALTREF2_FRAME and BWDREF_FRAME are future references.
         const int arf2_dist = av1_encoder_get_relative_dist(
-            order_hint_info,
-            cm->cur_frame->ref_display_order_hint[ALTREF2_FRAME - LAST_FRAME],
-            current_frame->display_order_hint);
+            order_hint_info, ref_display_order_hint[ALTREF2_FRAME - LAST_FRAME],
+            cur_frame_display_order_hint);
         const int bwd_dist = av1_encoder_get_relative_dist(
-            order_hint_info,
-            cm->cur_frame->ref_display_order_hint[BWDREF_FRAME - LAST_FRAME],
-            current_frame->display_order_hint);
+            order_hint_info, ref_display_order_hint[BWDREF_FRAME - LAST_FRAME],
+            cur_frame_display_order_hint);
         if (arf2_dist > 0 && bwd_dist > 0 && bwd_dist <= arf2_dist) {
           // Drop ALTREF2_FRAME as a reference if BWDREF_FRAME is a closer
           // reference to the current frame than ALTREF2_FRAME