Add option to configure AV1 EncoderInfo resolution_bitrate_limits.
bug: webrtc:14931 Change-Id: I8ade2a888d29f76a0f690fc3541b45b7304ad4d3 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/294600 Reviewed-by: Åsa Persson <asapersson@webrtc.org> Commit-Queue: Michael Horowitz <mhoro@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39426}
This commit is contained in:
parent
8d33105015
commit
b27efd487d
@ -63,6 +63,7 @@ rtc_library("libaom_av1_encoder") {
|
||||
"../../../../rtc_base:checks",
|
||||
"../../../../rtc_base:logging",
|
||||
"../../../../rtc_base:rtc_numerics",
|
||||
"../../../../rtc_base/experiments:encoder_info_settings",
|
||||
"../../svc:scalability_structures",
|
||||
"../../svc:scalable_video_controller",
|
||||
"//third_party/libaom",
|
||||
@ -102,6 +103,7 @@ if (rtc_include_tests) {
|
||||
"../../../../api/units:data_size",
|
||||
"../../../../api/units:time_delta",
|
||||
"../../../../api/video:video_frame",
|
||||
"../../../../test:field_trial",
|
||||
"../../svc:scalability_mode_util",
|
||||
"../../svc:scalability_structures",
|
||||
"../../svc:scalable_video_controller",
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
#include "modules/video_coding/svc/scalable_video_controller.h"
|
||||
#include "modules/video_coding/svc/scalable_video_controller_no_layering.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/experiments/encoder_info_settings.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "third_party/libaom/source/libaom/aom/aom_codec.h"
|
||||
#include "third_party/libaom/source/libaom/aom/aom_encoder.h"
|
||||
@ -120,6 +121,7 @@ class LibaomAv1Encoder final : public VideoEncoder {
|
||||
aom_codec_enc_cfg_t cfg_;
|
||||
EncodedImageCallback* encoded_image_callback_;
|
||||
int64_t timestamp_;
|
||||
const LibaomAv1EncoderInfoSettings encoder_info_override_;
|
||||
};
|
||||
|
||||
int32_t VerifyCodecSettings(const VideoCodec& codec_settings) {
|
||||
@ -810,6 +812,10 @@ VideoEncoder::EncoderInfo LibaomAv1Encoder::GetEncoderInfo() const {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!encoder_info_override_.resolution_bitrate_limits().empty()) {
|
||||
info.resolution_bitrate_limits =
|
||||
encoder_info_override_.resolution_bitrate_limits();
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
#include "api/video_codecs/video_encoder.h"
|
||||
#include "modules/video_coding/codecs/test/encoded_video_frame_producer.h"
|
||||
#include "modules/video_coding/include/video_error_codes.h"
|
||||
#include "test/field_trial.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
@ -186,6 +187,28 @@ TEST(LibaomAv1EncoderTest, CheckOddDimensionsWithSpatialLayers) {
|
||||
ASSERT_THAT(encoded_frames, SizeIs(6));
|
||||
}
|
||||
|
||||
TEST(LibaomAv1EncoderTest, EncoderInfoWithoutResolutionBitrateLimits) {
|
||||
std::unique_ptr<VideoEncoder> encoder = CreateLibaomAv1Encoder();
|
||||
EXPECT_TRUE(encoder->GetEncoderInfo().resolution_bitrate_limits.empty());
|
||||
}
|
||||
|
||||
TEST(LibaomAv1EncoderTest, EncoderInfoWithBitrateLimitsFromFieldTrial) {
|
||||
test::ScopedFieldTrials field_trials(
|
||||
"WebRTC-Av1-GetEncoderInfoOverride/"
|
||||
"frame_size_pixels:123|456|789,"
|
||||
"min_start_bitrate_bps:11000|22000|33000,"
|
||||
"min_bitrate_bps:44000|55000|66000,"
|
||||
"max_bitrate_bps:77000|88000|99000/");
|
||||
std::unique_ptr<VideoEncoder> encoder = CreateLibaomAv1Encoder();
|
||||
|
||||
EXPECT_THAT(
|
||||
encoder->GetEncoderInfo().resolution_bitrate_limits,
|
||||
::testing::ElementsAre(
|
||||
VideoEncoder::ResolutionBitrateLimits{123, 11000, 44000, 77000},
|
||||
VideoEncoder::ResolutionBitrateLimits{456, 22000, 55000, 88000},
|
||||
VideoEncoder::ResolutionBitrateLimits{789, 33000, 66000, 99000}));
|
||||
}
|
||||
|
||||
TEST(LibaomAv1EncoderTest, EncoderInfoProvidesFpsAllocation) {
|
||||
std::unique_ptr<VideoEncoder> encoder = CreateLibaomAv1Encoder();
|
||||
VideoCodec codec_settings = DefaultCodecSettings();
|
||||
|
||||
@ -211,4 +211,7 @@ LibvpxVp8EncoderInfoSettings::LibvpxVp8EncoderInfoSettings()
|
||||
LibvpxVp9EncoderInfoSettings::LibvpxVp9EncoderInfoSettings()
|
||||
: EncoderInfoSettings("WebRTC-VP9-GetEncoderInfoOverride") {}
|
||||
|
||||
LibaomAv1EncoderInfoSettings::LibaomAv1EncoderInfoSettings()
|
||||
: EncoderInfoSettings("WebRTC-Av1-GetEncoderInfoOverride") {}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -88,6 +88,13 @@ class LibvpxVp9EncoderInfoSettings : public EncoderInfoSettings {
|
||||
~LibvpxVp9EncoderInfoSettings() override {}
|
||||
};
|
||||
|
||||
// EncoderInfo settings for LibaomAv1Encoder.
|
||||
class LibaomAv1EncoderInfoSettings : public EncoderInfoSettings {
|
||||
public:
|
||||
LibaomAv1EncoderInfoSettings();
|
||||
~LibaomAv1EncoderInfoSettings() override {}
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // RTC_BASE_EXPERIMENTS_ENCODER_INFO_SETTINGS_H_
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user