Refactor TimeStamps from AV1_COMP

This CL groups time stamp related variables from
AV1_COMP into a new structure TimeStamps, adds
documentation for the members, and cleans up
function interfaces.

BUG=aomedia:2610

Change-Id: Ice9ebbe030fc947423af19ae7e16271b36c17d7e
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c
index 7cd170b..d978335 100644
--- a/av1/encoder/encode_strategy.c
+++ b/av1/encoder/encode_strategy.c
@@ -308,8 +308,8 @@
   return AOMMIN((MAX_GF_INTERVAL - 1), arf_offset);
 }
 
-static void adjust_frame_rate(AV1_COMP *cpi,
-                              const struct lookahead_entry *source) {
+static void adjust_frame_rate(AV1_COMP *cpi, int64_t ts_start, int64_t ts_end) {
+  TimeStamps *time_stamps = &cpi->time_stamps;
   int64_t this_duration;
   int step = 0;
 
@@ -322,14 +322,14 @@
     return;
   }
 
-  if (source->ts_start == cpi->first_time_stamp_ever) {
-    this_duration = source->ts_end - source->ts_start;
+  if (ts_start == time_stamps->first_ever) {
+    this_duration = ts_end - ts_start;
     step = 1;
   } else {
     int64_t last_duration =
-        cpi->last_end_time_stamp_seen - cpi->last_time_stamp_seen;
+        time_stamps->prev_end_seen - time_stamps->prev_start_seen;
 
-    this_duration = source->ts_end - cpi->last_end_time_stamp_seen;
+    this_duration = ts_end - time_stamps->prev_end_seen;
 
     // do a step update if the duration changes by 10%
     if (last_duration)
@@ -343,8 +343,8 @@
       // Average this frame's rate into the last second's average
       // frame rate. If we haven't seen 1 second yet, then average
       // over the whole interval seen.
-      const double interval = AOMMIN(
-          (double)(source->ts_end - cpi->first_time_stamp_ever), 10000000.0);
+      const double interval =
+          AOMMIN((double)(ts_end - time_stamps->first_ever), 10000000.0);
       double avg_duration = 10000000.0 / cpi->framerate;
       avg_duration *= (interval - avg_duration + this_duration);
       avg_duration /= interval;
@@ -352,8 +352,8 @@
       av1_new_framerate(cpi, 10000000.0 / avg_duration);
     }
   }
-  cpi->last_time_stamp_seen = source->ts_start;
-  cpi->last_end_time_stamp_seen = source->ts_end;
+  time_stamps->prev_start_seen = ts_start;
+  time_stamps->prev_end_seen = ts_end;
 }
 
 // If this is an alt-ref, returns the offset of the source frame used
@@ -1116,9 +1116,9 @@
 
   *time_stamp = source->ts_start;
   *time_end = source->ts_end;
-  if (source->ts_start < cpi->first_time_stamp_ever) {
-    cpi->first_time_stamp_ever = source->ts_start;
-    cpi->last_end_time_stamp_seen = source->ts_start;
+  if (source->ts_start < cpi->time_stamps.first_ever) {
+    cpi->time_stamps.first_ever = source->ts_start;
+    cpi->time_stamps.prev_end_seen = source->ts_start;
   }
 
   av1_apply_encoding_flags(cpi, source->flags);
@@ -1126,7 +1126,8 @@
     *frame_flags = (source->flags & AOM_EFLAG_FORCE_KF) ? FRAMEFLAGS_KEY : 0;
 
   // Shown frames and arf-overlay frames need frame-rate considering
-  if (frame_params.show_frame) adjust_frame_rate(cpi, source);
+  if (frame_params.show_frame)
+    adjust_frame_rate(cpi, source->ts_start, source->ts_end);
 
   if (!frame_params.show_existing_frame) {
     if (cpi->film_grain_table) {
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 1ee38b6..16bd6a0 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -3136,7 +3136,7 @@
   av1_zero(aggregate_fc);
 #endif  // CONFIG_ENTROPY_STATS
 
-  cpi->first_time_stamp_ever = INT64_MAX;
+  cpi->time_stamps.first_ever = INT64_MAX;
 
 #ifdef OUTPUT_YUV_SKINMAP
   yuv_skinmap_file = fopen("skinmap.yuv", "ab");
@@ -3517,7 +3517,7 @@
       char results[512] = { 0 };
       FILE *f = fopen("opsnr.stt", "a");
       double time_encoded =
-          (cpi->last_end_time_stamp_seen - cpi->first_time_stamp_ever) /
+          (cpi->time_stamps.prev_end_seen - cpi->time_stamps.first_ever) /
           10000000.000;
       double total_encode_time =
           (cpi->time_receive_data + cpi->time_compress_data) / 1000.000;
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 539bd35..75165c6 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -948,6 +948,15 @@
   int subsampling_y;
 } FRAME_INFO;
 
+typedef struct {
+  // Start time stamp of the previous frame
+  int64_t prev_start_seen;
+  // End time stamp of the previous frame
+  int64_t prev_end_seen;
+  // Start time stamp of the first frame
+  int64_t first_ever;
+} TimeStamps;
+
 typedef struct AV1_COMP {
   QUANTS quants;
   ThreadData td;
@@ -1031,9 +1040,8 @@
   // Parameters related to winner mode processing.
   WinnerModeParams winner_mode_params;
 
-  int64_t last_time_stamp_seen;
-  int64_t last_end_time_stamp_seen;
-  int64_t first_time_stamp_ever;
+  // Frame time stamps
+  TimeStamps time_stamps;
 
   RATE_CONTROL rc;
   double framerate;
diff --git a/av1/encoder/level.c b/av1/encoder/level.c
index c6fd3e6..3403a3a 100644
--- a/av1/encoder/level.c
+++ b/av1/encoder/level.c
@@ -1073,7 +1073,7 @@
   aom_clear_system_state();
   const double compression_ratio = av1_get_compression_ratio(cm, size);
   const double total_time_encoded =
-      (cpi->last_end_time_stamp_seen - cpi->first_time_stamp_ever) /
+      (cpi->time_stamps.prev_end_seen - cpi->time_stamps.first_ever) /
       (double)TICKS_PER_SEC;
 
   const int temporal_layer_id = cm->temporal_layer_id;