Index: webrtc/media/engine/webrtcvideoengine2.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc |
index 3cff1e6fbd63778fa4a72721d0d4beac49f4a51e..d46e6c858585aba06a1e76ffb9693c602881796a 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2.cc |
@@ -877,7 +877,7 @@ webrtc::RtpParameters WebRtcVideoChannel2::GetRtpParameters( |
return webrtc::RtpParameters(); |
} |
- return it->second->rtp_parameters(); |
+ return it->second->GetRtpParameters(); |
} |
bool WebRtcVideoChannel2::SetRtpParameters( |
@@ -990,10 +990,11 @@ bool WebRtcVideoChannel2::SetSend(bool send) { |
LOG(LS_ERROR) << "SetSend(true) called before setting codec."; |
return false; |
} |
- if (send) { |
- StartAllSendStreams(); |
- } else { |
- StopAllSendStreams(); |
+ { |
+ rtc::CritScope stream_lock(&stream_crit_); |
+ for (const auto& kv : send_streams_) { |
+ kv.second->SetSend(send); |
+ } |
} |
sending_ = send; |
return true; |
@@ -1076,7 +1077,7 @@ bool WebRtcVideoChannel2::AddSendStream(const StreamParams& sp) { |
default_send_ssrc_ = ssrc; |
} |
if (sending_) { |
- stream->Start(); |
+ stream->SetSend(true); |
} |
return true; |
@@ -1482,24 +1483,6 @@ bool WebRtcVideoChannel2::SendRtcp(const uint8_t* data, size_t len) { |
return MediaChannel::SendRtcp(&packet, rtc::PacketOptions()); |
} |
-void WebRtcVideoChannel2::StartAllSendStreams() { |
- rtc::CritScope stream_lock(&stream_crit_); |
- for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator it = |
- send_streams_.begin(); |
- it != send_streams_.end(); ++it) { |
- it->second->Start(); |
- } |
-} |
- |
-void WebRtcVideoChannel2::StopAllSendStreams() { |
- rtc::CritScope stream_lock(&stream_crit_); |
- for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator it = |
- send_streams_.begin(); |
- it != send_streams_.end(); ++it) { |
- it->second->Stop(); |
- } |
-} |
- |
WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters:: |
VideoSendStreamParameters( |
const webrtc::VideoSendStream::Config& config, |
@@ -1882,9 +1865,17 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetRtpParameters( |
pending_encoder_reconfiguration_ = true; |
} |
rtp_parameters_ = new_parameters; |
+ // Encoding may have been activated/deactivated. |
+ UpdateSendState(); |
return true; |
} |
+webrtc::RtpParameters |
+WebRtcVideoChannel2::WebRtcVideoSendStream::GetRtpParameters() const { |
+ rtc::CritScope cs(&lock_); |
+ return rtp_parameters_; |
+} |
+ |
bool WebRtcVideoChannel2::WebRtcVideoSendStream::ValidateRtpParameters( |
const webrtc::RtpParameters& rtp_parameters) { |
if (rtp_parameters.encodings.size() != 1) { |
@@ -1895,6 +1886,19 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::ValidateRtpParameters( |
return true; |
} |
+void WebRtcVideoChannel2::WebRtcVideoSendStream::UpdateSendState() { |
+ // TODO(deadbeef): Need to handle more than one encoding in the future. |
+ RTC_DCHECK(rtp_parameters_.encodings.size() == 1u); |
+ if (sending_ && rtp_parameters_.encodings[0].active) { |
+ RTC_DCHECK(stream_ != nullptr); |
+ stream_->Start(); |
+ } else { |
+ if (stream_ != nullptr) { |
+ stream_->Stop(); |
+ } |
+ } |
+} |
+ |
webrtc::VideoEncoderConfig |
WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig( |
const Dimensions& dimensions, |
@@ -1994,19 +1998,10 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetDimensions( |
parameters_.encoder_config = encoder_config; |
} |
-void WebRtcVideoChannel2::WebRtcVideoSendStream::Start() { |
+void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { |
rtc::CritScope cs(&lock_); |
- RTC_DCHECK(stream_ != NULL); |
- stream_->Start(); |
- sending_ = true; |
-} |
- |
-void WebRtcVideoChannel2::WebRtcVideoSendStream::Stop() { |
- rtc::CritScope cs(&lock_); |
- if (stream_ != NULL) { |
- stream_->Stop(); |
- } |
- sending_ = false; |
+ sending_ = send; |
+ UpdateSendState(); |
} |
void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { |