Make fec controller plug-able.
Bug: webrtc:8656
Change-Id: I3d42ffc92a7c95266e5d53bab03f388bd0de2592
Reviewed-on: https://webrtc-review.googlesource.com/39760
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Commit-Queue: Ying Wang <yinwa@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21710}
diff --git a/call/BUILD.gn b/call/BUILD.gn
index 90b44cf..636fe0b 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -28,6 +28,7 @@
"..:webrtc_common",
"../:typedefs",
"../api:audio_mixer_api",
+ "../api:fec_controller_api",
"../api:libjingle_peerconnection_api",
"../api:optional",
"../api:transport_api",
@@ -149,6 +150,7 @@
"../modules/rtp_rtcp",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../modules/utility",
+ "../modules/video_coding:video_coding",
"../rtc_base:checks",
"../rtc_base:rtc_base_approved",
"../rtc_base:rtc_task_queue",
diff --git a/call/DEPS b/call/DEPS
index 307a26e..f823a7b 100644
--- a/call/DEPS
+++ b/call/DEPS
@@ -7,6 +7,7 @@
"+modules/audio_processing",
"+modules/bitrate_controller",
"+modules/congestion_controller",
+ "+modules/video_coding",
"+modules/pacing",
"+modules/rtp_rtcp",
"+modules/utility",
diff --git a/call/call.cc b/call/call.cc
index fceea13..fc8333c 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -42,6 +42,7 @@
#include "modules/rtp_rtcp/source/byte_io.h"
#include "modules/rtp_rtcp/source/rtp_packet_received.h"
#include "modules/utility/include/process_thread.h"
+#include "modules/video_coding/fec_controller_default.h"
#include "rtc_base/basictypes.h"
#include "rtc_base/checks.h"
#include "rtc_base/constructormagic.h"
@@ -184,6 +185,10 @@
webrtc::VideoSendStream* CreateVideoSendStream(
webrtc::VideoSendStream::Config config,
VideoEncoderConfig encoder_config) override;
+ webrtc::VideoSendStream* CreateVideoSendStream(
+ webrtc::VideoSendStream::Config config,
+ VideoEncoderConfig encoder_config,
+ std::unique_ptr<FecController> fec_controller) override;
void DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) override;
webrtc::VideoReceiveStream* CreateVideoReceiveStream(
@@ -402,6 +407,13 @@
return new internal::Call(config, std::move(transport_send));
}
+VideoSendStream* Call::CreateVideoSendStream(
+ VideoSendStream::Config config,
+ VideoEncoderConfig encoder_config,
+ std::unique_ptr<FecController> fec_controller) {
+ return nullptr;
+}
+
namespace internal {
Call::Call(const Call::Config& config,
@@ -714,6 +726,15 @@
webrtc::VideoSendStream* Call::CreateVideoSendStream(
webrtc::VideoSendStream::Config config,
VideoEncoderConfig encoder_config) {
+ return CreateVideoSendStream(
+ std::move(config), std::move(encoder_config),
+ rtc::MakeUnique<FecControllerDefault>(Clock::GetRealTimeClock()));
+}
+
+webrtc::VideoSendStream* Call::CreateVideoSendStream(
+ webrtc::VideoSendStream::Config config,
+ VideoEncoderConfig encoder_config,
+ std::unique_ptr<FecController> fec_controller) {
TRACE_EVENT0("webrtc", "Call::CreateVideoSendStream");
RTC_DCHECK_CALLED_SEQUENTIALLY(&configuration_sequence_checker_);
@@ -733,7 +754,7 @@
call_stats_.get(), transport_send_.get(), bitrate_allocator_.get(),
video_send_delay_stats_.get(), event_log_, std::move(config),
std::move(encoder_config), suspended_video_send_ssrcs_,
- suspended_video_payload_states_);
+ suspended_video_payload_states_, std::move(fec_controller));
{
WriteLockScoped write_lock(*send_crit_);
diff --git a/call/call.h b/call/call.h
index b6e0aea..eb23e8b 100644
--- a/call/call.h
+++ b/call/call.h
@@ -15,6 +15,7 @@
#include <string>
#include <vector>
+#include "api/fec_controller.h"
#include "api/rtcerror.h"
#include "call/audio_receive_stream.h"
#include "call/audio_send_stream.h"
@@ -144,6 +145,10 @@
virtual VideoSendStream* CreateVideoSendStream(
VideoSendStream::Config config,
VideoEncoderConfig encoder_config) = 0;
+ virtual VideoSendStream* CreateVideoSendStream(
+ VideoSendStream::Config config,
+ VideoEncoderConfig encoder_config,
+ std::unique_ptr<FecController> fec_controller);
virtual void DestroyVideoSendStream(VideoSendStream* send_stream) = 0;
virtual VideoReceiveStream* CreateVideoReceiveStream(