Propagate field trials to VideoEncoderSoftwareFallbackWrapper with Environment

Bug: webrtc:15860
Change-Id: Ief6a2eeab1713a371bc0350f6bdb5a18fb01945b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/345660
Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42051}
This commit is contained in:
Danil Chapovalov 2024-04-12 10:31:15 +02:00 committed by WebRTC LUCI CQ
parent ae9e08dfff
commit bdfcaba85b
6 changed files with 86 additions and 59 deletions

View File

@ -322,7 +322,6 @@ rtc_library("rtc_software_fallback_wrappers") {
"../../rtc_base:logging", "../../rtc_base:logging",
"../../rtc_base/experiments:field_trial_parser", "../../rtc_base/experiments:field_trial_parser",
"../../rtc_base/system:rtc_export", "../../rtc_base/system:rtc_export",
"../../system_wrappers:field_trial",
"../../system_wrappers:metrics", "../../system_wrappers:metrics",
"../video:encoded_image", "../video:encoded_image",
"../video:video_bitrate_allocation", "../video:video_bitrate_allocation",

View File

@ -18,6 +18,8 @@
#include <vector> #include <vector>
#include "absl/types/optional.h" #include "absl/types/optional.h"
#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
#include "api/fec_controller_override.h" #include "api/fec_controller_override.h"
#include "api/scoped_refptr.h" #include "api/scoped_refptr.h"
#include "api/test/mock_video_encoder.h" #include "api/test/mock_video_encoder.h"
@ -34,18 +36,20 @@
#include "modules/video_coding/include/video_error_codes.h" #include "modules/video_coding/include/video_error_codes.h"
#include "modules/video_coding/utility/simulcast_rate_allocator.h" #include "modules/video_coding/utility/simulcast_rate_allocator.h"
#include "rtc_base/fake_clock.h" #include "rtc_base/fake_clock.h"
#include "test/explicit_key_value_config.h"
#include "test/fake_encoder.h" #include "test/fake_encoder.h"
#include "test/fake_texture_frame.h" #include "test/fake_texture_frame.h"
#include "test/field_trial.h"
#include "test/gmock.h" #include "test/gmock.h"
#include "test/gtest.h" #include "test/gtest.h"
namespace webrtc { namespace webrtc {
namespace {
using test::ExplicitKeyValueConfig;
using ::testing::_; using ::testing::_;
using ::testing::Return; using ::testing::Return;
using ::testing::ValuesIn; using ::testing::ValuesIn;
namespace {
const int kWidth = 320; const int kWidth = 320;
const int kHeight = 240; const int kHeight = 240;
const int kNumCores = 2; const int kNumCores = 2;
@ -87,12 +91,12 @@ class FakeEncodedImageCallback : public EncodedImageCallback {
class VideoEncoderSoftwareFallbackWrapperTestBase : public ::testing::Test { class VideoEncoderSoftwareFallbackWrapperTestBase : public ::testing::Test {
protected: protected:
VideoEncoderSoftwareFallbackWrapperTestBase( VideoEncoderSoftwareFallbackWrapperTestBase(
const std::string& field_trials, const Environment& env,
std::unique_ptr<VideoEncoder> sw_encoder) std::unique_ptr<VideoEncoder> sw_encoder)
: override_field_trials_(field_trials), : fake_encoder_(new CountingFakeEncoder()),
fake_encoder_(new CountingFakeEncoder()),
wrapper_initialized_(false), wrapper_initialized_(false),
fallback_wrapper_(CreateVideoEncoderSoftwareFallbackWrapper( fallback_wrapper_(CreateVideoEncoderSoftwareFallbackWrapper(
env,
std::move(sw_encoder), std::move(sw_encoder),
std::unique_ptr<VideoEncoder>(fake_encoder_), std::unique_ptr<VideoEncoder>(fake_encoder_),
false)) {} false)) {}
@ -168,7 +172,6 @@ class VideoEncoderSoftwareFallbackWrapperTestBase : public ::testing::Test {
fallback_wrapper_->GetEncoderInfo().implementation_name); fallback_wrapper_->GetEncoderInfo().implementation_name);
} }
test::ScopedFieldTrials override_field_trials_;
FakeEncodedImageCallback callback_; FakeEncodedImageCallback callback_;
// `fake_encoder_` is owned and released by `fallback_wrapper_`. // `fake_encoder_` is owned and released by `fallback_wrapper_`.
CountingFakeEncoder* fake_encoder_; CountingFakeEncoder* fake_encoder_;
@ -188,7 +191,7 @@ class VideoEncoderSoftwareFallbackWrapperTest
explicit VideoEncoderSoftwareFallbackWrapperTest( explicit VideoEncoderSoftwareFallbackWrapperTest(
CountingFakeEncoder* fake_sw_encoder) CountingFakeEncoder* fake_sw_encoder)
: VideoEncoderSoftwareFallbackWrapperTestBase( : VideoEncoderSoftwareFallbackWrapperTestBase(
"", CreateEnvironment(),
std::unique_ptr<VideoEncoder>(fake_sw_encoder)), std::unique_ptr<VideoEncoder>(fake_sw_encoder)),
fake_sw_encoder_(fake_sw_encoder) { fake_sw_encoder_(fake_sw_encoder) {
fake_sw_encoder_->implementation_name_ = "fake_sw_encoder"; fake_sw_encoder_->implementation_name_ = "fake_sw_encoder";
@ -485,9 +488,9 @@ const char kFieldTrial[] = "WebRTC-VP8-Forced-Fallback-Encoder-v2";
class ForcedFallbackTest : public VideoEncoderSoftwareFallbackWrapperTestBase { class ForcedFallbackTest : public VideoEncoderSoftwareFallbackWrapperTestBase {
public: public:
explicit ForcedFallbackTest(const std::string& field_trials) explicit ForcedFallbackTest(const Environment& env)
: VideoEncoderSoftwareFallbackWrapperTestBase(field_trials, : VideoEncoderSoftwareFallbackWrapperTestBase(env,
VP8Encoder::Create()) {} CreateVp8Encoder(env)) {}
~ForcedFallbackTest() override {} ~ForcedFallbackTest() override {}
@ -550,15 +553,19 @@ class ForcedFallbackTest : public VideoEncoderSoftwareFallbackWrapperTestBase {
class ForcedFallbackTestEnabled : public ForcedFallbackTest { class ForcedFallbackTestEnabled : public ForcedFallbackTest {
public: public:
ForcedFallbackTestEnabled() ForcedFallbackTestEnabled()
: ForcedFallbackTest(std::string(kFieldTrial) + "/Enabled-" + : ForcedFallbackTest(
std::to_string(kMinPixelsPerFrame) + "," + CreateEnvironment(std::make_unique<ExplicitKeyValueConfig>(
std::to_string(kWidth * kHeight) + ",30000/") {} std::string(kFieldTrial) + "/Enabled-" +
std::to_string(kMinPixelsPerFrame) + "," +
std::to_string(kWidth * kHeight) + ",30000/"))) {}
}; };
class ForcedFallbackTestDisabled : public ForcedFallbackTest { class ForcedFallbackTestDisabled : public ForcedFallbackTest {
public: public:
ForcedFallbackTestDisabled() ForcedFallbackTestDisabled()
: ForcedFallbackTest(std::string(kFieldTrial) + "/Disabled/") {} : ForcedFallbackTest(
CreateEnvironment(std::make_unique<ExplicitKeyValueConfig>(
std::string(kFieldTrial) + "/Disabled/"))) {}
}; };
TEST_F(ForcedFallbackTestDisabled, NoFallbackWithoutFieldTrial) { TEST_F(ForcedFallbackTestDisabled, NoFallbackWithoutFieldTrial) {
@ -704,8 +711,9 @@ TEST(SoftwareFallbackEncoderTest, BothRateControllersNotTrusted) {
std::unique_ptr<VideoEncoder> wrapper = std::unique_ptr<VideoEncoder> wrapper =
CreateVideoEncoderSoftwareFallbackWrapper( CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(sw_encoder), CreateEnvironment(), std::unique_ptr<VideoEncoder>(sw_encoder),
std::unique_ptr<VideoEncoder>(hw_encoder)); std::unique_ptr<VideoEncoder>(hw_encoder),
/*prefer_temporal_support=*/false);
EXPECT_FALSE(wrapper->GetEncoderInfo().has_trusted_rate_controller); EXPECT_FALSE(wrapper->GetEncoderInfo().has_trusted_rate_controller);
} }
@ -719,8 +727,9 @@ TEST(SoftwareFallbackEncoderTest, SwRateControllerTrusted) {
std::unique_ptr<VideoEncoder> wrapper = std::unique_ptr<VideoEncoder> wrapper =
CreateVideoEncoderSoftwareFallbackWrapper( CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(sw_encoder), CreateEnvironment(), std::unique_ptr<VideoEncoder>(sw_encoder),
std::unique_ptr<VideoEncoder>(hw_encoder)); std::unique_ptr<VideoEncoder>(hw_encoder),
/*prefer_temporal_support=*/false);
EXPECT_FALSE(wrapper->GetEncoderInfo().has_trusted_rate_controller); EXPECT_FALSE(wrapper->GetEncoderInfo().has_trusted_rate_controller);
} }
@ -734,8 +743,9 @@ TEST(SoftwareFallbackEncoderTest, HwRateControllerTrusted) {
std::unique_ptr<VideoEncoder> wrapper = std::unique_ptr<VideoEncoder> wrapper =
CreateVideoEncoderSoftwareFallbackWrapper( CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(sw_encoder), CreateEnvironment(), std::unique_ptr<VideoEncoder>(sw_encoder),
std::unique_ptr<VideoEncoder>(hw_encoder)); std::unique_ptr<VideoEncoder>(hw_encoder),
/*prefer_temporal_support=*/false);
EXPECT_TRUE(wrapper->GetEncoderInfo().has_trusted_rate_controller); EXPECT_TRUE(wrapper->GetEncoderInfo().has_trusted_rate_controller);
VideoCodec codec_ = {}; VideoCodec codec_ = {};
@ -764,8 +774,9 @@ TEST(SoftwareFallbackEncoderTest, BothRateControllersTrusted) {
std::unique_ptr<VideoEncoder> wrapper = std::unique_ptr<VideoEncoder> wrapper =
CreateVideoEncoderSoftwareFallbackWrapper( CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(sw_encoder), CreateEnvironment(), std::unique_ptr<VideoEncoder>(sw_encoder),
std::unique_ptr<VideoEncoder>(hw_encoder)); std::unique_ptr<VideoEncoder>(hw_encoder),
/*prefer_temporal_support=*/false);
EXPECT_TRUE(wrapper->GetEncoderInfo().has_trusted_rate_controller); EXPECT_TRUE(wrapper->GetEncoderInfo().has_trusted_rate_controller);
} }
@ -779,8 +790,9 @@ TEST(SoftwareFallbackEncoderTest, ReportsHardwareAccelerated) {
std::unique_ptr<VideoEncoder> wrapper = std::unique_ptr<VideoEncoder> wrapper =
CreateVideoEncoderSoftwareFallbackWrapper( CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(sw_encoder), CreateEnvironment(), std::unique_ptr<VideoEncoder>(sw_encoder),
std::unique_ptr<VideoEncoder>(hw_encoder)); std::unique_ptr<VideoEncoder>(hw_encoder),
/*prefer_temporal_support=*/false);
EXPECT_TRUE(wrapper->GetEncoderInfo().is_hardware_accelerated); EXPECT_TRUE(wrapper->GetEncoderInfo().is_hardware_accelerated);
VideoCodec codec_ = {}; VideoCodec codec_ = {};
@ -808,8 +820,9 @@ TEST(SoftwareFallbackEncoderTest, ConfigureHardwareOnSecondAttempt) {
std::unique_ptr<VideoEncoder> wrapper = std::unique_ptr<VideoEncoder> wrapper =
CreateVideoEncoderSoftwareFallbackWrapper( CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(sw_encoder), CreateEnvironment(), std::unique_ptr<VideoEncoder>(sw_encoder),
std::unique_ptr<VideoEncoder>(hw_encoder)); std::unique_ptr<VideoEncoder>(hw_encoder),
/*prefer_temporal_support=*/false);
EXPECT_TRUE(wrapper->GetEncoderInfo().is_hardware_accelerated); EXPECT_TRUE(wrapper->GetEncoderInfo().is_hardware_accelerated);
// Initialize the encoder. When HW attempt fails we fallback to SW. // Initialize the encoder. When HW attempt fails we fallback to SW.
@ -850,7 +863,8 @@ class PreferTemporalLayersFallbackTest : public ::testing::Test {
.WillRepeatedly(Return(WEBRTC_VIDEO_CODEC_OK)); .WillRepeatedly(Return(WEBRTC_VIDEO_CODEC_OK));
wrapper_ = CreateVideoEncoderSoftwareFallbackWrapper( wrapper_ = CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(sw_), std::unique_ptr<VideoEncoder>(hw_), CreateEnvironment(), std::unique_ptr<VideoEncoder>(sw_),
std::unique_ptr<VideoEncoder>(hw_),
/*prefer_temporal_support=*/true); /*prefer_temporal_support=*/true);
codec_settings.codecType = kVideoCodecVP8; codec_settings.codecType = kVideoCodecVP8;
@ -1123,15 +1137,15 @@ INSTANTIATE_TEST_SUITE_P(
TEST_P(ResolutionBasedFallbackTest, VerifyForcedEncoderFallback) { TEST_P(ResolutionBasedFallbackTest, VerifyForcedEncoderFallback) {
const ResolutionBasedFallbackTestParams& params = GetParam(); const ResolutionBasedFallbackTestParams& params = GetParam();
test::ScopedFieldTrials field_trials(params.field_trials); const Environment env = CreateEnvironment(
auto primary = new test::FakeEncoder(Clock::GetRealTimeClock()); std::make_unique<ExplicitKeyValueConfig>(params.field_trials));
auto fallback = new test::FakeEncoder(Clock::GetRealTimeClock()); auto primary = std::make_unique<test::FakeEncoder>(env);
auto encoder = CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(fallback),
std::unique_ptr<VideoEncoder>(primary),
/*prefer_temporal_support=*/false);
primary->SetImplementationName("primary"); primary->SetImplementationName("primary");
auto fallback = std::make_unique<test::FakeEncoder>(env);
fallback->SetImplementationName("fallback"); fallback->SetImplementationName("fallback");
auto encoder = CreateVideoEncoderSoftwareFallbackWrapper(
env, std::move(fallback), std::move(primary),
/*prefer_temporal_support=*/false);
VideoCodec codec; VideoCodec codec;
codec.codecType = params.codec_type; codec.codecType = params.codec_type;
codec.width = params.width; codec.width = params.width;

View File

@ -19,7 +19,9 @@
#include "absl/strings/match.h" #include "absl/strings/match.h"
#include "absl/types/optional.h" #include "absl/types/optional.h"
#include "api/environment/environment.h"
#include "api/fec_controller_override.h" #include "api/fec_controller_override.h"
#include "api/field_trials_view.h"
#include "api/transport/field_trial_based_config.h" #include "api/transport/field_trial_based_config.h"
#include "api/video/i420_buffer.h" #include "api/video/i420_buffer.h"
#include "api/video/video_bitrate_allocation.h" #include "api/video/video_bitrate_allocation.h"
@ -33,7 +35,6 @@
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/experiments/field_trial_parser.h" #include "rtc_base/experiments/field_trial_parser.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
#include "system_wrappers/include/field_trial.h"
namespace webrtc { namespace webrtc {
@ -81,13 +82,13 @@ const char kVp8ForceFallbackEncoderFieldTrial[] =
"WebRTC-VP8-Forced-Fallback-Encoder-v2"; "WebRTC-VP8-Forced-Fallback-Encoder-v2";
absl::optional<ForcedFallbackParams> ParseFallbackParamsFromFieldTrials( absl::optional<ForcedFallbackParams> ParseFallbackParamsFromFieldTrials(
const FieldTrialsView& field_trials,
const VideoEncoder& main_encoder) { const VideoEncoder& main_encoder) {
// Ignore WebRTC-VP8-Forced-Fallback-Encoder-v2 if // Ignore WebRTC-VP8-Forced-Fallback-Encoder-v2 if
// WebRTC-Video-EncoderFallbackSettings is present. // WebRTC-Video-EncoderFallbackSettings is present.
FieldTrialOptional<int> resolution_threshold_px("resolution_threshold_px"); FieldTrialOptional<int> resolution_threshold_px("resolution_threshold_px");
ParseFieldTrial( ParseFieldTrial({&resolution_threshold_px},
{&resolution_threshold_px}, field_trials.Lookup("WebRTC-Video-EncoderFallbackSettings"));
FieldTrialBasedConfig().Lookup("WebRTC-Video-EncoderFallbackSettings"));
if (resolution_threshold_px) { if (resolution_threshold_px) {
ForcedFallbackParams params; ForcedFallbackParams params;
params.enable_resolution_based_switch = true; params.enable_resolution_based_switch = true;
@ -96,7 +97,7 @@ absl::optional<ForcedFallbackParams> ParseFallbackParamsFromFieldTrials(
} }
const std::string field_trial = const std::string field_trial =
webrtc::field_trial::FindFullName(kVp8ForceFallbackEncoderFieldTrial); field_trials.Lookup(kVp8ForceFallbackEncoderFieldTrial);
if (!absl::StartsWith(field_trial, "Enabled")) { if (!absl::StartsWith(field_trial, "Enabled")) {
return absl::nullopt; return absl::nullopt;
} }
@ -125,10 +126,11 @@ absl::optional<ForcedFallbackParams> ParseFallbackParamsFromFieldTrials(
} }
absl::optional<ForcedFallbackParams> GetForcedFallbackParams( absl::optional<ForcedFallbackParams> GetForcedFallbackParams(
const FieldTrialsView& field_trials,
bool prefer_temporal_support, bool prefer_temporal_support,
const VideoEncoder& main_encoder) { const VideoEncoder& main_encoder) {
absl::optional<ForcedFallbackParams> params = absl::optional<ForcedFallbackParams> params =
ParseFallbackParamsFromFieldTrials(main_encoder); ParseFallbackParamsFromFieldTrials(field_trials, main_encoder);
if (prefer_temporal_support) { if (prefer_temporal_support) {
if (!params.has_value()) { if (!params.has_value()) {
params.emplace(); params.emplace();
@ -141,6 +143,7 @@ absl::optional<ForcedFallbackParams> GetForcedFallbackParams(
class VideoEncoderSoftwareFallbackWrapper final : public VideoEncoder { class VideoEncoderSoftwareFallbackWrapper final : public VideoEncoder {
public: public:
VideoEncoderSoftwareFallbackWrapper( VideoEncoderSoftwareFallbackWrapper(
const FieldTrialsView& field_trials,
std::unique_ptr<webrtc::VideoEncoder> sw_encoder, std::unique_ptr<webrtc::VideoEncoder> sw_encoder,
std::unique_ptr<webrtc::VideoEncoder> hw_encoder, std::unique_ptr<webrtc::VideoEncoder> hw_encoder,
bool prefer_temporal_support); bool prefer_temporal_support);
@ -227,6 +230,7 @@ class VideoEncoderSoftwareFallbackWrapper final : public VideoEncoder {
}; };
VideoEncoderSoftwareFallbackWrapper::VideoEncoderSoftwareFallbackWrapper( VideoEncoderSoftwareFallbackWrapper::VideoEncoderSoftwareFallbackWrapper(
const FieldTrialsView& field_trials,
std::unique_ptr<webrtc::VideoEncoder> sw_encoder, std::unique_ptr<webrtc::VideoEncoder> sw_encoder,
std::unique_ptr<webrtc::VideoEncoder> hw_encoder, std::unique_ptr<webrtc::VideoEncoder> hw_encoder,
bool prefer_temporal_support) bool prefer_temporal_support)
@ -234,8 +238,9 @@ VideoEncoderSoftwareFallbackWrapper::VideoEncoderSoftwareFallbackWrapper(
encoder_(std::move(hw_encoder)), encoder_(std::move(hw_encoder)),
fallback_encoder_(std::move(sw_encoder)), fallback_encoder_(std::move(sw_encoder)),
callback_(nullptr), callback_(nullptr),
fallback_params_( fallback_params_(GetForcedFallbackParams(field_trials,
GetForcedFallbackParams(prefer_temporal_support, *encoder_)) { prefer_temporal_support,
*encoder_)) {
RTC_DCHECK(fallback_encoder_); RTC_DCHECK(fallback_encoder_);
} }
@ -537,12 +542,22 @@ bool VideoEncoderSoftwareFallbackWrapper::TryInitForcedFallbackEncoder() {
} // namespace } // namespace
std::unique_ptr<VideoEncoder> CreateVideoEncoderSoftwareFallbackWrapper( std::unique_ptr<VideoEncoder> CreateVideoEncoderSoftwareFallbackWrapper(
const Environment& env,
std::unique_ptr<VideoEncoder> sw_fallback_encoder, std::unique_ptr<VideoEncoder> sw_fallback_encoder,
std::unique_ptr<VideoEncoder> hw_encoder, std::unique_ptr<VideoEncoder> hw_encoder,
bool prefer_temporal_support) { bool prefer_temporal_support) {
return std::make_unique<VideoEncoderSoftwareFallbackWrapper>( return std::make_unique<VideoEncoderSoftwareFallbackWrapper>(
std::move(sw_fallback_encoder), std::move(hw_encoder), env.field_trials(), std::move(sw_fallback_encoder), std::move(hw_encoder),
prefer_temporal_support); prefer_temporal_support);
} }
std::unique_ptr<VideoEncoder> CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder> sw_fallback_encoder,
std::unique_ptr<VideoEncoder> hw_encoder,
bool prefer_temporal_support) {
return std::make_unique<VideoEncoderSoftwareFallbackWrapper>(
FieldTrialBasedConfig(), std::move(sw_fallback_encoder),
std::move(hw_encoder), prefer_temporal_support);
}
} // namespace webrtc } // namespace webrtc

View File

@ -14,6 +14,7 @@
#include <memory> #include <memory>
#include <utility> #include <utility>
#include "api/environment/environment.h"
#include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder.h"
#include "rtc_base/system/rtc_export.h" #include "rtc_base/system/rtc_export.h"
@ -25,22 +26,19 @@ namespace webrtc {
// |bool prefer_temporal_support| indicates that if the software fallback // |bool prefer_temporal_support| indicates that if the software fallback
// encoder supports temporal layers but the hardware encoder does not, a // encoder supports temporal layers but the hardware encoder does not, a
// fallback should be forced even if the encoder otherwise works. // fallback should be forced even if the encoder otherwise works.
RTC_EXPORT std::unique_ptr<VideoEncoder> // TODO: bugs.webrtc.org/15860 - Delete after 2024-04-22.
[[deprecated]] RTC_EXPORT std::unique_ptr<VideoEncoder>
CreateVideoEncoderSoftwareFallbackWrapper( CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder> sw_fallback_encoder, std::unique_ptr<VideoEncoder> sw_fallback_encoder,
std::unique_ptr<VideoEncoder> hw_encoder, std::unique_ptr<VideoEncoder> hw_encoder,
bool prefer_temporal_support); bool prefer_temporal_support);
// Default fallback for call-sites not yet updated with RTC_EXPORT std::unique_ptr<VideoEncoder>
// `prefer_temporal_support`.
// TODO(sprang): Remove when usage is gone.
RTC_EXPORT inline std::unique_ptr<VideoEncoder>
CreateVideoEncoderSoftwareFallbackWrapper( CreateVideoEncoderSoftwareFallbackWrapper(
const Environment& env,
std::unique_ptr<VideoEncoder> sw_fallback_encoder, std::unique_ptr<VideoEncoder> sw_fallback_encoder,
std::unique_ptr<VideoEncoder> hw_encoder) { std::unique_ptr<VideoEncoder> hw_encoder,
return CreateVideoEncoderSoftwareFallbackWrapper( bool prefer_temporal_support);
std::move(sw_fallback_encoder), std::move(hw_encoder), false);
}
} // namespace webrtc } // namespace webrtc

View File

@ -756,7 +756,7 @@ SimulcastEncoderAdapter::FetchOrCreateEncoderContext(
encoder = std::move(primary_encoder); encoder = std::move(primary_encoder);
} else { } else {
encoder = CreateVideoEncoderSoftwareFallbackWrapper( encoder = CreateVideoEncoderSoftwareFallbackWrapper(
std::move(fallback_encoder), std::move(primary_encoder), env_, std::move(fallback_encoder), std::move(primary_encoder),
prefer_temporal_support); prefer_temporal_support);
} }
} else if (fallback_encoder != nullptr) { } else if (fallback_encoder != nullptr) {

View File

@ -29,11 +29,12 @@ jlong JNI_VideoEncoderFallback_Create(
std::unique_ptr<VideoEncoder> primary_encoder = std::unique_ptr<VideoEncoder> primary_encoder =
JavaToNativeVideoEncoder(jni, j_primary_encoder, j_webrtc_env_ref); JavaToNativeVideoEncoder(jni, j_primary_encoder, j_webrtc_env_ref);
return NativeToJavaPointer(CreateVideoEncoderSoftwareFallbackWrapper( return NativeToJavaPointer(
std::move(fallback_encoder), CreateVideoEncoderSoftwareFallbackWrapper(
std::move(primary_encoder), *reinterpret_cast<const Environment*>(j_webrtc_env_ref),
/*prefer_temporal_support=*/false) std::move(fallback_encoder), std::move(primary_encoder),
.release()); /*prefer_temporal_support=*/false)
.release());
} }
} // namespace jni } // namespace jni