OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 } | 85 } |
86 | 86 |
87 bool UseSendSideBwe(const FlexfecReceiveStream::Config& config) { | 87 bool UseSendSideBwe(const FlexfecReceiveStream::Config& config) { |
88 return UseSendSideBwe(config.rtp_header_extensions, config.transport_cc); | 88 return UseSendSideBwe(config.rtp_header_extensions, config.transport_cc); |
89 } | 89 } |
90 | 90 |
91 class RtpTransportControllerSend : public RtpTransportControllerSendInterface { | 91 class RtpTransportControllerSend : public RtpTransportControllerSendInterface { |
92 public: | 92 public: |
93 RtpTransportControllerSend(Clock* clock, webrtc::RtcEventLog* event_log); | 93 RtpTransportControllerSend(Clock* clock, webrtc::RtcEventLog* event_log); |
94 | 94 |
95 void InitCongestionControl(SendSideCongestionController::Observer* observer); | 95 void RegisterNetworkObserver( |
| 96 SendSideCongestionController::Observer* observer); |
| 97 |
| 98 // Implements RtpTransportControllerSendInterface |
96 PacketRouter* packet_router() override { return &packet_router_; } | 99 PacketRouter* packet_router() override { return &packet_router_; } |
97 SendSideCongestionController* send_side_cc() override { | 100 SendSideCongestionController* send_side_cc() override { |
98 return send_side_cc_.get(); | 101 return &send_side_cc_; |
99 } | 102 } |
100 TransportFeedbackObserver* transport_feedback_observer() override { | 103 TransportFeedbackObserver* transport_feedback_observer() override { |
101 return send_side_cc_.get(); | 104 return &send_side_cc_; |
102 } | 105 } |
103 RtpPacketSender* packet_sender() override { return send_side_cc_->pacer(); } | 106 RtpPacketSender* packet_sender() override { return send_side_cc_.pacer(); } |
104 | 107 |
105 private: | 108 private: |
106 Clock* const clock_; | |
107 webrtc::RtcEventLog* const event_log_; | |
108 PacketRouter packet_router_; | 109 PacketRouter packet_router_; |
109 // Construction delayed until InitCongestionControl, since the | 110 SendSideCongestionController send_side_cc_; |
110 // CongestionController wants its observer as a construction time | |
111 // argument, and setting it later seems non-trivial. | |
112 std::unique_ptr<SendSideCongestionController> send_side_cc_; | |
113 }; | 111 }; |
114 | 112 |
115 RtpTransportControllerSend::RtpTransportControllerSend( | 113 RtpTransportControllerSend::RtpTransportControllerSend( |
116 Clock* clock, | 114 Clock* clock, |
117 webrtc::RtcEventLog* event_log) | 115 webrtc::RtcEventLog* event_log) |
118 : clock_(clock), event_log_(event_log) {} | 116 : send_side_cc_(clock, nullptr /* observer */, event_log, &packet_router_) { |
| 117 } |
119 | 118 |
120 void RtpTransportControllerSend::InitCongestionControl( | 119 void RtpTransportControllerSend::RegisterNetworkObserver( |
121 SendSideCongestionController::Observer* observer) { | 120 SendSideCongestionController::Observer* observer) { |
122 // Must be called only once. | 121 // Must be called only once. |
123 RTC_CHECK(!send_side_cc_); | 122 send_side_cc_.RegisterNetworkObserver(observer); |
124 send_side_cc_.reset(new SendSideCongestionController( | |
125 clock_, observer, event_log_, &packet_router_)); | |
126 } | 123 } |
127 | 124 |
128 } // namespace | 125 } // namespace |
129 | 126 |
130 namespace internal { | 127 namespace internal { |
131 | 128 |
132 class Call : public webrtc::Call, | 129 class Call : public webrtc::Call, |
133 public PacketReceiver, | 130 public PacketReceiver, |
134 public RecoveredPacketReceiver, | 131 public RecoveredPacketReceiver, |
135 public SendSideCongestionController::Observer, | 132 public SendSideCongestionController::Observer, |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 // TODO(holmer): Remove this lock once BitrateController no longer calls | 300 // TODO(holmer): Remove this lock once BitrateController no longer calls |
304 // OnNetworkChanged from multiple threads. | 301 // OnNetworkChanged from multiple threads. |
305 rtc::CriticalSection bitrate_crit_; | 302 rtc::CriticalSection bitrate_crit_; |
306 uint32_t min_allocated_send_bitrate_bps_ GUARDED_BY(&bitrate_crit_); | 303 uint32_t min_allocated_send_bitrate_bps_ GUARDED_BY(&bitrate_crit_); |
307 uint32_t configured_max_padding_bitrate_bps_ GUARDED_BY(&bitrate_crit_); | 304 uint32_t configured_max_padding_bitrate_bps_ GUARDED_BY(&bitrate_crit_); |
308 AvgCounter estimated_send_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); | 305 AvgCounter estimated_send_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); |
309 AvgCounter pacer_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); | 306 AvgCounter pacer_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); |
310 | 307 |
311 std::map<std::string, rtc::NetworkRoute> network_routes_; | 308 std::map<std::string, rtc::NetworkRoute> network_routes_; |
312 | 309 |
313 std::unique_ptr<RtpTransportControllerSend> transport_send_; | 310 std::unique_ptr<RtpTransportControllerSendInterface> transport_send_; |
314 VieRemb remb_; | 311 VieRemb remb_; |
315 ReceiveSideCongestionController receive_side_cc_; | 312 ReceiveSideCongestionController receive_side_cc_; |
316 const std::unique_ptr<SendDelayStats> video_send_delay_stats_; | 313 const std::unique_ptr<SendDelayStats> video_send_delay_stats_; |
317 const int64_t start_ms_; | 314 const int64_t start_ms_; |
318 // TODO(perkj): |worker_queue_| is supposed to replace | 315 // TODO(perkj): |worker_queue_| is supposed to replace |
319 // |module_process_thread_|. | 316 // |module_process_thread_|. |
320 // |worker_queue| is defined last to ensure all pending tasks are cancelled | 317 // |worker_queue| is defined last to ensure all pending tasks are cancelled |
321 // and deleted before any other members. | 318 // and deleted before any other members. |
322 rtc::TaskQueue worker_queue_; | 319 rtc::TaskQueue worker_queue_; |
323 | 320 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 event_log_(config.event_log), | 359 event_log_(config.event_log), |
363 first_packet_sent_ms_(-1), | 360 first_packet_sent_ms_(-1), |
364 received_bytes_per_second_counter_(clock_, nullptr, true), | 361 received_bytes_per_second_counter_(clock_, nullptr, true), |
365 received_audio_bytes_per_second_counter_(clock_, nullptr, true), | 362 received_audio_bytes_per_second_counter_(clock_, nullptr, true), |
366 received_video_bytes_per_second_counter_(clock_, nullptr, true), | 363 received_video_bytes_per_second_counter_(clock_, nullptr, true), |
367 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true), | 364 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true), |
368 min_allocated_send_bitrate_bps_(0), | 365 min_allocated_send_bitrate_bps_(0), |
369 configured_max_padding_bitrate_bps_(0), | 366 configured_max_padding_bitrate_bps_(0), |
370 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true), | 367 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true), |
371 pacer_bitrate_kbps_counter_(clock_, nullptr, true), | 368 pacer_bitrate_kbps_counter_(clock_, nullptr, true), |
372 transport_send_(std::move(transport_send)), | |
373 remb_(clock_), | 369 remb_(clock_), |
374 receive_side_cc_(clock_, &remb_, transport_send_->packet_router()), | 370 receive_side_cc_(clock_, &remb_, transport_send->packet_router()), |
375 video_send_delay_stats_(new SendDelayStats(clock_)), | 371 video_send_delay_stats_(new SendDelayStats(clock_)), |
376 start_ms_(clock_->TimeInMilliseconds()), | 372 start_ms_(clock_->TimeInMilliseconds()), |
377 worker_queue_("call_worker_queue") { | 373 worker_queue_("call_worker_queue") { |
378 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 374 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
379 RTC_DCHECK(config.event_log != nullptr); | 375 RTC_DCHECK(config.event_log != nullptr); |
380 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); | 376 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); |
381 RTC_DCHECK_GT(config.bitrate_config.start_bitrate_bps, | 377 RTC_DCHECK_GT(config.bitrate_config.start_bitrate_bps, |
382 config.bitrate_config.min_bitrate_bps); | 378 config.bitrate_config.min_bitrate_bps); |
383 if (config.bitrate_config.max_bitrate_bps != -1) { | 379 if (config.bitrate_config.max_bitrate_bps != -1) { |
384 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, | 380 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, |
385 config.bitrate_config.start_bitrate_bps); | 381 config.bitrate_config.start_bitrate_bps); |
386 } | 382 } |
387 Trace::CreateTrace(); | 383 Trace::CreateTrace(); |
388 transport_send_->InitCongestionControl(this); | 384 transport_send->RegisterNetworkObserver(this); |
| 385 transport_send_ = std::move(transport_send); |
389 transport_send_->send_side_cc()->SignalNetworkState(kNetworkDown); | 386 transport_send_->send_side_cc()->SignalNetworkState(kNetworkDown); |
390 transport_send_->send_side_cc()->SetBweBitrates( | 387 transport_send_->send_side_cc()->SetBweBitrates( |
391 config_.bitrate_config.min_bitrate_bps, | 388 config_.bitrate_config.min_bitrate_bps, |
392 config_.bitrate_config.start_bitrate_bps, | 389 config_.bitrate_config.start_bitrate_bps, |
393 config_.bitrate_config.max_bitrate_bps); | 390 config_.bitrate_config.max_bitrate_bps); |
394 call_stats_->RegisterStatsObserver(&receive_side_cc_); | 391 call_stats_->RegisterStatsObserver(&receive_side_cc_); |
395 call_stats_->RegisterStatsObserver(transport_send_->send_side_cc()); | 392 call_stats_->RegisterStatsObserver(transport_send_->send_side_cc()); |
396 | 393 |
397 module_process_thread_->Start(); | 394 module_process_thread_->Start(); |
398 module_process_thread_->RegisterModule(call_stats_.get(), RTC_FROM_HERE); | 395 module_process_thread_->RegisterModule(call_stats_.get(), RTC_FROM_HERE); |
(...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1325 (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) { | 1322 (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) { |
1326 receive_side_cc_.OnReceivedPacket( | 1323 receive_side_cc_.OnReceivedPacket( |
1327 packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(), | 1324 packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(), |
1328 header); | 1325 header); |
1329 } | 1326 } |
1330 } | 1327 } |
1331 | 1328 |
1332 } // namespace internal | 1329 } // namespace internal |
1333 | 1330 |
1334 } // namespace webrtc | 1331 } // namespace webrtc |
OLD | NEW |