Allow to use propagated field trials in VideoDecoderSoftwareFallbackWrapper
Bug: webrtc:15791 Change-Id: Ida5e1c6f46e5aa9530af441b345abb80d2a5349e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/339862 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Philip Eliasson <philipel@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41760}
This commit is contained in:
parent
2bfb5db548
commit
d99da2c5f8
@ -305,6 +305,8 @@ rtc_library("rtc_software_fallback_wrappers") {
|
||||
deps = [
|
||||
":video_codecs_api",
|
||||
"..:fec_controller_api",
|
||||
"../../api:field_trials_view",
|
||||
"../../api/environment",
|
||||
"../../api/transport:field_trial_based_config",
|
||||
"../../api/video:video_frame",
|
||||
"../../media:rtc_media_base",
|
||||
|
||||
@ -39,9 +39,9 @@ if (rtc_include_tests) {
|
||||
"../../../modules/video_coding:webrtc_vp8",
|
||||
"../../../rtc_base:checks",
|
||||
"../../../rtc_base:rtc_base_tests_utils",
|
||||
"../../../test:explicit_key_value_config",
|
||||
"../../../test:fake_video_codecs",
|
||||
"../../../test:field_trial",
|
||||
"../../../test:scoped_key_value_config",
|
||||
"../../../test:test_support",
|
||||
"../../../test:video_test_common",
|
||||
"../../environment",
|
||||
|
||||
@ -22,8 +22,8 @@
|
||||
#include "modules/video_coding/include/video_codec_interface.h"
|
||||
#include "modules/video_coding/include/video_error_codes.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "test/explicit_key_value_config.h"
|
||||
#include "test/gtest.h"
|
||||
#include "test/scoped_key_value_config.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
@ -33,10 +33,11 @@ class VideoDecoderSoftwareFallbackWrapperTest : public ::testing::Test {
|
||||
: VideoDecoderSoftwareFallbackWrapperTest("") {}
|
||||
explicit VideoDecoderSoftwareFallbackWrapperTest(
|
||||
const std::string& field_trials)
|
||||
: override_field_trials_(field_trials),
|
||||
env_(CreateEnvironment(&override_field_trials_)),
|
||||
: field_trials_(field_trials),
|
||||
env_(CreateEnvironment(&field_trials_)),
|
||||
fake_decoder_(new CountingFakeDecoder()),
|
||||
fallback_wrapper_(CreateVideoDecoderSoftwareFallbackWrapper(
|
||||
env_,
|
||||
CreateVp8Decoder(env_),
|
||||
std::unique_ptr<VideoDecoder>(fake_decoder_))) {}
|
||||
|
||||
@ -74,7 +75,7 @@ class VideoDecoderSoftwareFallbackWrapperTest : public ::testing::Test {
|
||||
int release_count_ = 0;
|
||||
int reset_count_ = 0;
|
||||
};
|
||||
test::ScopedKeyValueConfig override_field_trials_;
|
||||
test::ExplicitKeyValueConfig field_trials_;
|
||||
const Environment env_;
|
||||
// `fake_decoder_` is owned and released by `fallback_wrapper_`.
|
||||
CountingFakeDecoder* fake_decoder_;
|
||||
@ -279,7 +280,7 @@ class ForcedSoftwareDecoderFallbackTest
|
||||
fake_decoder_ = new CountingFakeDecoder();
|
||||
sw_fallback_decoder_ = new CountingFakeDecoder();
|
||||
fallback_wrapper_ = CreateVideoDecoderSoftwareFallbackWrapper(
|
||||
std::unique_ptr<VideoDecoder>(sw_fallback_decoder_),
|
||||
env_, std::unique_ptr<VideoDecoder>(sw_fallback_decoder_),
|
||||
std::unique_ptr<VideoDecoder>(fake_decoder_));
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
#include "api/field_trials_view.h"
|
||||
#include "api/video/encoded_image.h"
|
||||
#include "api/video_codecs/video_decoder.h"
|
||||
#include "modules/video_coding/include/video_error_codes.h"
|
||||
@ -35,7 +36,8 @@ class VideoDecoderSoftwareFallbackWrapper final : public VideoDecoder {
|
||||
public:
|
||||
VideoDecoderSoftwareFallbackWrapper(
|
||||
std::unique_ptr<VideoDecoder> sw_fallback_decoder,
|
||||
std::unique_ptr<VideoDecoder> hw_decoder);
|
||||
std::unique_ptr<VideoDecoder> hw_decoder,
|
||||
bool force_sw_decoder_fallback);
|
||||
~VideoDecoderSoftwareFallbackWrapper() override;
|
||||
|
||||
bool Configure(const Settings& settings) override;
|
||||
@ -67,6 +69,7 @@ class VideoDecoderSoftwareFallbackWrapper final : public VideoDecoder {
|
||||
} decoder_type_;
|
||||
std::unique_ptr<VideoDecoder> hw_decoder_;
|
||||
|
||||
const bool force_sw_decoder_fallback_;
|
||||
Settings decoder_settings_;
|
||||
const std::unique_ptr<VideoDecoder> fallback_decoder_;
|
||||
const std::string fallback_implementation_name_;
|
||||
@ -77,9 +80,11 @@ class VideoDecoderSoftwareFallbackWrapper final : public VideoDecoder {
|
||||
|
||||
VideoDecoderSoftwareFallbackWrapper::VideoDecoderSoftwareFallbackWrapper(
|
||||
std::unique_ptr<VideoDecoder> sw_fallback_decoder,
|
||||
std::unique_ptr<VideoDecoder> hw_decoder)
|
||||
std::unique_ptr<VideoDecoder> hw_decoder,
|
||||
bool force_sw_decoder_fallback)
|
||||
: decoder_type_(DecoderType::kNone),
|
||||
hw_decoder_(std::move(hw_decoder)),
|
||||
force_sw_decoder_fallback_(force_sw_decoder_fallback),
|
||||
fallback_decoder_(std::move(sw_fallback_decoder)),
|
||||
fallback_implementation_name_(
|
||||
fallback_decoder_->GetDecoderInfo().implementation_name +
|
||||
@ -94,7 +99,7 @@ VideoDecoderSoftwareFallbackWrapper::~VideoDecoderSoftwareFallbackWrapper() =
|
||||
bool VideoDecoderSoftwareFallbackWrapper::Configure(const Settings& settings) {
|
||||
decoder_settings_ = settings;
|
||||
|
||||
if (webrtc::field_trial::IsEnabled("WebRTC-Video-ForcedSwDecoderFallback")) {
|
||||
if (force_sw_decoder_fallback_) {
|
||||
RTC_LOG(LS_INFO) << "Forced software decoder fallback enabled.";
|
||||
RTC_DCHECK(decoder_type_ == DecoderType::kNone);
|
||||
return InitFallbackDecoder();
|
||||
@ -276,10 +281,20 @@ VideoDecoder& VideoDecoderSoftwareFallbackWrapper::active_decoder() const {
|
||||
} // namespace
|
||||
|
||||
std::unique_ptr<VideoDecoder> CreateVideoDecoderSoftwareFallbackWrapper(
|
||||
const Environment& env,
|
||||
std::unique_ptr<VideoDecoder> sw_fallback_decoder,
|
||||
std::unique_ptr<VideoDecoder> hw_decoder) {
|
||||
return std::make_unique<VideoDecoderSoftwareFallbackWrapper>(
|
||||
std::move(sw_fallback_decoder), std::move(hw_decoder));
|
||||
std::move(sw_fallback_decoder), std::move(hw_decoder),
|
||||
env.field_trials().IsEnabled("WebRTC-Video-ForcedSwDecoderFallback"));
|
||||
}
|
||||
|
||||
std::unique_ptr<VideoDecoder> CreateVideoDecoderSoftwareFallbackWrapper(
|
||||
std::unique_ptr<VideoDecoder> sw_fallback_decoder,
|
||||
std::unique_ptr<VideoDecoder> hw_decoder) {
|
||||
return std::make_unique<VideoDecoderSoftwareFallbackWrapper>(
|
||||
std::move(sw_fallback_decoder), std::move(hw_decoder),
|
||||
webrtc::field_trial::IsEnabled("WebRTC-Video-ForcedSwDecoderFallback"));
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -13,6 +13,7 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "api/environment/environment.h"
|
||||
#include "api/video_codecs/video_decoder.h"
|
||||
#include "rtc_base/system/rtc_export.h"
|
||||
|
||||
@ -22,6 +23,13 @@ namespace webrtc {
|
||||
// software decoding when a hardware decoder fails to decode a stream due to
|
||||
// hardware restrictions, such as max resolution.
|
||||
RTC_EXPORT std::unique_ptr<VideoDecoder>
|
||||
CreateVideoDecoderSoftwareFallbackWrapper(
|
||||
const Environment& env,
|
||||
std::unique_ptr<VideoDecoder> sw_fallback_decoder,
|
||||
std::unique_ptr<VideoDecoder> hw_decoder);
|
||||
|
||||
// TODO: bugs.webrtc.org/15791 - Deprecated, remove when not used by chromium.
|
||||
RTC_EXPORT std::unique_ptr<VideoDecoder>
|
||||
CreateVideoDecoderSoftwareFallbackWrapper(
|
||||
std::unique_ptr<VideoDecoder> sw_fallback_decoder,
|
||||
std::unique_ptr<VideoDecoder> hw_decoder);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user