mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Pass Environment to custom FecController at construction
To allow custom FecController use propagated rather than global field trials note that there is one FecControllerFactory per peer connection factory, but FecController is created per peer connection and may use per peer connection field trials. Bug: webrtc:10335 Change-Id: Id25bfaf4b49d4f6d551730c8fd55596ddc49ab47 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/333400 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41478}
This commit is contained in:
parent
b64eef1234
commit
55a61898a8
5 changed files with 24 additions and 4 deletions
|
@ -889,6 +889,8 @@ rtc_source_set("fec_controller_api") {
|
||||||
|
|
||||||
deps = [
|
deps = [
|
||||||
"../modules:module_fec_api",
|
"../modules:module_fec_api",
|
||||||
|
"../rtc_base:checks",
|
||||||
|
"environment",
|
||||||
"video:video_frame_type",
|
"video:video_frame_type",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,10 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "api/environment/environment.h"
|
||||||
#include "api/video/video_frame_type.h"
|
#include "api/video/video_frame_type.h"
|
||||||
#include "modules/include/module_fec_types.h"
|
#include "modules/include/module_fec_types.h"
|
||||||
|
#include "rtc_base/checks.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
// TODO(yinwa): work in progress. API in class FecController should not be
|
// TODO(yinwa): work in progress. API in class FecController should not be
|
||||||
|
@ -87,8 +89,23 @@ class FecController {
|
||||||
|
|
||||||
class FecControllerFactoryInterface {
|
class FecControllerFactoryInterface {
|
||||||
public:
|
public:
|
||||||
virtual std::unique_ptr<FecController> CreateFecController() = 0;
|
|
||||||
virtual ~FecControllerFactoryInterface() = default;
|
virtual ~FecControllerFactoryInterface() = default;
|
||||||
|
|
||||||
|
// TODO: bugs.webrtc.org/10335 - make pure virtual when implemented by derived
|
||||||
|
// classes.
|
||||||
|
virtual std::unique_ptr<FecController> CreateFecController(
|
||||||
|
const Environment& env) {
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
return CreateFecController();
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: bugs.webrtc.org/10335 - delete when implementation is removed from
|
||||||
|
// the derived classes.
|
||||||
|
[[deprecated]] virtual std::unique_ptr<FecController> CreateFecController() {
|
||||||
|
RTC_CHECK_NOTREACHED();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|
|
@ -920,7 +920,7 @@ webrtc::VideoSendStream* Call::CreateVideoSendStream(
|
||||||
}
|
}
|
||||||
std::unique_ptr<FecController> fec_controller =
|
std::unique_ptr<FecController> fec_controller =
|
||||||
config_.fec_controller_factory
|
config_.fec_controller_factory
|
||||||
? config_.fec_controller_factory->CreateFecController()
|
? config_.fec_controller_factory->CreateFecController(env_)
|
||||||
: std::make_unique<FecControllerDefault>(&env_.clock());
|
: std::make_unique<FecControllerDefault>(&env_.clock());
|
||||||
return CreateVideoSendStream(std::move(config), std::move(encoder_config),
|
return CreateVideoSendStream(std::move(config), std::move(encoder_config),
|
||||||
std::move(fec_controller));
|
std::move(fec_controller));
|
||||||
|
|
|
@ -572,7 +572,7 @@ void CallTest::CreateVideoSendStreams() {
|
||||||
if (fec_controller_factory_.get()) {
|
if (fec_controller_factory_.get()) {
|
||||||
video_send_streams_[i] = sender_call_->CreateVideoSendStream(
|
video_send_streams_[i] = sender_call_->CreateVideoSendStream(
|
||||||
video_send_configs_[i].Copy(), video_encoder_configs_[i].Copy(),
|
video_send_configs_[i].Copy(), video_encoder_configs_[i].Copy(),
|
||||||
fec_controller_factory_->CreateFecController());
|
fec_controller_factory_->CreateFecController(send_env_));
|
||||||
} else {
|
} else {
|
||||||
video_send_streams_[i] = sender_call_->CreateVideoSendStream(
|
video_send_streams_[i] = sender_call_->CreateVideoSendStream(
|
||||||
video_send_configs_[i].Copy(), video_encoder_configs_[i].Copy());
|
video_send_configs_[i].Copy(), video_encoder_configs_[i].Copy());
|
||||||
|
|
|
@ -430,7 +430,8 @@ SendVideoStream::SendVideoStream(CallClient* sender,
|
||||||
if (config.stream.fec_controller_factory) {
|
if (config.stream.fec_controller_factory) {
|
||||||
send_stream_ = sender_->call_->CreateVideoSendStream(
|
send_stream_ = sender_->call_->CreateVideoSendStream(
|
||||||
std::move(send_config), std::move(encoder_config),
|
std::move(send_config), std::move(encoder_config),
|
||||||
config.stream.fec_controller_factory->CreateFecController());
|
config.stream.fec_controller_factory->CreateFecController(
|
||||||
|
sender_->env_));
|
||||||
} else {
|
} else {
|
||||||
send_stream_ = sender_->call_->CreateVideoSendStream(
|
send_stream_ = sender_->call_->CreateVideoSendStream(
|
||||||
std::move(send_config), std::move(encoder_config));
|
std::move(send_config), std::move(encoder_config));
|
||||||
|
|
Loading…
Reference in a new issue