AV1 levels: use display rate from decoder model
BUG=aomedia:2332
Change-Id: I2ce9c7f4145280e09907431876deb2473a55ede1
diff --git a/av1/encoder/level.c b/av1/encoder/level.c
index 085c690..a182268 100644
--- a/av1/encoder/level.c
+++ b/av1/encoder/level.c
@@ -748,8 +748,8 @@
static TARGET_LEVEL_FAIL_ID check_level_constraints(
const AV1LevelInfo *const level_info, AV1_LEVEL level, int tier,
int is_still_picture, BITSTREAM_PROFILE profile) {
- const DECODER_MODEL_STATUS decoder_model_status =
- level_info->decoder_models[level].status;
+ const DECODER_MODEL *const decoder_model = &level_info->decoder_models[level];
+ const DECODER_MODEL_STATUS decoder_model_status = decoder_model->status;
if (decoder_model_status != DECODER_MODEL_OK &&
decoder_model_status != DECODER_MODEL_DISABLED) {
return DECODER_MODEL_FAIL;
@@ -790,11 +790,15 @@
break;
}
- if (level_spec->max_display_rate > target_level_spec->max_display_rate) {
+ if (decoder_model->max_display_rate >
+ (double)target_level_spec->max_display_rate) {
fail_id = DISPLAY_RATE_TOO_HIGH;
break;
}
+ // TODO(huisu): we are not using max decode rate calculated by the decoder
+ // model because the model in resource availability mode always returns
+ // MaxDecodeRate(as in the level definitions) as the max decode rate.
if (level_spec->max_decode_rate > target_level_spec->max_decode_rate) {
fail_id = DECODE_RATE_TOO_HIGH;
break;
@@ -1008,6 +1012,9 @@
}
level_spec->max_header_rate =
AOMMAX(level_spec->max_header_rate, frame_headers);
+ // TODO(huisu): we can now compute max display rate with the decoder model, so
+ // these couple of lines can be removed. Keep them here for a while for
+ // debugging purpose.
level_spec->max_display_rate =
AOMMAX(level_spec->max_display_rate, display_samples);
level_spec->max_decode_rate =