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

Side by Side Diff: webrtc/video/vie_channel.cc

Issue 1725363003: Move RTP module activation into PayloadRouter. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: nuke comment Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « webrtc/video/video_send_stream.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) 141 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_)
142 module_process_thread_->RegisterModule(rtp_rtcp); 142 module_process_thread_->RegisterModule(rtp_rtcp);
143 143
144 rtp_rtcp_modules_[0]->SetKeyFrameRequestMethod(kKeyFrameReqPliRtcp); 144 rtp_rtcp_modules_[0]->SetKeyFrameRequestMethod(kKeyFrameReqPliRtcp);
145 if (paced_sender_) { 145 if (paced_sender_) {
146 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) 146 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_)
147 rtp_rtcp->SetStorePacketsStatus(true, kMinSendSidePacketHistorySize); 147 rtp_rtcp->SetStorePacketsStatus(true, kMinSendSidePacketHistorySize);
148 } 148 }
149 packet_router_->AddRtpModule(rtp_rtcp_modules_[0]); 149 packet_router_->AddRtpModule(rtp_rtcp_modules_[0]);
150 if (sender_) { 150 if (sender_) {
151 send_payload_router_->SetSendingRtpModules( 151 send_payload_router_->SetSendingRtpModules(1);
152 std::vector<RtpRtcp*>(1, rtp_rtcp_modules_[0]));
153 RTC_DCHECK(!send_payload_router_->active()); 152 RTC_DCHECK(!send_payload_router_->active());
154 } else { 153 } else {
155 if (vcm_->RegisterReceiveCallback(this) != 0) { 154 if (vcm_->RegisterReceiveCallback(this) != 0) {
156 return -1; 155 return -1;
157 } 156 }
158 vcm_->RegisterFrameTypeCallback(this); 157 vcm_->RegisterFrameTypeCallback(this);
159 vcm_->RegisterReceiveStatisticsCallback(this); 158 vcm_->RegisterReceiveStatisticsCallback(this);
160 vcm_->RegisterDecoderTimingCallback(this); 159 vcm_->RegisterDecoderTimingCallback(this);
161 vcm_->SetRenderDelay(kDefaultRenderDelayMs); 160 vcm_->SetRenderDelay(kDefaultRenderDelayMs);
162 } 161 }
163 return 0; 162 return 0;
164 } 163 }
165 164
166 ViEChannel::~ViEChannel() { 165 ViEChannel::~ViEChannel() {
167 UpdateHistograms(); 166 UpdateHistograms();
168 // Make sure we don't get more callbacks from the RTP module. 167 // Make sure we don't get more callbacks from the RTP module.
169 module_process_thread_->DeRegisterModule( 168 module_process_thread_->DeRegisterModule(
170 vie_receiver_.GetReceiveStatistics()); 169 vie_receiver_.GetReceiveStatistics());
171 if (sender_) { 170 if (sender_) {
172 send_payload_router_->SetSendingRtpModules(std::vector<RtpRtcp*>()); 171 send_payload_router_->SetSendingRtpModules(0);
173 } 172 }
174 for (size_t i = 0; i < num_active_rtp_rtcp_modules_; ++i) 173 for (size_t i = 0; i < num_active_rtp_rtcp_modules_; ++i)
175 packet_router_->RemoveRtpModule(rtp_rtcp_modules_[i]); 174 packet_router_->RemoveRtpModule(rtp_rtcp_modules_[i]);
176 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { 175 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
177 module_process_thread_->DeRegisterModule(rtp_rtcp); 176 module_process_thread_->DeRegisterModule(rtp_rtcp);
178 delete rtp_rtcp; 177 delete rtp_rtcp;
179 } 178 }
180 } 179 }
181 180
182 void ViEChannel::UpdateHistograms() { 181 void ViEChannel::UpdateHistograms() {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 LOG_F(LS_ERROR) << "Incorrect config " 236 LOG_F(LS_ERROR) << "Incorrect config "
238 << video_codec.numberOfSimulcastStreams; 237 << video_codec.numberOfSimulcastStreams;
239 return -1; 238 return -1;
240 } 239 }
241 // Update the RTP module with the settings. 240 // Update the RTP module with the settings.
242 // Stop and Start the RTP module -> trigger new SSRC, if an SSRC hasn't been 241 // Stop and Start the RTP module -> trigger new SSRC, if an SSRC hasn't been
243 // set explicitly. 242 // set explicitly.
244 // The first layer is always active, so the first module can be checked for 243 // The first layer is always active, so the first module can be checked for
245 // sending status. 244 // sending status.
246 bool is_sending = rtp_rtcp_modules_[0]->Sending(); 245 bool is_sending = rtp_rtcp_modules_[0]->Sending();
247 bool router_was_active = send_payload_router_->active();
248 send_payload_router_->set_active(false); 246 send_payload_router_->set_active(false);
249 send_payload_router_->SetSendingRtpModules(std::vector<RtpRtcp*>()); 247 send_payload_router_->SetSendingRtpModules(0);
250 248
251 std::vector<RtpRtcp*> registered_modules; 249 std::vector<RtpRtcp*> registered_modules;
252 std::vector<RtpRtcp*> deregistered_modules;
253 size_t num_active_modules = video_codec.numberOfSimulcastStreams > 0 250 size_t num_active_modules = video_codec.numberOfSimulcastStreams > 0
254 ? video_codec.numberOfSimulcastStreams 251 ? video_codec.numberOfSimulcastStreams
255 : 1; 252 : 1;
256 size_t num_prev_active_modules; 253 size_t num_prev_active_modules;
257 { 254 {
258 // Cache which modules are active so StartSend can know which ones to start. 255 // Cache which modules are active so StartSend can know which ones to start.
259 rtc::CritScope lock(&crit_); 256 rtc::CritScope lock(&crit_);
260 num_prev_active_modules = num_active_rtp_rtcp_modules_; 257 num_prev_active_modules = num_active_rtp_rtcp_modules_;
261 num_active_rtp_rtcp_modules_ = num_active_modules; 258 num_active_rtp_rtcp_modules_ = num_active_modules;
262 } 259 }
263 for (size_t i = 0; i < num_active_modules; ++i) 260 for (size_t i = 0; i < num_active_modules; ++i)
264 registered_modules.push_back(rtp_rtcp_modules_[i]); 261 registered_modules.push_back(rtp_rtcp_modules_[i]);
265 262
266 for (size_t i = num_active_modules; i < rtp_rtcp_modules_.size(); ++i)
267 deregistered_modules.push_back(rtp_rtcp_modules_[i]);
268
269 // Disable inactive modules.
270 for (RtpRtcp* rtp_rtcp : deregistered_modules) {
271 rtp_rtcp->SetSendingStatus(false);
272 rtp_rtcp->SetSendingMediaStatus(false);
273 }
274
275 // Configure active modules.
276 for (RtpRtcp* rtp_rtcp : registered_modules) {
277 rtp_rtcp->DeRegisterSendPayload(video_codec.plType);
278 if (rtp_rtcp->RegisterSendPayload(video_codec) != 0) {
279 return -1;
280 }
281 rtp_rtcp->SetSendingStatus(is_sending);
282 rtp_rtcp->SetSendingMediaStatus(is_sending);
283 }
284
285 // |RegisterSimulcastRtpRtcpModules| resets all old weak pointers and old 263 // |RegisterSimulcastRtpRtcpModules| resets all old weak pointers and old
286 // modules can be deleted after this step. 264 // modules can be deleted after this step.
287 vie_receiver_.RegisterRtpRtcpModules(registered_modules); 265 vie_receiver_.RegisterRtpRtcpModules(registered_modules);
288 266
289 // Update the packet and payload routers with the sending RtpRtcp modules. 267 // Update the packet and payload routers with the sending RtpRtcp modules.
290 send_payload_router_->SetSendingRtpModules(registered_modules); 268 send_payload_router_->SetSendingRtpModules(num_active_modules);
291 269
292 if (router_was_active) 270 send_payload_router_->set_active(is_sending);
293 send_payload_router_->set_active(true);
294 271
295 // Deregister previously registered modules. 272 // Deregister previously registered modules.
296 for (size_t i = num_active_modules; i < num_prev_active_modules; ++i) 273 for (size_t i = num_active_modules; i < num_prev_active_modules; ++i)
297 packet_router_->RemoveRtpModule(rtp_rtcp_modules_[i]); 274 packet_router_->RemoveRtpModule(rtp_rtcp_modules_[i]);
298 // Register new active modules. 275 // Register new active modules.
299 for (size_t i = num_prev_active_modules; i < num_active_modules; ++i) 276 for (size_t i = num_prev_active_modules; i < num_active_modules; ++i)
300 packet_router_->AddRtpModule(rtp_rtcp_modules_[i]); 277 packet_router_->AddRtpModule(rtp_rtcp_modules_[i]);
301 return 0; 278 return 0;
302 } 279 }
303 280
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 SendSideDelayObserver* observer) { 453 SendSideDelayObserver* observer) {
477 send_side_delay_observer_.Set(observer); 454 send_side_delay_observer_.Set(observer);
478 } 455 }
479 456
480 void ViEChannel::RegisterSendBitrateObserver( 457 void ViEChannel::RegisterSendBitrateObserver(
481 BitrateStatisticsObserver* observer) { 458 BitrateStatisticsObserver* observer) {
482 send_bitrate_observer_.Set(observer); 459 send_bitrate_observer_.Set(observer);
483 } 460 }
484 461
485 int32_t ViEChannel::StartSend() { 462 int32_t ViEChannel::StartSend() {
486 rtc::CritScope lock(&crit_);
487
488 if (rtp_rtcp_modules_[0]->Sending()) 463 if (rtp_rtcp_modules_[0]->Sending())
489 return -1; 464 return -1;
490 465
491 for (size_t i = 0; i < num_active_rtp_rtcp_modules_; ++i) { 466 if (!sender_) {
492 RtpRtcp* rtp_rtcp = rtp_rtcp_modules_[i]; 467 rtp_rtcp_modules_[0]->SetSendingStatus(true);
493 // Only have senders send media. 468 } else {
494 rtp_rtcp->SetSendingMediaStatus(sender_); 469 send_payload_router_->set_active(true);
495 rtp_rtcp->SetSendingStatus(true);
496 } 470 }
497 if (sender_)
498 send_payload_router_->set_active(true);
499 return 0; 471 return 0;
500 } 472 }
501 473
502 int32_t ViEChannel::StopSend() { 474 int32_t ViEChannel::StopSend() {
503 if (sender_) 475 if (!rtp_rtcp_modules_[0]->Sending())
476 return -1;
477
478 if (!sender_) {
479 rtp_rtcp_modules_[0]->SetSendingStatus(false);
480 } else {
504 send_payload_router_->set_active(false); 481 send_payload_router_->set_active(false);
505 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_)
506 rtp_rtcp->SetSendingMediaStatus(false);
507
508 if (!rtp_rtcp_modules_[0]->Sending()) {
509 return -1;
510 } 482 }
511 483
512 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
513 rtp_rtcp->SetSendingStatus(false);
514 }
515 return 0; 484 return 0;
516 } 485 }
517 486
518 const std::vector<RtpRtcp*>& ViEChannel::rtp_rtcp() const { 487 const std::vector<RtpRtcp*>& ViEChannel::rtp_rtcp() const {
519 return rtp_rtcp_modules_; 488 return rtp_rtcp_modules_;
520 } 489 }
521 490
522 ViEReceiver* ViEChannel::vie_receiver() { 491 ViEReceiver* ViEChannel::vie_receiver() {
523 return &vie_receiver_; 492 return &vie_receiver_;
524 } 493 }
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 rtc::CritScope lock(&crit_); 698 rtc::CritScope lock(&crit_);
730 receive_stats_callback_ = receive_statistics_proxy; 699 receive_stats_callback_ = receive_statistics_proxy;
731 } 700 }
732 701
733 void ViEChannel::SetIncomingVideoStream( 702 void ViEChannel::SetIncomingVideoStream(
734 IncomingVideoStream* incoming_video_stream) { 703 IncomingVideoStream* incoming_video_stream) {
735 rtc::CritScope lock(&crit_); 704 rtc::CritScope lock(&crit_);
736 incoming_video_stream_ = incoming_video_stream; 705 incoming_video_stream_ = incoming_video_stream;
737 } 706 }
738 } // namespace webrtc 707 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/video_send_stream.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698