Require scalability mode to initialize av1 encoder.
To make VideoCodec::scalability_mode the only option to set and change the scalability structure, for easier maintainability. Bug: webrtc:11404 Change-Id: I6570e9a93ddf2897ff7584c5d20a246346e853e2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/192361 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33056}
This commit is contained in:
committed by
Commit Bot
parent
2ed56fefef
commit
11215febb9
@ -64,8 +64,7 @@ int GetCpuSpeed(int width, int height, int number_of_cores) {
|
||||
|
||||
class LibaomAv1Encoder final : public VideoEncoder {
|
||||
public:
|
||||
explicit LibaomAv1Encoder(
|
||||
std::unique_ptr<ScalableVideoController> svc_controller);
|
||||
LibaomAv1Encoder();
|
||||
~LibaomAv1Encoder();
|
||||
|
||||
int InitEncode(const VideoCodec* codec_settings,
|
||||
@ -132,14 +131,10 @@ int32_t VerifyCodecSettings(const VideoCodec& codec_settings) {
|
||||
return WEBRTC_VIDEO_CODEC_OK;
|
||||
}
|
||||
|
||||
LibaomAv1Encoder::LibaomAv1Encoder(
|
||||
std::unique_ptr<ScalableVideoController> svc_controller)
|
||||
: svc_controller_(std::move(svc_controller)),
|
||||
inited_(false),
|
||||
LibaomAv1Encoder::LibaomAv1Encoder()
|
||||
: inited_(false),
|
||||
frame_for_encode_(nullptr),
|
||||
encoded_image_callback_(nullptr) {
|
||||
RTC_DCHECK(svc_controller_);
|
||||
}
|
||||
encoded_image_callback_(nullptr) {}
|
||||
|
||||
LibaomAv1Encoder::~LibaomAv1Encoder() {
|
||||
Release();
|
||||
@ -173,11 +168,11 @@ int LibaomAv1Encoder::InitEncode(const VideoCodec* codec_settings,
|
||||
return result;
|
||||
}
|
||||
absl::string_view scalability_mode = encoder_settings_.ScalabilityMode();
|
||||
// When scalability_mode is not set, keep using svc_controller_ created
|
||||
// at construction of the encoder.
|
||||
if (!scalability_mode.empty()) {
|
||||
svc_controller_ = CreateScalabilityStructure(scalability_mode);
|
||||
if (scalability_mode.empty()) {
|
||||
RTC_LOG(LS_WARNING) << "Scalability mode is not set.";
|
||||
return WEBRTC_VIDEO_CODEC_ERROR;
|
||||
}
|
||||
svc_controller_ = CreateScalabilityStructure(scalability_mode);
|
||||
if (svc_controller_ == nullptr) {
|
||||
RTC_LOG(LS_WARNING) << "Failed to set scalability mode "
|
||||
<< scalability_mode;
|
||||
@ -689,13 +684,7 @@ VideoEncoder::EncoderInfo LibaomAv1Encoder::GetEncoderInfo() const {
|
||||
const bool kIsLibaomAv1EncoderSupported = true;
|
||||
|
||||
std::unique_ptr<VideoEncoder> CreateLibaomAv1Encoder() {
|
||||
return std::make_unique<LibaomAv1Encoder>(
|
||||
std::make_unique<ScalableVideoControllerNoLayering>());
|
||||
}
|
||||
|
||||
std::unique_ptr<VideoEncoder> CreateLibaomAv1Encoder(
|
||||
std::unique_ptr<ScalableVideoController> svc_controller) {
|
||||
return std::make_unique<LibaomAv1Encoder>(std::move(svc_controller));
|
||||
return std::make_unique<LibaomAv1Encoder>();
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -14,15 +14,12 @@
|
||||
|
||||
#include "absl/base/attributes.h"
|
||||
#include "api/video_codecs/video_encoder.h"
|
||||
#include "modules/video_coding/svc/scalable_video_controller.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
ABSL_CONST_INIT extern const bool kIsLibaomAv1EncoderSupported;
|
||||
|
||||
std::unique_ptr<VideoEncoder> CreateLibaomAv1Encoder();
|
||||
std::unique_ptr<VideoEncoder> CreateLibaomAv1Encoder(
|
||||
std::unique_ptr<ScalableVideoController> controller);
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
|
||||
@ -54,6 +54,7 @@ TEST(LibaomAv1EncoderTest, InitAndRelease) {
|
||||
std::unique_ptr<VideoEncoder> encoder = CreateLibaomAv1Encoder();
|
||||
ASSERT_TRUE(encoder);
|
||||
VideoCodec codec_settings = DefaultCodecSettings();
|
||||
codec_settings.SetScalabilityMode("NONE");
|
||||
EXPECT_EQ(encoder->InitEncode(&codec_settings, DefaultEncoderSettings()),
|
||||
WEBRTC_VIDEO_CODEC_OK);
|
||||
EXPECT_EQ(encoder->Release(), WEBRTC_VIDEO_CODEC_OK);
|
||||
@ -61,9 +62,9 @@ TEST(LibaomAv1EncoderTest, InitAndRelease) {
|
||||
|
||||
TEST(LibaomAv1EncoderTest, NoBitrateOnTopLayerRefecltedInActiveDecodeTargets) {
|
||||
// Configure encoder with 2 temporal layers.
|
||||
std::unique_ptr<VideoEncoder> encoder =
|
||||
CreateLibaomAv1Encoder(std::make_unique<ScalabilityStructureL1T2>());
|
||||
std::unique_ptr<VideoEncoder> encoder = CreateLibaomAv1Encoder();
|
||||
VideoCodec codec_settings = DefaultCodecSettings();
|
||||
codec_settings.SetScalabilityMode("L1T2");
|
||||
ASSERT_EQ(encoder->InitEncode(&codec_settings, DefaultEncoderSettings()),
|
||||
WEBRTC_VIDEO_CODEC_OK);
|
||||
|
||||
|
||||
@ -55,6 +55,7 @@ constexpr int kFramerate = 30;
|
||||
|
||||
VideoCodec DefaultCodecSettings() {
|
||||
VideoCodec codec_settings;
|
||||
codec_settings.SetScalabilityMode("NONE");
|
||||
codec_settings.width = kWidth;
|
||||
codec_settings.height = kHeight;
|
||||
codec_settings.maxFramerate = kFramerate;
|
||||
@ -250,10 +251,10 @@ TEST_P(LibaomAv1SvcTest, SetRatesMatchMeasuredBitrate) {
|
||||
kv.second.bps());
|
||||
}
|
||||
|
||||
std::unique_ptr<VideoEncoder> encoder =
|
||||
CreateLibaomAv1Encoder(CreateScalabilityStructure(param.name));
|
||||
std::unique_ptr<VideoEncoder> encoder = CreateLibaomAv1Encoder();
|
||||
ASSERT_TRUE(encoder);
|
||||
VideoCodec codec_settings = DefaultCodecSettings();
|
||||
codec_settings.SetScalabilityMode(param.name);
|
||||
codec_settings.maxBitrate = allocation.get_sum_kbps();
|
||||
codec_settings.maxFramerate = 30;
|
||||
ASSERT_EQ(encoder->InitEncode(&codec_settings, DefaultEncoderSettings()),
|
||||
|
||||
@ -42,6 +42,7 @@ TEST(VideoCodecTestLibaom, HighBitrateAV1) {
|
||||
auto config = CreateConfig("foreman_cif");
|
||||
config.SetCodecSettings(cricket::kAv1CodecName, 1, 1, 1, false, true, true,
|
||||
kCifWidth, kCifHeight);
|
||||
config.codec_settings.SetScalabilityMode("NONE");
|
||||
config.num_frames = kNumFramesLong;
|
||||
auto fixture = CreateVideoCodecTestFixture(config);
|
||||
|
||||
@ -59,6 +60,7 @@ TEST(VideoCodecTestLibaom, VeryLowBitrateAV1) {
|
||||
auto config = CreateConfig("foreman_cif");
|
||||
config.SetCodecSettings(cricket::kAv1CodecName, 1, 1, 1, false, true, true,
|
||||
kCifWidth, kCifHeight);
|
||||
config.codec_settings.SetScalabilityMode("NONE");
|
||||
auto fixture = CreateVideoCodecTestFixture(config);
|
||||
|
||||
std::vector<RateProfile> rate_profiles = {{50, 30, 0}};
|
||||
@ -78,6 +80,7 @@ TEST(VideoCodecTestLibaom, HdAV1) {
|
||||
auto config = CreateConfig("ConferenceMotion_1280_720_50");
|
||||
config.SetCodecSettings(cricket::kAv1CodecName, 1, 1, 1, false, true, true,
|
||||
kHdWidth, kHdHeight);
|
||||
config.codec_settings.SetScalabilityMode("NONE");
|
||||
config.num_frames = kNumFramesLong;
|
||||
auto fixture = CreateVideoCodecTestFixture(config);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user