Increase the frame number at show frames

Make the frame number increment consistent among key frame and
regular frames.

STATS_CHANGED

Change-Id: I306b54a70570f05af100b9b1452e14afd60ef223
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 31a5731..3a83b76 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -1395,25 +1395,3 @@
 
   return AOM_CODEC_OK;
 }
-
-// Determine whether a frame is a keyframe arf. Will return 0 for fwd kf arf.
-// Note it depends on frame_since_key and gf_group, therefore should be called
-// after the gf group is defined, or otherwise a keyframe arf may still return
-// 0.
-int av1_check_keyframe_arf(int gf_index, GF_GROUP *gf_group,
-                           int frame_since_key) {
-  if (gf_index >= gf_group->size) return 0;
-  return gf_group->update_type[gf_index] == ARF_UPDATE &&
-         gf_group->update_type[gf_index + 1] == OVERLAY_UPDATE &&
-         frame_since_key == 0;
-}
-
-// Determine whether a frame is a keyframe overlay (will also return 0 for fwd
-// kf overlays).
-int av1_check_keyframe_overlay(int gf_index, GF_GROUP *gf_group,
-                               int frame_since_key) {
-  if (gf_index < 1) return 0;
-  return gf_group->update_type[gf_index - 1] == ARF_UPDATE &&
-         gf_group->update_type[gf_index] == OVERLAY_UPDATE &&
-         frame_since_key == 0;
-}
diff --git a/av1/encoder/encode_strategy.h b/av1/encoder/encode_strategy.h
index 4bafb0a..351e8a1 100644
--- a/av1/encoder/encode_strategy.h
+++ b/av1/encoder/encode_strategy.h
@@ -84,11 +84,6 @@
 int is_forced_keyframe_pending(struct lookahead_ctx *lookahead,
                                const int up_to_index,
                                const COMPRESSOR_STAGE compressor_stage);
-
-int av1_check_keyframe_arf(int gf_index, GF_GROUP *gf_group,
-                           int frame_since_key);
-int av1_check_keyframe_overlay(int gf_index, GF_GROUP *gf_group,
-                               int frame_since_key);
 /*!\endcond */
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index ef97b90..d1caa1e 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -2920,12 +2920,7 @@
                                    cm->cur_frame->buf.y_crop_height);
     }
 
-    // current_frame->frame_number is incremented already for
-    // keyframe overlays.
-    if (!av1_check_keyframe_overlay(cpi->gf_group.index, &cpi->gf_group,
-                                    cpi->rc.frames_since_key))
-      ++current_frame->frame_number;
-
+    ++current_frame->frame_number;
     return AOM_CODEC_OK;
   }
 
@@ -3170,16 +3165,7 @@
   // A droppable frame might not be shown but it always
   // takes a space in the gf group. Therefore, even when
   // it is not shown, we still need update the count down.
-  if (cm->show_frame) {
-    // Don't increment frame counters if this is a key frame overlay
-    if (!av1_check_keyframe_overlay(cpi->gf_group.index, &cpi->gf_group,
-                                    cpi->rc.frames_since_key))
-      ++current_frame->frame_number;
-  } else if (av1_check_keyframe_arf(cpi->gf_group.index, &cpi->gf_group,
-                                    cpi->rc.frames_since_key)) {
-    // TODO(bohanli) Hack here: increment kf overlay before it is encoded
-    ++current_frame->frame_number;
-  }
+  if (cm->show_frame) ++current_frame->frame_number;
 
   return AOM_CODEC_OK;
 }
@@ -3214,14 +3200,8 @@
   if (current_frame->frame_type == KEY_FRAME && !cpi->no_show_fwd_kf)
     current_frame->frame_number = 0;
 
-  if (av1_check_keyframe_overlay(cpi->gf_group.index, &cpi->gf_group,
-                                 cpi->rc.frames_since_key)) {
-    current_frame->order_hint =
-        current_frame->frame_number + frame_params->order_offset - 1;
-  } else {
-    current_frame->order_hint =
-        current_frame->frame_number + frame_params->order_offset;
-  }
+  current_frame->order_hint =
+      current_frame->frame_number + frame_params->order_offset;
 
   current_frame->display_order_hint = current_frame->order_hint;
   current_frame->order_hint %=
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index 27cdf50..1e8dad7 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -2672,7 +2672,7 @@
   TWO_PASS *const twopass = &cpi->twopass;
 
   if (cpi->oxcf.rc_cfg.mode != AOM_Q && current_frame->frame_number == 0 &&
-      cpi->twopass.stats_buf_ctx->total_stats &&
+      cpi->gf_group.index == 0 && cpi->twopass.stats_buf_ctx->total_stats &&
       cpi->twopass.stats_buf_ctx->total_left_stats) {
     if (cpi->lap_enabled) {
       /*
@@ -2726,10 +2726,6 @@
         log((this_frame->frame_avg_wavelet_energy / num_mbs) + 1.0);
   }
 
-  // Update the total stats remaining structure.
-  if (twopass->stats_buf_ctx->total_left_stats)
-    subtract_stats(twopass->stats_buf_ctx->total_left_stats, this_frame);
-
   // Set the frame content type flag.
   if (this_frame->intra_skip_pct >= FC_ANIMATION_THRESH)
     twopass->fr_content_type = FC_GRAPHICS_ANIMATION;
@@ -2907,7 +2903,6 @@
 
     rc->frames_till_gf_update_due = rc->baseline_gf_interval;
     assert(gf_group->index == 0);
-
 #if ARF_STATS_OUTPUT
     {
       FILE *fpfile;
@@ -2925,8 +2920,14 @@
   assert(gf_group->index < gf_group->size);
 
   if (gf_group->update_type[gf_group->index] == ARF_UPDATE ||
-      gf_group->update_type[gf_group->index] == INTNL_ARF_UPDATE)
+      gf_group->update_type[gf_group->index] == INTNL_ARF_UPDATE) {
     reset_fpf_position(twopass, start_pos);
+  } else {
+    // Update the total stats remaining structure.
+    if (twopass->stats_buf_ctx->total_left_stats)
+      subtract_stats(twopass->stats_buf_ctx->total_left_stats,
+                     &this_frame_copy);
+  }
 
   frame_params->frame_type = gf_group->frame_type[gf_group->index];
 
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index a9ad30c..aa6fa6a 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -977,11 +977,7 @@
     frame_params.show_existing_frame =
         frame_update_type == INTNL_OVERLAY_UPDATE ||
         frame_update_type == OVERLAY_UPDATE;
-    frame_params.frame_type =
-        (frame_update_type == KF_UPDATE ||
-         av1_check_keyframe_arf(gf_index, gf_group, cpi->rc.frames_since_key))
-            ? KEY_FRAME
-            : INTER_FRAME;
+    frame_params.frame_type = gf_group->frame_type[gf_index];
 
     if (frame_update_type == LF_UPDATE)
       *pframe_qindex = gf_group->q_val[gf_index];