Revert "Remame VideoSendStream::UpdateActiveSimulcastLayers to StartPerRtpStream"
This reverts commit d8c4de71722c9de38f942932be21d4015f32a3bc.
Reason for revert: Tentative revert due to possible perf regression. b/260123362
Original change's description:
> Remame VideoSendStream::UpdateActiveSimulcastLayers to StartPerRtpStream
>
> VideoSendStreamImpl::Start and VideoSendStream::Start are not used by PeerConnections, only StartPerRtpStream.
> Therefore this cl:
> - Change implementation of VideoSendStream::Start to use VideoSendStream::StartPerRtpStream. VideoSendstream::Start is kept for convenience.
> - Remove VideoSendStreamImpl::Start() since it was only used by tests that use call and is confusing.
> - RtpVideoSender::SetActive is removed/changed to RtpVideoSender::Stop(). For normal operations RtpVideoSender::SetActiveModules is used.
>
> Bug: none
> Change-Id: I43b153250b07c02fe63c84e3c4cec18d4ec0d47a
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/283660
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Commit-Queue: Per Kjellander <perkj@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#38698}
Bug: none
Change-Id: I4f0d27679e51361b9ec54d2ae8e4d972527875d1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/284940
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Auto-Submit: Per Kjellander <perkj@webrtc.org>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38725}
diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc
index 0852a7b..5d2d1f1 100644
--- a/call/rtp_video_sender.cc
+++ b/call/rtp_video_sender.cc
@@ -480,24 +480,33 @@
RTC_DCHECK(!registered_for_feedback_);
}
-void RtpVideoSender::Stop() {
+void RtpVideoSender::SetActive(bool active) {
RTC_DCHECK_RUN_ON(&transport_checker_);
MutexLock lock(&mutex_);
- if (!active_)
+ if (active_ == active)
return;
- const std::vector<bool> active_modules(rtp_streams_.size(), false);
+ const std::vector<bool> active_modules(rtp_streams_.size(), active);
SetActiveModulesLocked(active_modules);
+
+ auto* feedback_provider = transport_->GetStreamFeedbackProvider();
+ if (active && !registered_for_feedback_) {
+ feedback_provider->RegisterStreamFeedbackObserver(rtp_config_.ssrcs, this);
+ registered_for_feedback_ = true;
+ } else if (!active && registered_for_feedback_) {
+ feedback_provider->DeRegisterStreamFeedbackObserver(this);
+ registered_for_feedback_ = false;
+ }
}
-void RtpVideoSender::SetActiveModules(const std::vector<bool>& active_modules) {
+void RtpVideoSender::SetActiveModules(const std::vector<bool> active_modules) {
RTC_DCHECK_RUN_ON(&transport_checker_);
MutexLock lock(&mutex_);
return SetActiveModulesLocked(active_modules);
}
void RtpVideoSender::SetActiveModulesLocked(
- const std::vector<bool>& active_modules) {
+ const std::vector<bool> active_modules) {
RTC_DCHECK_RUN_ON(&transport_checker_);
RTC_DCHECK_EQ(rtp_streams_.size(), active_modules.size());
active_ = false;
@@ -529,17 +538,6 @@
/*remb_candidate=*/true);
}
}
- if (!active_) {
- auto* feedback_provider = transport_->GetStreamFeedbackProvider();
- if (registered_for_feedback_) {
- feedback_provider->DeRegisterStreamFeedbackObserver(this);
- registered_for_feedback_ = false;
- }
- } else if (!registered_for_feedback_) {
- auto* feedback_provider = transport_->GetStreamFeedbackProvider();
- feedback_provider->RegisterStreamFeedbackObserver(rtp_config_.ssrcs, this);
- registered_for_feedback_ = true;
- }
}
bool RtpVideoSender::IsActive() {
diff --git a/call/rtp_video_sender.h b/call/rtp_video_sender.h
index 9b88916..9804bd8 100644
--- a/call/rtp_video_sender.h
+++ b/call/rtp_video_sender.h
@@ -95,11 +95,13 @@
RtpVideoSender(const RtpVideoSender&) = delete;
RtpVideoSender& operator=(const RtpVideoSender&) = delete;
+ // RtpVideoSender will only route packets if being active, all packets will be
+ // dropped otherwise.
+ void SetActive(bool active) RTC_LOCKS_EXCLUDED(mutex_) override;
// Sets the sending status of the rtp modules and appropriately sets the
// payload router to active if any rtp modules are active.
- void SetActiveModules(const std::vector<bool>& active_modules)
+ void SetActiveModules(std::vector<bool> active_modules)
RTC_LOCKS_EXCLUDED(mutex_) override;
- void Stop() RTC_LOCKS_EXCLUDED(mutex_) override;
bool IsActive() RTC_LOCKS_EXCLUDED(mutex_) override;
void OnNetworkAvailability(bool network_available)
@@ -155,7 +157,7 @@
private:
bool IsActiveLocked() RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
- void SetActiveModulesLocked(const std::vector<bool>& active_modules)
+ void SetActiveModulesLocked(std::vector<bool> active_modules)
RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
void UpdateModuleSendingState() RTC_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
void ConfigureProtection();
diff --git a/call/rtp_video_sender_interface.h b/call/rtp_video_sender_interface.h
index 3f28771..acb68e3 100644
--- a/call/rtp_video_sender_interface.h
+++ b/call/rtp_video_sender_interface.h
@@ -31,12 +31,12 @@
class RtpVideoSenderInterface : public EncodedImageCallback,
public FecControllerOverride {
public:
+ // RtpVideoSender will only route packets if being active, all
+ // packets will be dropped otherwise.
+ virtual void SetActive(bool active) = 0;
// Sets the sending status of the rtp modules and appropriately sets the
// RtpVideoSender to active if any rtp modules are active.
- // A module will only send packet if beeing active.
- virtual void SetActiveModules(const std::vector<bool>& active_modules) = 0;
- // Set the sending status of all rtp modules to inactive.
- virtual void Stop() = 0;
+ virtual void SetActiveModules(std::vector<bool> active_modules) = 0;
virtual bool IsActive() = 0;
virtual void OnNetworkAvailability(bool network_available) = 0;
diff --git a/call/rtp_video_sender_unittest.cc b/call/rtp_video_sender_unittest.cc
index a8595e3..3ce9ca2 100644
--- a/call/rtp_video_sender_unittest.cc
+++ b/call/rtp_video_sender_unittest.cc
@@ -187,14 +187,14 @@
/*frame_transformer=*/nullptr,
field_trials) {}
- ~RtpVideoSenderTestFixture() { Stop(); }
+ ~RtpVideoSenderTestFixture() { SetActive(false); }
RtpVideoSender* router() { return router_.get(); }
MockTransport& transport() { return transport_; }
void AdvanceTime(TimeDelta delta) { time_controller_.AdvanceTime(delta); }
- void Stop() {
- RunOnTransportQueue([&]() { router_->Stop(); });
+ void SetActive(bool active) {
+ RunOnTransportQueue([&]() { router_->SetActive(active); });
}
void SetActiveModules(const std::vector<bool>& active_modules) {
@@ -249,15 +249,15 @@
EXPECT_NE(EncodedImageCallback::Result::OK,
test.router()->OnEncodedImage(encoded_image, nullptr).error);
- test.SetActiveModules({true});
+ test.SetActive(true);
EXPECT_EQ(EncodedImageCallback::Result::OK,
test.router()->OnEncodedImage(encoded_image, nullptr).error);
- test.SetActiveModules({false});
+ test.SetActive(false);
EXPECT_NE(EncodedImageCallback::Result::OK,
test.router()->OnEncodedImage(encoded_image, nullptr).error);
- test.SetActiveModules({true});
+ test.SetActive(true);
EXPECT_EQ(EncodedImageCallback::Result::OK,
test.router()->OnEncodedImage(encoded_image, nullptr).error);
}
@@ -276,7 +276,7 @@
CodecSpecificInfo codec_info;
codec_info.codecType = kVideoCodecVP8;
- test.SetActiveModules({true, true});
+ test.SetActive(true);
EXPECT_EQ(EncodedImageCallback::Result::OK,
test.router()->OnEncodedImage(encoded_image_1, &codec_info).error);
@@ -286,7 +286,7 @@
test.router()->OnEncodedImage(encoded_image_2, &codec_info).error);
// Inactive.
- test.Stop();
+ test.SetActive(false);
EXPECT_NE(EncodedImageCallback::Result::OK,
test.router()->OnEncodedImage(encoded_image_1, &codec_info).error);
EXPECT_NE(EncodedImageCallback::Result::OK,
@@ -370,7 +370,7 @@
TEST(RtpVideoSenderTest, CreateWithNoPreviousStates) {
RtpVideoSenderTestFixture test({kSsrc1, kSsrc2}, {kRtxSsrc1, kRtxSsrc2},
kPayloadType, {});
- test.SetActiveModules({true, true});
+ test.SetActive(true);
std::map<uint32_t, RtpPayloadState> initial_states =
test.router()->GetRtpPayloadStates();
@@ -395,7 +395,7 @@
RtpVideoSenderTestFixture test({kSsrc1, kSsrc2}, {kRtxSsrc1, kRtxSsrc2},
kPayloadType, states);
- test.SetActiveModules({true, true});
+ test.SetActive(true);
std::map<uint32_t, RtpPayloadState> initial_states =
test.router()->GetRtpPayloadStates();
@@ -435,7 +435,7 @@
test.router()->OnEncodedImage(encoded_image, nullptr).error);
::testing::Mock::VerifyAndClearExpectations(&callback);
- test.SetActiveModules({true});
+ test.SetActive(true);
FrameCounts frame_counts;
EXPECT_CALL(callback, FrameCountUpdated(_, kSsrc1))
@@ -464,7 +464,7 @@
TEST(RtpVideoSenderTest, DoesNotRetrasmitAckedPackets) {
RtpVideoSenderTestFixture test({kSsrc1, kSsrc2}, {kRtxSsrc1, kRtxSsrc2},
kPayloadType, {});
- test.SetActiveModules({true, true});
+ test.SetActive(true);
constexpr uint8_t kPayload = 'a';
EncodedImage encoded_image;
@@ -629,7 +629,7 @@
TEST(RtpVideoSenderTest, EarlyRetransmits) {
RtpVideoSenderTestFixture test({kSsrc1, kSsrc2}, {kRtxSsrc1, kRtxSsrc2},
kPayloadType, {});
- test.SetActiveModules({true, true});
+ test.SetActive(true);
const uint8_t kPayload[1] = {'a'};
EncodedImage encoded_image;
@@ -724,7 +724,7 @@
TEST(RtpVideoSenderTest, SupportsDependencyDescriptor) {
RtpVideoSenderTestFixture test({kSsrc1}, {}, kPayloadType, {});
- test.SetActiveModules({true});
+ test.SetActive(true);
RtpHeaderExtensionMap extensions;
extensions.Register<RtpDependencyDescriptorExtension>(
@@ -797,7 +797,7 @@
sent_packets.emplace_back(&extensions).Parse(packet, length));
return true;
});
- test.SetActiveModules({true});
+ test.SetActive(true);
EncodedImage key_frame_image;
key_frame_image._frameType = VideoFrameType::kVideoFrameKey;
@@ -831,7 +831,7 @@
TEST(RtpVideoSenderTest, SupportsDependencyDescriptorForVp9) {
RtpVideoSenderTestFixture test({kSsrc1}, {}, kPayloadType, {});
- test.SetActiveModules({true});
+ test.SetActive(true);
RtpHeaderExtensionMap extensions;
extensions.Register<RtpDependencyDescriptorExtension>(
@@ -887,7 +887,7 @@
TEST(RtpVideoSenderTest,
SupportsDependencyDescriptorForVp9NotProvidedByEncoder) {
RtpVideoSenderTestFixture test({kSsrc1}, {}, kPayloadType, {});
- test.SetActiveModules({true});
+ test.SetActive(true);
RtpHeaderExtensionMap extensions;
extensions.Register<RtpDependencyDescriptorExtension>(
@@ -942,7 +942,7 @@
test::ScopedKeyValueConfig field_trials(
"WebRTC-GenericCodecDependencyDescriptor/Enabled/");
RtpVideoSenderTestFixture test({kSsrc1}, {}, kPayloadType, {}, &field_trials);
- test.SetActiveModules({true});
+ test.SetActive(true);
RtpHeaderExtensionMap extensions;
extensions.Register<RtpDependencyDescriptorExtension>(
@@ -988,7 +988,7 @@
TEST(RtpVideoSenderTest, SupportsStoppingUsingDependencyDescriptor) {
RtpVideoSenderTestFixture test({kSsrc1}, {}, kPayloadType, {});
- test.SetActiveModules({true});
+ test.SetActive(true);
RtpHeaderExtensionMap extensions;
extensions.Register<RtpDependencyDescriptorExtension>(
@@ -1073,7 +1073,7 @@
kRtpHeaderSizeBytes + kTransportPacketOverheadBytes;
RtpVideoSenderTestFixture test({kSsrc1}, {}, kPayloadType, {}, &field_trials);
test.router()->OnTransportOverheadChanged(kTransportPacketOverheadBytes);
- test.SetActiveModules({true});
+ test.SetActive(true);
{
test.router()->OnBitrateUpdated(CreateBitrateAllocationUpdate(300000),
diff --git a/call/video_send_stream.h b/call/video_send_stream.h
index 9608281..e54a51d 100644
--- a/call/video_send_stream.h
+++ b/call/video_send_stream.h
@@ -216,15 +216,11 @@
// Note: This starts stream activity if it is inactive and one of the layers
// is active. This stops stream activity if it is active and all layers are
// inactive.
- // `active_layers` should have the same size as the number of configured
- // simulcast layers or one if only one rtp stream is used.
- virtual void StartPerRtpStream(std::vector<bool> active_layers) = 0;
+ virtual void UpdateActiveSimulcastLayers(std::vector<bool> active_layers) = 0;
// Starts stream activity.
// When a stream is active, it can receive, process and deliver packets.
- // Prefer to use StartPerRtpStream.
virtual void Start() = 0;
-
// Stops stream activity.
// When a stream is stopped, it can't receive, process or deliver packets.
virtual void Stop() = 0;
@@ -232,9 +228,9 @@
// Accessor for determining if the stream is active. This is an inexpensive
// call that must be made on the same thread as `Start()` and `Stop()` methods
// are called on and will return `true` iff activity has been started either
- // via `Start()` or `StartPerRtpStream()`. If activity is either
+ // via `Start()` or `UpdateActiveSimulcastLayers()`. If activity is either
// stopped or is in the process of being stopped as a result of a call to
- // either `Stop()` or `StartPerRtpStream()` where all layers were
+ // either `Stop()` or `UpdateActiveSimulcastLayers()` where all layers were
// deactivated, the return value will be `false`.
virtual bool started() = 0;
diff --git a/media/engine/fake_webrtc_call.cc b/media/engine/fake_webrtc_call.cc
index 8046c3a..063be93 100644
--- a/media/engine/fake_webrtc_call.cc
+++ b/media/engine/fake_webrtc_call.cc
@@ -338,7 +338,7 @@
webrtc::InvokeSetParametersCallback(callback, webrtc::RTCError::OK());
}
-void FakeVideoSendStream::StartPerRtpStream(
+void FakeVideoSendStream::UpdateActiveSimulcastLayers(
const std::vector<bool> active_layers) {
sending_ = false;
for (const bool active_layer : active_layers) {
diff --git a/media/engine/fake_webrtc_call.h b/media/engine/fake_webrtc_call.h
index 370b707..a3876b3 100644
--- a/media/engine/fake_webrtc_call.h
+++ b/media/engine/fake_webrtc_call.h
@@ -202,7 +202,7 @@
void OnFrame(const webrtc::VideoFrame& frame) override;
// webrtc::VideoSendStream implementation.
- void StartPerRtpStream(std::vector<bool> active_layers) override;
+ void UpdateActiveSimulcastLayers(std::vector<bool> active_layers) override;
void Start() override;
void Stop() override;
bool started() override { return IsSending(); }
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index d4bdeff..8dfc46c 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2439,7 +2439,7 @@
}
// This updates what simulcast layers are sending, and possibly starts
// or stops the VideoSendStream.
- stream_->StartPerRtpStream(active_layers);
+ stream_->UpdateActiveSimulcastLayers(active_layers);
} else {
if (stream_ != nullptr) {
stream_->Stop();
@@ -2846,7 +2846,7 @@
parameters_.encoder_config.encoder_specific_settings = NULL;
- // Calls stream_->StartPerRtpStream() to start the VideoSendStream
+ // Calls stream_->UpdateActiveSimulcastLayers() to start the VideoSendStream
// if necessary conditions are met.
UpdateSendState();
diff --git a/test/call_test.cc b/test/call_test.cc
index 156b8a7..7e7c9bb 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -591,11 +591,8 @@
}
void CallTest::StartVideoStreams() {
- for (size_t i = 0; i < video_send_streams_.size(); ++i) {
- std::vector<bool> active_rtp_streams(
- video_send_configs_[i].rtp.ssrcs.size(), true);
- video_send_streams_[i]->StartPerRtpStream(active_rtp_streams);
- }
+ for (VideoSendStream* video_send_stream : video_send_streams_)
+ video_send_stream->Start();
for (VideoReceiveStreamInterface* video_recv_stream : video_receive_streams_)
video_recv_stream->Start();
}
diff --git a/test/scenario/video_stream.cc b/test/scenario/video_stream.cc
index 96ced83..ad352f9 100644
--- a/test/scenario/video_stream.cc
+++ b/test/scenario/video_stream.cc
@@ -480,7 +480,7 @@
MutexLock lock(&mutex_);
if (config_.encoder.codec ==
VideoStreamConfig::Encoder::Codec::kVideoCodecVP8) {
- send_stream_->StartPerRtpStream(active_layers);
+ send_stream_->UpdateActiveSimulcastLayers(active_layers);
}
VideoEncoderConfig encoder_config = CreateVideoEncoderConfig(config_);
RTC_CHECK_EQ(encoder_config.simulcast_layers.size(), active_layers.size());
diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc
index e5545e7..30598c1 100644
--- a/video/video_send_stream.cc
+++ b/video/video_send_stream.cc
@@ -209,12 +209,8 @@
transport_->DestroyRtpVideoSender(rtp_video_sender_);
}
-void VideoSendStream::Start() {
- const std::vector<bool> active_layers(config_.rtp.ssrcs.size(), true);
- StartPerRtpStream(active_layers);
-}
-
-void VideoSendStream::StartPerRtpStream(const std::vector<bool> active_layers) {
+void VideoSendStream::UpdateActiveSimulcastLayers(
+ const std::vector<bool> active_layers) {
RTC_DCHECK_RUN_ON(&thread_checker_);
// Keep our `running_` flag expected state in sync with active layers since
@@ -236,16 +232,35 @@
}
}
active_layers_string << "}";
- RTC_LOG(LS_INFO) << "StartPerRtpStream: " << active_layers_string.str();
+ RTC_LOG(LS_INFO) << "UpdateActiveSimulcastLayers: "
+ << active_layers_string.str();
rtp_transport_queue_->RunOrPost(
SafeTask(transport_queue_safety_, [this, active_layers] {
- send_stream_.StartPerRtpStream(active_layers);
+ send_stream_.UpdateActiveSimulcastLayers(active_layers);
}));
running_ = running;
}
+void VideoSendStream::Start() {
+ RTC_DCHECK_RUN_ON(&thread_checker_);
+ RTC_DLOG(LS_INFO) << "VideoSendStream::Start";
+ if (running_)
+ return;
+
+ running_ = true;
+
+ // It is expected that after VideoSendStream::Start has been called, incoming
+ // frames are not dropped in VideoStreamEncoder. To ensure this, Start has to
+ // be synchronized.
+ // TODO(tommi): ^^^ Validate if this still holds.
+ rtp_transport_queue_->RunSynchronous([this] {
+ transport_queue_safety_->SetAlive();
+ send_stream_.Start();
+ });
+}
+
void VideoSendStream::Stop() {
RTC_DCHECK_RUN_ON(&thread_checker_);
if (!running_)
diff --git a/video/video_send_stream.h b/video/video_send_stream.h
index a7ce112..a052b85 100644
--- a/video/video_send_stream.h
+++ b/video/video_send_stream.h
@@ -78,8 +78,8 @@
void DeliverRtcp(const uint8_t* packet, size_t length);
// webrtc::VideoSendStream implementation.
+ void UpdateActiveSimulcastLayers(std::vector<bool> active_layers) override;
void Start() override;
- void StartPerRtpStream(std::vector<bool> active_layers) override;
void Stop() override;
bool started() override;
diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc
index f34388e..06f6a05 100644
--- a/video/video_send_stream_impl.cc
+++ b/video/video_send_stream_impl.cc
@@ -312,18 +312,31 @@
rtp_video_sender_->DeliverRtcp(packet, length);
}
-void VideoSendStreamImpl::StartPerRtpStream(
+void VideoSendStreamImpl::UpdateActiveSimulcastLayers(
const std::vector<bool> active_layers) {
RTC_DCHECK_RUN_ON(rtp_transport_queue_);
bool previously_active = rtp_video_sender_->IsActive();
rtp_video_sender_->SetActiveModules(active_layers);
if (!rtp_video_sender_->IsActive() && previously_active) {
+ // Payload router switched from active to inactive.
StopVideoSendStream();
} else if (rtp_video_sender_->IsActive() && !previously_active) {
+ // Payload router switched from inactive to active.
StartupVideoSendStream();
}
}
+void VideoSendStreamImpl::Start() {
+ RTC_DCHECK_RUN_ON(rtp_transport_queue_);
+ RTC_LOG(LS_INFO) << "VideoSendStream::Start";
+ if (rtp_video_sender_->IsActive())
+ return;
+
+ TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Start");
+ rtp_video_sender_->SetActive(true);
+ StartupVideoSendStream();
+}
+
void VideoSendStreamImpl::StartupVideoSendStream() {
RTC_DCHECK_RUN_ON(rtp_transport_queue_);
transport_queue_safety_->SetAlive();
@@ -365,7 +378,7 @@
RTC_DCHECK(transport_queue_safety_->alive());
TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Stop");
- rtp_video_sender_->Stop();
+ rtp_video_sender_->SetActive(false);
StopVideoSendStream();
}
diff --git a/video/video_send_stream_impl.h b/video/video_send_stream_impl.h
index f145450..d444eab 100644
--- a/video/video_send_stream_impl.h
+++ b/video/video_send_stream_impl.h
@@ -79,7 +79,8 @@
~VideoSendStreamImpl() override;
void DeliverRtcp(const uint8_t* packet, size_t length);
- void StartPerRtpStream(std::vector<bool> active_layers);
+ void UpdateActiveSimulcastLayers(std::vector<bool> active_layers);
+ void Start();
void Stop();
// TODO(holmer): Move these to RtpTransportControllerSend.
diff --git a/video/video_send_stream_impl_unittest.cc b/video/video_send_stream_impl_unittest.cc
index c38dcd0..8a88ba0 100644
--- a/video/video_send_stream_impl_unittest.cc
+++ b/video/video_send_stream_impl_unittest.cc
@@ -66,8 +66,8 @@
}
class MockRtpVideoSender : public RtpVideoSenderInterface {
public:
- MOCK_METHOD(void, SetActiveModules, (const std::vector<bool>&), (override));
- MOCK_METHOD(void, Stop, (), (override));
+ MOCK_METHOD(void, SetActive, (bool), (override));
+ MOCK_METHOD(void, SetActiveModules, (const std::vector<bool>), (override));
MOCK_METHOD(bool, IsActive, (), (override));
MOCK_METHOD(void, OnNetworkAvailability, (bool), (override));
MOCK_METHOD((std::map<uint32_t, RtpState>),
@@ -139,19 +139,12 @@
.WillRepeatedly(Return(&packet_router_));
EXPECT_CALL(transport_controller_, CreateRtpVideoSender)
.WillRepeatedly(Return(&rtp_video_sender_));
- ON_CALL(rtp_video_sender_, Stop()).WillByDefault(::testing::Invoke([&] {
- active_modules_.clear();
- }));
- ON_CALL(rtp_video_sender_, IsActive())
- .WillByDefault(::testing::Invoke([&]() {
- for (bool enabled : active_modules_) {
- if (enabled)
- return true;
- }
- return false;
- }));
- ON_CALL(rtp_video_sender_, SetActiveModules)
- .WillByDefault(::testing::SaveArg<0>(&active_modules_));
+ EXPECT_CALL(rtp_video_sender_, SetActive(_))
+ .WillRepeatedly(::testing::Invoke(
+ [&](bool active) { rtp_video_sender_active_ = active; }));
+ EXPECT_CALL(rtp_video_sender_, IsActive())
+ .WillRepeatedly(
+ ::testing::Invoke([&]() { return rtp_video_sender_active_; }));
ON_CALL(transport_controller_, GetWorkerQueue())
.WillByDefault(Return(&worker_queue_));
}
@@ -190,8 +183,8 @@
NiceMock<MockBitrateAllocator> bitrate_allocator_;
NiceMock<MockVideoStreamEncoder> video_stream_encoder_;
NiceMock<MockRtpVideoSender> rtp_video_sender_;
- std::vector<bool> active_modules_;
+ bool rtp_video_sender_active_ = false;
RtcEventLogNull event_log_;
VideoSendStream::Config config_;
SendDelayStats send_delay_stats_;
@@ -217,7 +210,7 @@
EXPECT_EQ(config.bitrate_priority, kDefaultBitratePriority);
}));
worker_queue_.RunSynchronous([&] {
- vss_impl->StartPerRtpStream({true});
+ vss_impl->Start();
EXPECT_CALL(bitrate_allocator_, RemoveObserver(vss_impl.get())).Times(1);
vss_impl->Stop();
});
@@ -232,7 +225,7 @@
kDefaultInitialBitrateBps, kDefaultBitratePriority,
VideoEncoderConfig::ContentType::kRealtimeVideo);
- worker_queue_.RunSynchronous([&] { vss_impl->StartPerRtpStream({true}); });
+ worker_queue_.RunSynchronous([&] { vss_impl->Start(); });
// QVGA + VGA configuration matching defaults in
// media/engine/simulcast.cc.
@@ -298,7 +291,7 @@
auto vss_impl = CreateVideoSendStreamImpl(
kDefaultInitialBitrateBps, kDefaultBitratePriority,
VideoEncoderConfig::ContentType::kScreen);
- worker_queue_.RunSynchronous([&] { vss_impl->StartPerRtpStream({true}); });
+ worker_queue_.RunSynchronous([&] { vss_impl->Start(); });
// Simulcast screenshare.
VideoStream low_stream;
@@ -364,7 +357,7 @@
kDefaultInitialBitrateBps, kDefaultBitratePriority,
VideoEncoderConfig::ContentType::kRealtimeVideo);
- worker_queue_.RunSynchronous([&] { vss_impl->StartPerRtpStream({true}); });
+ worker_queue_.RunSynchronous([&] { vss_impl->Start(); });
// 2-layer video simulcast.
VideoStream low_stream;
low_stream.width = 320;
@@ -429,7 +422,7 @@
kDefaultInitialBitrateBps, kDefaultBitratePriority,
VideoEncoderConfig::ContentType::kScreen);
worker_queue_.RunSynchronous([&] {
- vss_impl->StartPerRtpStream({true});
+ vss_impl->Start();
vss_impl->Stop();
});
}
@@ -441,7 +434,7 @@
VideoEncoderConfig::ContentType::kScreen);
worker_queue_.RunSynchronous([&] {
EXPECT_CALL(transport_controller_, SetPacingFactor(_)).Times(0);
- vss_impl->StartPerRtpStream({true});
+ vss_impl->Start();
vss_impl->Stop();
});
}
@@ -454,7 +447,7 @@
EXPECT_CALL(transport_controller_, SetPacingFactor(_)).Times(0);
VideoStreamEncoderInterface::EncoderSink* const sink =
static_cast<VideoStreamEncoderInterface::EncoderSink*>(vss_impl.get());
- worker_queue_.RunSynchronous([&] { vss_impl->StartPerRtpStream({true}); });
+ worker_queue_.RunSynchronous([&] { vss_impl->Start(); });
// Populate a test instance of video bitrate allocation.
VideoBitrateAllocation alloc;
alloc.SetBitrate(0, 0, 10000);
@@ -501,7 +494,7 @@
kDefaultInitialBitrateBps, kDefaultBitratePriority,
VideoEncoderConfig::ContentType::kScreen);
worker_queue_.RunSynchronous([&] {
- vss_impl->StartPerRtpStream({true});
+ vss_impl->Start();
// Unpause encoder, to allows allocations to be passed through.
const uint32_t kBitrateBps = 100000;
EXPECT_CALL(rtp_video_sender_, GetPayloadBitrateBps())
@@ -563,7 +556,7 @@
VideoEncoderConfig::ContentType::kScreen);
worker_queue_.RunSynchronous([&] {
- vss_impl->StartPerRtpStream({true});
+ vss_impl->Start();
// Unpause encoder, to allows allocations to be passed through.
const uint32_t kBitrateBps = 100000;
EXPECT_CALL(rtp_video_sender_, GetPayloadBitrateBps())
@@ -606,7 +599,7 @@
kDefaultInitialBitrateBps, kDefaultBitratePriority,
VideoEncoderConfig::ContentType::kScreen);
worker_queue_.RunSynchronous([&] {
- vss_impl->StartPerRtpStream({true});
+ vss_impl->Start();
const uint32_t kBitrateBps = 100000;
// Unpause encoder, to allows allocations to be passed through.
EXPECT_CALL(rtp_video_sender_, GetPayloadBitrateBps())
@@ -716,7 +709,7 @@
auto vss_impl = CreateVideoSendStreamImpl(
kDefaultInitialBitrateBps, kDefaultBitratePriority,
VideoEncoderConfig::ContentType::kRealtimeVideo);
- worker_queue_.RunSynchronous([&] { vss_impl->StartPerRtpStream({true}); });
+ worker_queue_.RunSynchronous([&] { vss_impl->Start(); });
VideoStream qvga_stream;
qvga_stream.width = 320;
qvga_stream.height = 180;
@@ -849,7 +842,7 @@
int min_transmit_bitrate_bps = 30000;
config_.rtp.ssrcs.emplace_back(1);
- worker_queue_.RunSynchronous([&] { vss_impl->StartPerRtpStream({true}); });
+ worker_queue_.RunSynchronous([&] { vss_impl->Start(); });
// Starts without padding.
EXPECT_EQ(0, padding_bitrate);
encoder_queue_->PostTask([&] {
@@ -900,7 +893,7 @@
VideoEncoderConfig::ContentType::kRealtimeVideo);
EXPECT_CALL(bitrate_allocator_, RemoveObserver(vss_impl.get())).Times(0);
worker_queue_.RunSynchronous([&] {
- vss_impl->StartPerRtpStream({true});
+ vss_impl->Start();
const uint32_t kBitrateBps = 100000;
EXPECT_CALL(rtp_video_sender_, GetPayloadBitrateBps())
.Times(1)
@@ -948,7 +941,7 @@
? VideoEncoderConfig::ContentType::kScreen
: VideoEncoderConfig::ContentType::kRealtimeVideo);
- worker_queue_.RunSynchronous([&] { vss_impl->StartPerRtpStream({true}); });
+ worker_queue_.RunSynchronous([&] { vss_impl->Start(); });
// Svc
VideoStream stream;