From 8f29b42670c88b3f0eda0f297ad254a0822ac860 Mon Sep 17 00:00:00 2001 From: Wan-Teh Chang Date: Wed, 15 Mar 2023 18:39:57 -0700 Subject: [PATCH] Validate encoder_settings_.qpMax MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit libaom uses the quantizer as an index for an array of size 64, so encoder_settings_.qpMax must be <= 63. Add a comment to LibaomAv1Encoder::SetSvcParams() to explain why the method doesn't initialize svc_params.layer_target_bitrate. Bug: None Change-Id: I26be80de005752214365abbe8b9b32dc976cee0b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/293680 Reviewed-by: Erik Språng Reviewed-by: Danil Chapovalov Commit-Queue: Wan-Teh Chang Cr-Commit-Position: refs/heads/main@{#39572} --- modules/video_coding/codecs/av1/libaom_av1_encoder.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/video_coding/codecs/av1/libaom_av1_encoder.cc b/modules/video_coding/codecs/av1/libaom_av1_encoder.cc index 55695180de..d9c3041003 100644 --- a/modules/video_coding/codecs/av1/libaom_av1_encoder.cc +++ b/modules/video_coding/codecs/av1/libaom_av1_encoder.cc @@ -146,6 +146,9 @@ int32_t VerifyCodecSettings(const VideoCodec& codec_settings) { if (codec_settings.maxFramerate < 1) { return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; } + if (codec_settings.qpMax < kQpMin || codec_settings.qpMax > 63) { + return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; + } return WEBRTC_VIDEO_CODEC_OK; } @@ -441,6 +444,9 @@ bool LibaomAv1Encoder::SetSvcParams( svc_params.scaling_factor_den[sid] = svc_config.scaling_factor_den[sid]; } + // svc_params.layer_target_bitrate is set in SetRates() before svc_params is + // passed to SetEncoderControlParameters((AV1E_SET_SVC_PARAMS). + return true; } @@ -779,7 +785,7 @@ void LibaomAv1Encoder::SetRates(const RateControlParameters& parameters) { for (int tid = 0; tid < svc_params_->number_temporal_layers; ++tid) { int layer_index = sid * svc_params_->number_temporal_layers + tid; accumulated_bitrate_bps += parameters.bitrate.GetBitrate(sid, tid); - // `svc_params.layer_target_bitrate` expects bitrate in kbps. + // `svc_params_->layer_target_bitrate` expects bitrate in kbps. svc_params_->layer_target_bitrate[layer_index] = accumulated_bitrate_bps / 1000; }