summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/call/rtp_video_sender.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
commit8dd16259287f58f9273002717ec4d27e97127719 (patch)
tree3863e62a53829a84037444beab3abd4ed9dfc7d0 /third_party/libwebrtc/call/rtp_video_sender.cc
parentReleasing progress-linux version 126.0.1-1~progress7.99u1. (diff)
downloadfirefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz
firefox-8dd16259287f58f9273002717ec4d27e97127719.zip
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/call/rtp_video_sender.cc')
-rw-r--r--third_party/libwebrtc/call/rtp_video_sender.cc88
1 files changed, 22 insertions, 66 deletions
diff --git a/third_party/libwebrtc/call/rtp_video_sender.cc b/third_party/libwebrtc/call/rtp_video_sender.cc
index 4d99c61bb4..ac5540a7f2 100644
--- a/third_party/libwebrtc/call/rtp_video_sender.cc
+++ b/third_party/libwebrtc/call/rtp_video_sender.cc
@@ -470,86 +470,42 @@ RtpVideoSender::RtpVideoSender(
}
RtpVideoSender::~RtpVideoSender() {
- // TODO(bugs.webrtc.org/13517): Remove once RtpVideoSender gets deleted on the
- // transport task queue.
- transport_checker_.Detach();
-
+ RTC_DCHECK_RUN_ON(&transport_checker_);
SetActiveModulesLocked(
- std::vector<bool>(rtp_streams_.size(), /*active=*/false));
-
- RTC_DCHECK(!registered_for_feedback_);
+ /*sending=*/false);
}
-void RtpVideoSender::Stop() {
+void RtpVideoSender::SetSending(bool enabled) {
RTC_DCHECK_RUN_ON(&transport_checker_);
MutexLock lock(&mutex_);
- if (!active_)
+ if (enabled == active_) {
return;
-
- const std::vector<bool> active_modules(rtp_streams_.size(), false);
- SetActiveModulesLocked(active_modules);
-}
-
-void RtpVideoSender::SetActiveModules(const std::vector<bool>& active_modules) {
- RTC_DCHECK_RUN_ON(&transport_checker_);
- MutexLock lock(&mutex_);
- return SetActiveModulesLocked(active_modules);
+ }
+ SetActiveModulesLocked(/*sending=*/enabled);
}
-void RtpVideoSender::SetActiveModulesLocked(
- const std::vector<bool>& active_modules) {
+void RtpVideoSender::SetActiveModulesLocked(bool sending) {
RTC_DCHECK_RUN_ON(&transport_checker_);
- RTC_CHECK_EQ(rtp_streams_.size(), active_modules.size());
- active_ = false;
- for (size_t i = 0; i < active_modules.size(); ++i) {
- if (active_modules[i]) {
- active_ = true;
- }
-
+ if (active_ == sending) {
+ return;
+ }
+ active_ = sending;
+ for (size_t i = 0; i < rtp_streams_.size(); ++i) {
RtpRtcpInterface& rtp_module = *rtp_streams_[i].rtp_rtcp;
- const bool was_active = rtp_module.Sending();
- const bool should_be_active = active_modules[i];
-
// Sends a kRtcpByeCode when going from true to false.
- rtp_module.SetSendingStatus(active_modules[i]);
-
- if (was_active && !should_be_active) {
- // Disabling media, remove from packet router map to reduce size and
- // prevent any stray packets in the pacer from asynchronously arriving
- // to a disabled module.
- transport_->packet_router()->RemoveSendRtpModule(&rtp_module);
-
- // Clear the pacer queue of any packets pertaining to this module.
- transport_->packet_sender()->RemovePacketsForSsrc(rtp_module.SSRC());
- if (rtp_module.RtxSsrc().has_value()) {
- transport_->packet_sender()->RemovePacketsForSsrc(
- *rtp_module.RtxSsrc());
- }
- if (rtp_module.FlexfecSsrc().has_value()) {
- transport_->packet_sender()->RemovePacketsForSsrc(
- *rtp_module.FlexfecSsrc());
- }
- }
-
- // If set to false this module won't send media.
- rtp_module.SetSendingMediaStatus(active_modules[i]);
-
- if (!was_active && should_be_active) {
- // Turning on media, register with packet router.
- transport_->packet_router()->AddSendRtpModule(&rtp_module,
- /*remb_candidate=*/true);
+ rtp_module.SetSendingStatus(sending);
+ rtp_module.SetSendingMediaStatus(sending);
+ if (sending) {
+ transport_->RegisterSendingRtpStream(rtp_module);
+ } else {
+ transport_->DeRegisterSendingRtpStream(rtp_module);
}
}
- 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();
+ auto* feedback_provider = transport_->GetStreamFeedbackProvider();
+ if (!sending) {
+ feedback_provider->DeRegisterStreamFeedbackObserver(this);
+ } else {
feedback_provider->RegisterStreamFeedbackObserver(rtp_config_.ssrcs, this);
- registered_for_feedback_ = true;
}
}