Populate display_idx of GF_GROUP

In this CL, set_multi_layer_params() is modified to populate the
GF_GROUP member 'display_idx' which tracks the display_order_hint
of the frames in a sub-gop.

BUG=aomedia:3372

Change-Id: I3039fce5b665f9eea58d0051f3d316bb4c4d4435
diff --git a/av1/encoder/gop_structure.c b/av1/encoder/gop_structure.c
index e0208c9..e3878aa 100644
--- a/av1/encoder/gop_structure.c
+++ b/av1/encoder/gop_structure.c
@@ -437,7 +437,7 @@
     RATE_CONTROL *rc, FRAME_INFO *frame_info, int start, int end,
     int *cur_frame_idx, int *frame_ind, int *parallel_frame_count,
     int max_parallel_frames, int do_frame_parallel_encode,
-    int *first_frame_index, int layer_depth) {
+    int *first_frame_index, int *cur_disp_idx, int layer_depth) {
   const int num_frames_to_process = end - start;
 
   // Either we are at the last level of the pyramid, or we don't have enough
@@ -449,6 +449,7 @@
       gf_group->update_type[*frame_ind] = LF_UPDATE;
       gf_group->arf_src_offset[*frame_ind] = 0;
       gf_group->cur_frame_idx[*frame_ind] = *cur_frame_idx;
+      gf_group->display_idx[*frame_ind] = *cur_disp_idx;
       gf_group->layer_depth[*frame_ind] = MAX_ARF_LAYERS;
       gf_group->arf_boost[*frame_ind] =
           av1_calc_arf_boost(twopass, twopass_frame, p_rc, frame_info, start,
@@ -467,6 +468,7 @@
       set_src_offset(gf_group, first_frame_index, *cur_frame_idx, *frame_ind);
       ++(*frame_ind);
       ++(*cur_frame_idx);
+      ++(*cur_disp_idx);
       ++start;
     }
   } else {
@@ -476,6 +478,8 @@
     gf_group->update_type[*frame_ind] = INTNL_ARF_UPDATE;
     gf_group->arf_src_offset[*frame_ind] = m - start;
     gf_group->cur_frame_idx[*frame_ind] = *cur_frame_idx;
+    gf_group->display_idx[*frame_ind] =
+        *cur_disp_idx + gf_group->arf_src_offset[*frame_ind];
     gf_group->layer_depth[*frame_ind] = layer_depth;
     gf_group->frame_type[*frame_ind] = INTER_FRAME;
     gf_group->refbuf_state[*frame_ind] = REFBUF_UPDATE;
@@ -499,15 +503,17 @@
     ++(*frame_ind);
 
     // Frames displayed before this internal ARF.
-    set_multi_layer_params(
-        twopass, twopass_frame, gf_group, p_rc, rc, frame_info, start, m,
-        cur_frame_idx, frame_ind, parallel_frame_count, max_parallel_frames,
-        do_frame_parallel_encode, first_frame_index, layer_depth + 1);
+    set_multi_layer_params(twopass, twopass_frame, gf_group, p_rc, rc,
+                           frame_info, start, m, cur_frame_idx, frame_ind,
+                           parallel_frame_count, max_parallel_frames,
+                           do_frame_parallel_encode, first_frame_index,
+                           cur_disp_idx, layer_depth + 1);
 
     // Overlay for internal ARF.
     gf_group->update_type[*frame_ind] = INTNL_OVERLAY_UPDATE;
     gf_group->arf_src_offset[*frame_ind] = 0;
     gf_group->cur_frame_idx[*frame_ind] = *cur_frame_idx;
+    gf_group->display_idx[*frame_ind] = *cur_disp_idx;
     gf_group->arf_boost[*frame_ind] = 0;
     gf_group->layer_depth[*frame_ind] = layer_depth;
     gf_group->frame_type[*frame_ind] = INTER_FRAME;
@@ -516,12 +522,14 @@
     set_src_offset(gf_group, first_frame_index, *cur_frame_idx, *frame_ind);
     ++(*frame_ind);
     ++(*cur_frame_idx);
+    ++(*cur_disp_idx);
 
     // Frames displayed after this internal ARF.
-    set_multi_layer_params(
-        twopass, twopass_frame, gf_group, p_rc, rc, frame_info, m + 1, end,
-        cur_frame_idx, frame_ind, parallel_frame_count, max_parallel_frames,
-        do_frame_parallel_encode, first_frame_index, layer_depth + 1);
+    set_multi_layer_params(twopass, twopass_frame, gf_group, p_rc, rc,
+                           frame_info, m + 1, end, cur_frame_idx, frame_ind,
+                           parallel_frame_count, max_parallel_frames,
+                           do_frame_parallel_encode, first_frame_index,
+                           cur_disp_idx, layer_depth + 1);
   }
 }
 
@@ -721,11 +729,12 @@
 
   // Rest of the frames.
   if (!is_multi_layer_configured)
-    set_multi_layer_params(
-        twopass, &cpi->twopass_frame, gf_group, p_rc, rc, frame_info,
-        cur_frame_index, gf_interval, &cur_frame_index, &frame_index,
-        &parallel_frame_count, cpi->ppi->num_fp_contexts,
-        do_frame_parallel_encode, &first_frame_index, use_altref + 1);
+    set_multi_layer_params(twopass, &cpi->twopass_frame, gf_group, p_rc, rc,
+                           frame_info, cur_frame_index, gf_interval,
+                           &cur_frame_index, &frame_index,
+                           &parallel_frame_count, cpi->ppi->num_fp_contexts,
+                           do_frame_parallel_encode, &first_frame_index,
+                           &cur_disp_index, use_altref + 1);
 
   if (use_altref) {
     gf_group->update_type[frame_index] = OVERLAY_UPDATE;