[NORMATIVE] level_idx=31, initial_display_delay

BUG=aomedia:1980, aomedia:1977

Change-Id: I869a0ce2081ed08266a8497facfde5cf312ffbdb
diff --git a/av1/common/timing.c b/av1/common/timing.c
index f6fc1b7..5ff538a 100644
--- a/av1/common/timing.c
+++ b/av1/common/timing.c
@@ -16,18 +16,21 @@
  * Note that depending on the profile, a multiplier is needed.
  */
 
-/* Max Bitrates for levels of Main Tier in kbps */
-static int main_kbps[1 << LEVEL_BITS] = {
-  1500, 3000,  0,     0,     6000,  10000, 0,      0,      12000,  20000, 0,
-  0,    30000, 40000, 60000, 60000, 60000, 100000, 160000, 160000, 0,     0,
-  0,    0,     0,     0,     0,     0,     0,      0,      0,      0
+/* Max Bitrates for levels of Main Tier in kbps. Bitrate in main_kbps [31] */
+/* is a dummy value. The decoder model is not applicable for level 31. */
+static int32_t main_kbps[1 << LEVEL_BITS] = {
+  1500, 3000,  0,     0,     6000,  10000, 0,      0,      12000,  20000,    0,
+  0,    30000, 40000, 60000, 60000, 60000, 100000, 160000, 160000, 0,        0,
+  0,    0,     0,     0,     0,     0,     0,      0,      0,      (1 << 26)
 };
 
-/* Max Bitrates for levels of High Tier in kbps */
-static int high_kbps[1 << LEVEL_BITS] = {
-  0, 0,      0,      0,      0,      0,      0,      0,      30000,  50000, 0,
-  0, 100000, 160000, 240000, 240000, 240000, 480000, 800000, 800000, 0,     0,
-  0, 0,      0,      0,      0,      0,      0,      0,      0,      0
+/* Max Bitrates for levels of High Tier in kbps. Bitrate in high_kbps [31] */
+/* is a dummy value. The decoder model is not applicable for level 31. */
+static int32_t high_kbps[1 << LEVEL_BITS] = {
+  0,      0,      0,      0,      0,      0,      0,      0,
+  30000,  50000,  0,      0,      100000, 160000, 240000, 240000,
+  240000, 480000, 800000, 800000, 0,      0,      0,      0,
+  0,      0,      0,      0,      0,      0,      0,      (1 << 26)
 };
 
 /* BitrateProfileFactor */
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c
index 409b351..3c73671 100644
--- a/av1/decoder/obu.c
+++ b/av1/decoder/obu.c
@@ -254,10 +254,13 @@
         cm->op_params[i].bitrate = max_level_bitrate(
             cm->profile, major_minor_to_seq_level_idx(seq_params->level[i]),
             seq_params->tier[i]);
+        // Level with seq_level_idx = 31 returns a high "dummy" bitrate to pass
+        // the check
         if (cm->op_params[i].bitrate == 0)
           aom_internal_error(&cm->error, AOM_CODEC_UNSUP_BITSTREAM,
                              "AV1 does not support this combination of "
                              "profile, level, and tier.");
+        // Buffer size in bits/s is bitrate in bits/s * 1 s
         cm->op_params[i].buffer_size = cm->op_params[i].bitrate;
       }
       if (cm->timing_info_present && cm->timing_info.equal_picture_interval &&
@@ -278,9 +281,12 @@
             aom_internal_error(
                 &cm->error, AOM_CODEC_UNSUP_BITSTREAM,
                 "AV1 does not support more than 10 decoded frames delay");
+        } else {
+          cm->op_params[i].initial_display_delay = 10;
         }
       } else {
         cm->op_params[i].display_model_param_present_flag = 0;
+        cm->op_params[i].initial_display_delay = 10;
       }
     }
   }
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 33601dc..196e18d 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -942,10 +942,13 @@
     // level, and tier
     cm->op_params[i].bitrate = max_level_bitrate(
         cm->profile, major_minor_to_seq_level_idx(seq->level[i]), seq->tier[i]);
+    // Level with seq_level_idx = 31 returns a high "dummy" bitrate to pass the
+    // check
     if (cm->op_params[i].bitrate == 0)
       aom_internal_error(
           &cm->error, AOM_CODEC_UNSUP_BITSTREAM,
           "AV1 does not support this combination of profile, level, and tier.");
+    // Buffer size in bits/s is bitrate in bits/s * 1 s
     cm->op_params[i].buffer_size = cm->op_params[i].bitrate;
   }
 }
@@ -1037,7 +1040,11 @@
              !cm->seq_params.decoder_model_info_present_flag) {
     // set the decoder model parameters in resource availability mode
     set_resource_availability_parameters(&cm->op_params[0]);
+  } else {
+    cm->op_params[0].initial_display_delay =
+        10;  // Default value (not signaled)
   }
+
   cm->width = oxcf->width;
   cm->height = oxcf->height;
   set_sb_size(&cm->seq_params,
@@ -2286,6 +2293,9 @@
              !cm->seq_params.decoder_model_info_present_flag) {
     // set the decoder model parameters in resource availability mode
     set_resource_availability_parameters(&cm->op_params[0]);
+  } else {
+    cm->op_params[0].initial_display_delay =
+        10;  // Default value (not signaled)
   }
 
   update_film_grain_parameters(cpi, oxcf);