Initialize level info. before each sequence

Before this patch, the level info. structure is only initialized once at
encoder creation.

BUG=aomedia:2332

Change-Id: I15141eda5509e266e19472e52e9fd171a173a10a
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 818e43c..c79d511 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -2548,21 +2548,6 @@
   }
 }
 
-static void init_level_info(AV1LevelInfo *level_info) {
-  memset(level_info, 0, MAX_NUM_OPERATING_POINTS * sizeof(*level_info));
-  for (int i = 0; i < MAX_NUM_OPERATING_POINTS; ++i) {
-    AV1LevelSpec *const level_spec = &level_info[i].level_spec;
-    level_spec->level = SEQ_LEVEL_MAX;
-    AV1LevelStats *const level_stats = &level_info[i].level_stats;
-    level_stats->min_cropped_tile_width = INT_MAX;
-    level_stats->min_cropped_tile_height = INT_MAX;
-    level_stats->min_frame_width = INT_MAX;
-    level_stats->min_frame_height = INT_MAX;
-    level_stats->tile_width_is_valid = 1;
-    level_stats->min_cr = 1e8;
-  }
-}
-
 AV1_COMP *av1_create_compressor(AV1EncoderConfig *oxcf,
                                 BufferPool *const pool) {
   unsigned int i;
@@ -2624,7 +2609,7 @@
 
   cpi->refresh_alt_ref_frame = 0;
 
-  init_level_info(cpi->level_info);
+  av1_init_level_info(cpi->level_info);
 
   cpi->b_calculate_psnr = CONFIG_INTERNAL_STATS;
 #if CONFIG_INTERNAL_STATS
@@ -5477,8 +5462,14 @@
       generate_psnr_packet(cpi);
     }
   }
-  if (cpi->keep_level_stats && oxcf->pass != 1)
+
+  if (cpi->keep_level_stats && oxcf->pass != 1) {
+    // Initialize level info. at the beginning of each sequence.
+    if (cm->current_frame.frame_type == KEY_FRAME && cm->show_frame) {
+      av1_init_level_info(cpi->level_info);
+    }
     av1_update_level_info(cpi, *size, *time_stamp, *time_end);
+  }
 
 #if CONFIG_INTERNAL_STATS
   if (oxcf->pass != 1) {
diff --git a/av1/encoder/level.c b/av1/encoder/level.c
index aadbcd1..6f43d06 100644
--- a/av1/encoder/level.c
+++ b/av1/encoder/level.c
@@ -262,6 +262,21 @@
   "The product of max tile size and header rate is too high.",
 };
 
+void av1_init_level_info(AV1LevelInfo *level_info) {
+  memset(level_info, 0, MAX_NUM_OPERATING_POINTS * sizeof(*level_info));
+  for (int i = 0; i < MAX_NUM_OPERATING_POINTS; ++i) {
+    AV1LevelSpec *const level_spec = &level_info[i].level_spec;
+    level_spec->level = SEQ_LEVEL_MAX;
+    AV1LevelStats *const level_stats = &level_info[i].level_stats;
+    level_stats->min_cropped_tile_width = INT_MAX;
+    level_stats->min_cropped_tile_height = INT_MAX;
+    level_stats->min_frame_width = INT_MAX;
+    level_stats->min_frame_height = INT_MAX;
+    level_stats->tile_width_is_valid = 1;
+    level_stats->min_cr = 1e8;
+  }
+}
+
 static double get_min_cr(const AV1LevelSpec *const level_spec, int tier,
                          int is_still_picture, int64_t decoded_sample_rate) {
   if (is_still_picture) return 0.8;
diff --git a/av1/encoder/level.h b/av1/encoder/level.h
index 9f1664d..b2c1156 100644
--- a/av1/encoder/level.h
+++ b/av1/encoder/level.h
@@ -71,6 +71,8 @@
   AV1LevelSpec level_spec;
 } AV1LevelInfo;
 
+void av1_init_level_info(AV1LevelInfo *level_info);
+
 void av1_update_level_info(struct AV1_COMP *cpi, size_t size, int64_t ts_start,
                            int64_t ts_end);