Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Unified Diff: webrtc/call/call.cc

Issue 2826263004: Move responsibility for RTP header extensions on video receive. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/call/call.cc
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc
index c7e49dee1a2ef587052eadd88edd406ba74bd218..aa888fb6520a1f6f23308af49fdbb4d8d08ef090 100644
--- a/webrtc/call/call.cc
+++ b/webrtc/call/call.cc
@@ -63,11 +63,7 @@ const int Call::Config::kDefaultStartBitrateBps = 300000;
namespace {
-// TODO(nisse): This really begs for a shared context struct.
-bool UseSendSideBwe(const std::vector<RtpExtension>& extensions,
- bool transport_cc) {
- if (!transport_cc)
- return false;
+bool UseTransportSeqno(const std::vector<RtpExtension>& extensions) {
for (const auto& extension : extensions) {
if (extension.uri == RtpExtension::kTransportSequenceNumberUri)
return true;
@@ -75,18 +71,16 @@ bool UseSendSideBwe(const std::vector<RtpExtension>& extensions,
return false;
}
-bool UseSendSideBwe(const VideoReceiveStream::Config& config) {
- return UseSendSideBwe(config.rtp.extensions, config.rtp.transport_cc);
+// TODO(nisse): This really begs for a shared context struct.
+bool UseSendSideBwe(const std::vector<RtpExtension>& extensions,
+ bool transport_cc) {
+ return transport_cc && UseTransportSeqno(extensions);
}
bool UseSendSideBwe(const AudioReceiveStream::Config& config) {
return UseSendSideBwe(config.rtp.extensions, config.rtp.transport_cc);
}
-bool UseSendSideBwe(const FlexfecReceiveStream::Config& config) {
- return UseSendSideBwe(config.rtp_header_extensions, config.transport_cc);
-}
-
class RtpTransportControllerSend : public RtpTransportControllerSendInterface {
public:
RtpTransportControllerSend(Clock* clock, webrtc::RtcEventLog* event_log);
@@ -138,6 +132,9 @@ class Call : public webrtc::Call,
// Implements webrtc::Call.
PacketReceiver* Receiver() override;
+ void SetVideoReceiveRtpHeaderExtensions(
+ const std::vector<RtpExtension>& extensions) override;
+
webrtc::AudioSendStream* CreateAudioSendStream(
const webrtc::AudioSendStream::Config& config) override;
void DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) override;
@@ -255,6 +252,9 @@ class Call : public webrtc::Call,
std::map<std::string, AudioReceiveStream*> sync_stream_mapping_
GUARDED_BY(receive_crit_);
+ std::vector<RtpExtension> video_rtp_header_extensions_
+ GUARDED_BY(receive_crit_);
+
// This extra map is used for receive processing which is
// independent of media type.
@@ -533,6 +533,12 @@ PacketReceiver* Call::Receiver() {
return this;
}
+void Call::SetVideoReceiveRtpHeaderExtensions(
+ const std::vector<RtpExtension>& extensions) {
+ WriteLockScoped write_lock(*receive_crit_);
+ video_rtp_header_extensions_ = extensions;
+}
+
webrtc::AudioSendStream* Call::CreateAudioSendStream(
const webrtc::AudioSendStream::Config& config) {
TRACE_EVENT0("webrtc", "Call::CreateAudioSendStream");
@@ -724,12 +730,15 @@ webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream(
module_process_thread_.get(), call_stats_.get());
const webrtc::VideoReceiveStream::Config& config = receive_stream->config();
- ReceiveRtpConfig receive_config(config.rtp.extensions,
- UseSendSideBwe(config));
{
WriteLockScoped write_lock(*receive_crit_);
RTC_DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) ==
video_receive_ssrcs_.end());
+ ReceiveRtpConfig receive_config(
+ video_rtp_header_extensions_,
+ config.rtp.transport_cc &&
+ UseTransportSeqno(video_rtp_header_extensions_));
+
video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream;
if (config.rtp.rtx_ssrc) {
video_receive_ssrcs_[config.rtp.rtx_ssrc] = receive_stream;
@@ -755,6 +764,7 @@ void Call::DestroyVideoReceiveStream(
RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
RTC_DCHECK(receive_stream != nullptr);
VideoReceiveStream* receive_stream_impl = nullptr;
+ bool use_send_side_bwe = false;
{
WriteLockScoped write_lock(*receive_crit_);
// Remove all ssrcs pointing to a receive stream. As RTX retransmits on a
@@ -762,8 +772,10 @@ void Call::DestroyVideoReceiveStream(
auto it = video_receive_ssrcs_.begin();
while (it != video_receive_ssrcs_.end()) {
if (it->second == static_cast<VideoReceiveStream*>(receive_stream)) {
- if (receive_stream_impl != nullptr)
+ if (receive_stream_impl != nullptr) {
RTC_DCHECK(receive_stream_impl == it->second);
+ use_send_side_bwe = receive_rtp_config_[it->first].use_send_side_bwe;
+ }
receive_stream_impl = it->second;
receive_rtp_config_.erase(it->first);
it = video_receive_ssrcs_.erase(it);
@@ -771,13 +783,13 @@ void Call::DestroyVideoReceiveStream(
++it;
}
}
- video_receive_streams_.erase(receive_stream_impl);
RTC_CHECK(receive_stream_impl != nullptr);
+ video_receive_streams_.erase(receive_stream_impl);
ConfigureSync(receive_stream_impl->config().sync_group);
}
const VideoReceiveStream::Config& config = receive_stream_impl->config();
- receive_side_cc_.GetRemoteBitrateEstimator(UseSendSideBwe(config))
+ receive_side_cc_.GetRemoteBitrateEstimator(use_send_side_bwe)
->RemoveStream(config.rtp.remote_ssrc);
UpdateAggregateNetworkState();
@@ -811,7 +823,9 @@ FlexfecReceiveStream* Call::CreateFlexfecReceiveStream(
RTC_DCHECK(receive_rtp_config_.find(config.remote_ssrc) ==
receive_rtp_config_.end());
receive_rtp_config_[config.remote_ssrc] =
- ReceiveRtpConfig(config.rtp_header_extensions, UseSendSideBwe(config));
+ ReceiveRtpConfig(video_rtp_header_extensions_,
+ config.transport_cc &&
+ UseTransportSeqno(video_rtp_header_extensions_));
}
// TODO(brandtr): Store config in RtcEventLog here.
@@ -834,6 +848,9 @@ void Call::DestroyFlexfecReceiveStream(FlexfecReceiveStream* receive_stream) {
const FlexfecReceiveStream::Config& config =
receive_stream_impl->GetConfig();
uint32_t ssrc = config.remote_ssrc;
+ receive_side_cc_.GetRemoteBitrateEstimator(
+ receive_rtp_config_[ssrc].use_send_side_bwe)
+ ->RemoveStream(ssrc);
receive_rtp_config_.erase(ssrc);
// Remove all SSRCs pointing to the FlexfecReceiveStreamImpl to be
@@ -853,9 +870,6 @@ void Call::DestroyFlexfecReceiveStream(FlexfecReceiveStream* receive_stream) {
++media_it;
}
- receive_side_cc_.GetRemoteBitrateEstimator(UseSendSideBwe(config))
- ->RemoveStream(ssrc);
-
flexfec_receive_streams_.erase(receive_stream_impl);
}

Powered by Google App Engine
This is Rietveld 408576698