Use the target level if it is higher than the inferred one
BUG: b/280510792
Change-Id: I23174d97e30f9e2f057f7435de122bec3cd249f9
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index a9d9761..c8f65c0 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -375,9 +375,7 @@
static void set_bitstream_level_tier(AV1_PRIMARY *const ppi, int width,
int height, double init_framerate) {
SequenceHeader *const seq_params = &ppi->seq_params;
-#if CONFIG_CWG_C013
const AV1LevelParams *const level_params = &ppi->level_params;
-#endif
// TODO(any): This is a placeholder function that only addresses dimensions
// and max display sample rates.
// Need to add checks for max bit rate, max decoded luma sample rate, header
@@ -447,7 +445,15 @@
#endif
for (int i = 0; i < MAX_NUM_OPERATING_POINTS; ++i) {
- seq_params->seq_level_idx[i] = level;
+ assert(is_valid_seq_level_idx(level_params->target_seq_level_idx[i]) ||
+ level_params->target_seq_level_idx[i] == SEQ_LEVEL_KEEP_STATS);
+ // If a higher target level is specified, it is then used rather than the
+ // inferred one from resolution and framerate.
+ seq_params->seq_level_idx[i] =
+ level_params->target_seq_level_idx[i] < SEQ_LEVELS &&
+ level_params->target_seq_level_idx[i] > level
+ ? level_params->target_seq_level_idx[i]
+ : level;
// Set the maximum parameters for bitrate and buffer size for this profile,
// level, and tier
seq_params->op_params[i].bitrate = av1_max_level_bitrate(