[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);