From 35f2b89ee4332f0cb6ab9a9d7fb17dfc30157410 Mon Sep 17 00:00:00 2001 From: "Yu-Chen (Eric) Sun" Date: Wed, 5 Apr 2023 13:29:21 -0700 Subject: [PATCH] Fix the issue 15059: wrong libaom initialized target bitrate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix Issue 15059: The target bitrate was mistakenly set to be the maximal bitrate when initializing the libaom encoder. Bug: webrtc:15059 Change-Id: I38498d4cce7b0a9c26736d9f1096178dd2e1fef6 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/300004 Reviewed-by: Erik Språng Commit-Queue: Danil Chapovalov Reviewed-by: Danil Chapovalov Cr-Commit-Position: refs/heads/main@{#39822} --- .../video_coding/codecs/av1/libaom_av1_encoder.cc | 2 +- .../codecs/av1/libaom_av1_encoder_unittest.cc | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/video_coding/codecs/av1/libaom_av1_encoder.cc b/modules/video_coding/codecs/av1/libaom_av1_encoder.cc index e5ea964f6c..b16d4b2401 100644 --- a/modules/video_coding/codecs/av1/libaom_av1_encoder.cc +++ b/modules/video_coding/codecs/av1/libaom_av1_encoder.cc @@ -224,7 +224,7 @@ int LibaomAv1Encoder::InitEncode(const VideoCodec* codec_settings, NumberOfThreads(cfg_.g_w, cfg_.g_h, settings.number_of_cores); cfg_.g_timebase.num = 1; cfg_.g_timebase.den = kRtpTicksPerSecond; - cfg_.rc_target_bitrate = encoder_settings_.maxBitrate; // kilobits/sec. + cfg_.rc_target_bitrate = encoder_settings_.startBitrate; // kilobits/sec. cfg_.g_input_bit_depth = kBitDepth; cfg_.kf_mode = AOM_KF_DISABLED; cfg_.rc_min_quantizer = kQpMin; diff --git a/modules/video_coding/codecs/av1/libaom_av1_encoder_unittest.cc b/modules/video_coding/codecs/av1/libaom_av1_encoder_unittest.cc index cca8c58439..09bf1bf1ca 100644 --- a/modules/video_coding/codecs/av1/libaom_av1_encoder_unittest.cc +++ b/modules/video_coding/codecs/av1/libaom_av1_encoder_unittest.cc @@ -39,7 +39,7 @@ VideoCodec DefaultCodecSettings() { codec_settings.width = 320; codec_settings.height = 180; codec_settings.maxFramerate = 30; - codec_settings.maxBitrate = 1000; + codec_settings.startBitrate = 1000; codec_settings.qpMax = 63; return codec_settings; } @@ -145,7 +145,7 @@ TEST(LibaomAv1EncoderTest, SetsEndOfPictureForLastFrameInTemporalUnit) { VideoCodec codec_settings = DefaultCodecSettings(); // Configure encoder with 3 spatial layers. codec_settings.SetScalabilityMode(ScalabilityMode::kL3T1); - codec_settings.maxBitrate = allocation.get_sum_kbps(); + codec_settings.startBitrate = allocation.get_sum_kbps(); ASSERT_EQ(encoder->InitEncode(&codec_settings, DefaultEncoderSettings()), WEBRTC_VIDEO_CODEC_OK); @@ -175,7 +175,7 @@ TEST(LibaomAv1EncoderTest, CheckOddDimensionsWithSpatialLayers) { // Odd width and height values should not make encoder crash. codec_settings.width = 623; codec_settings.height = 405; - codec_settings.maxBitrate = allocation.get_sum_kbps(); + codec_settings.startBitrate = allocation.get_sum_kbps(); ASSERT_EQ(encoder->InitEncode(&codec_settings, DefaultEncoderSettings()), WEBRTC_VIDEO_CODEC_OK); encoder->SetRates(VideoEncoder::RateControlParameters( @@ -234,7 +234,7 @@ TEST(LibaomAv1EncoderTest, PopulatesEncodedFrameSize) { allocation.SetBitrate(2, 0, 30000); std::unique_ptr encoder = CreateLibaomAv1Encoder(); VideoCodec codec_settings = DefaultCodecSettings(); - codec_settings.maxBitrate = allocation.get_sum_kbps(); + codec_settings.startBitrate = allocation.get_sum_kbps(); ASSERT_GT(codec_settings.width, 4); // Configure encoder with 3 spatial layers. codec_settings.SetScalabilityMode(ScalabilityMode::kL3T1); @@ -324,14 +324,14 @@ TEST(LibaomAv1EncoderTest, AdheresToTargetBitrateDespiteUnevenFrameTiming) { std::unique_ptr encoder = CreateLibaomAv1Encoder(); VideoCodec codec_settings = DefaultCodecSettings(); codec_settings.SetScalabilityMode(ScalabilityMode::kL1T1); - codec_settings.maxBitrate = 300; // kbps + codec_settings.startBitrate = 300; // kbps codec_settings.width = 320; codec_settings.height = 180; ASSERT_EQ(encoder->InitEncode(&codec_settings, DefaultEncoderSettings()), WEBRTC_VIDEO_CODEC_OK); const int kFps = 30; - const int kTargetBitrateBps = codec_settings.maxBitrate * 1000; + const int kTargetBitrateBps = codec_settings.startBitrate * 1000; VideoEncoder::RateControlParameters rate_parameters; rate_parameters.framerate_fps = kFps; rate_parameters.bitrate.SetBitrate(/*spatial_index=*/0, 0, kTargetBitrateBps);