| 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 #include "webrtc/system_wrappers/include/clock.h" | 49 #include "webrtc/system_wrappers/include/clock.h" |
| 50 #include "webrtc/system_wrappers/include/cpu_info.h" | 50 #include "webrtc/system_wrappers/include/cpu_info.h" |
| 51 #include "webrtc/system_wrappers/include/metrics.h" | 51 #include "webrtc/system_wrappers/include/metrics.h" |
| 52 #include "webrtc/system_wrappers/include/rw_lock_wrapper.h" | 52 #include "webrtc/system_wrappers/include/rw_lock_wrapper.h" |
| 53 #include "webrtc/system_wrappers/include/trace.h" | 53 #include "webrtc/system_wrappers/include/trace.h" |
| 54 #include "webrtc/video/call_stats.h" | 54 #include "webrtc/video/call_stats.h" |
| 55 #include "webrtc/video/send_delay_stats.h" | 55 #include "webrtc/video/send_delay_stats.h" |
| 56 #include "webrtc/video/stats_counter.h" | 56 #include "webrtc/video/stats_counter.h" |
| 57 #include "webrtc/video/video_receive_stream.h" | 57 #include "webrtc/video/video_receive_stream.h" |
| 58 #include "webrtc/video/video_send_stream.h" | 58 #include "webrtc/video/video_send_stream.h" |
| 59 #include "webrtc/video/vie_remb.h" | |
| 60 | 59 |
| 61 namespace webrtc { | 60 namespace webrtc { |
| 62 | 61 |
| 63 const int Call::Config::kDefaultStartBitrateBps = 300000; | 62 const int Call::Config::kDefaultStartBitrateBps = 300000; |
| 64 | 63 |
| 65 namespace { | 64 namespace { |
| 66 | 65 |
| 67 // TODO(nisse): This really begs for a shared context struct. | 66 // TODO(nisse): This really begs for a shared context struct. |
| 68 bool UseSendSideBwe(const std::vector<RtpExtension>& extensions, | 67 bool UseSendSideBwe(const std::vector<RtpExtension>& extensions, |
| 69 bool transport_cc) { | 68 bool transport_cc) { |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 // OnNetworkChanged from multiple threads. | 300 // OnNetworkChanged from multiple threads. |
| 302 rtc::CriticalSection bitrate_crit_; | 301 rtc::CriticalSection bitrate_crit_; |
| 303 uint32_t min_allocated_send_bitrate_bps_ GUARDED_BY(&bitrate_crit_); | 302 uint32_t min_allocated_send_bitrate_bps_ GUARDED_BY(&bitrate_crit_); |
| 304 uint32_t configured_max_padding_bitrate_bps_ GUARDED_BY(&bitrate_crit_); | 303 uint32_t configured_max_padding_bitrate_bps_ GUARDED_BY(&bitrate_crit_); |
| 305 AvgCounter estimated_send_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); | 304 AvgCounter estimated_send_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); |
| 306 AvgCounter pacer_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); | 305 AvgCounter pacer_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); |
| 307 | 306 |
| 308 std::map<std::string, rtc::NetworkRoute> network_routes_; | 307 std::map<std::string, rtc::NetworkRoute> network_routes_; |
| 309 | 308 |
| 310 std::unique_ptr<RtpTransportControllerSendInterface> transport_send_; | 309 std::unique_ptr<RtpTransportControllerSendInterface> transport_send_; |
| 311 VieRemb remb_; | |
| 312 ReceiveSideCongestionController receive_side_cc_; | 310 ReceiveSideCongestionController receive_side_cc_; |
| 313 const std::unique_ptr<SendDelayStats> video_send_delay_stats_; | 311 const std::unique_ptr<SendDelayStats> video_send_delay_stats_; |
| 314 const int64_t start_ms_; | 312 const int64_t start_ms_; |
| 315 // TODO(perkj): |worker_queue_| is supposed to replace | 313 // TODO(perkj): |worker_queue_| is supposed to replace |
| 316 // |module_process_thread_|. | 314 // |module_process_thread_|. |
| 317 // |worker_queue| is defined last to ensure all pending tasks are cancelled | 315 // |worker_queue| is defined last to ensure all pending tasks are cancelled |
| 318 // and deleted before any other members. | 316 // and deleted before any other members. |
| 319 rtc::TaskQueue worker_queue_; | 317 rtc::TaskQueue worker_queue_; |
| 320 | 318 |
| 321 RTC_DISALLOW_COPY_AND_ASSIGN(Call); | 319 RTC_DISALLOW_COPY_AND_ASSIGN(Call); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 event_log_(config.event_log), | 357 event_log_(config.event_log), |
| 360 first_packet_sent_ms_(-1), | 358 first_packet_sent_ms_(-1), |
| 361 received_bytes_per_second_counter_(clock_, nullptr, true), | 359 received_bytes_per_second_counter_(clock_, nullptr, true), |
| 362 received_audio_bytes_per_second_counter_(clock_, nullptr, true), | 360 received_audio_bytes_per_second_counter_(clock_, nullptr, true), |
| 363 received_video_bytes_per_second_counter_(clock_, nullptr, true), | 361 received_video_bytes_per_second_counter_(clock_, nullptr, true), |
| 364 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true), | 362 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true), |
| 365 min_allocated_send_bitrate_bps_(0), | 363 min_allocated_send_bitrate_bps_(0), |
| 366 configured_max_padding_bitrate_bps_(0), | 364 configured_max_padding_bitrate_bps_(0), |
| 367 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true), | 365 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true), |
| 368 pacer_bitrate_kbps_counter_(clock_, nullptr, true), | 366 pacer_bitrate_kbps_counter_(clock_, nullptr, true), |
| 369 remb_(clock_), | 367 receive_side_cc_(clock_, transport_send->packet_router()), |
| 370 receive_side_cc_(clock_, &remb_, transport_send->packet_router()), | |
| 371 video_send_delay_stats_(new SendDelayStats(clock_)), | 368 video_send_delay_stats_(new SendDelayStats(clock_)), |
| 372 start_ms_(clock_->TimeInMilliseconds()), | 369 start_ms_(clock_->TimeInMilliseconds()), |
| 373 worker_queue_("call_worker_queue") { | 370 worker_queue_("call_worker_queue") { |
| 374 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 371 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
| 375 RTC_DCHECK(config.event_log != nullptr); | 372 RTC_DCHECK(config.event_log != nullptr); |
| 376 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); | 373 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); |
| 377 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps, | 374 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps, |
| 378 config.bitrate_config.min_bitrate_bps); | 375 config.bitrate_config.min_bitrate_bps); |
| 379 if (config.bitrate_config.max_bitrate_bps != -1) { | 376 if (config.bitrate_config.max_bitrate_bps != -1) { |
| 380 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, | 377 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 398 RTC_FROM_HERE); | 395 RTC_FROM_HERE); |
| 399 pacer_thread_->RegisterModule(transport_send_->send_side_cc()->pacer(), | 396 pacer_thread_->RegisterModule(transport_send_->send_side_cc()->pacer(), |
| 400 RTC_FROM_HERE); | 397 RTC_FROM_HERE); |
| 401 pacer_thread_->RegisterModule( | 398 pacer_thread_->RegisterModule( |
| 402 receive_side_cc_.GetRemoteBitrateEstimator(true), RTC_FROM_HERE); | 399 receive_side_cc_.GetRemoteBitrateEstimator(true), RTC_FROM_HERE); |
| 403 | 400 |
| 404 pacer_thread_->Start(); | 401 pacer_thread_->Start(); |
| 405 } | 402 } |
| 406 | 403 |
| 407 Call::~Call() { | 404 Call::~Call() { |
| 408 RTC_DCHECK(!remb_.InUse()); | |
| 409 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 405 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
| 410 | 406 |
| 411 RTC_CHECK(audio_send_ssrcs_.empty()); | 407 RTC_CHECK(audio_send_ssrcs_.empty()); |
| 412 RTC_CHECK(video_send_ssrcs_.empty()); | 408 RTC_CHECK(video_send_ssrcs_.empty()); |
| 413 RTC_CHECK(video_send_streams_.empty()); | 409 RTC_CHECK(video_send_streams_.empty()); |
| 414 RTC_CHECK(audio_receive_ssrcs_.empty()); | 410 RTC_CHECK(audio_receive_ssrcs_.empty()); |
| 415 RTC_CHECK(video_receive_ssrcs_.empty()); | 411 RTC_CHECK(video_receive_ssrcs_.empty()); |
| 416 RTC_CHECK(video_receive_streams_.empty()); | 412 RTC_CHECK(video_receive_streams_.empty()); |
| 417 | 413 |
| 418 pacer_thread_->Stop(); | 414 pacer_thread_->Stop(); |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 video_send_delay_stats_->AddSsrcs(config); | 653 video_send_delay_stats_->AddSsrcs(config); |
| 658 event_log_->LogVideoSendStreamConfig(config); | 654 event_log_->LogVideoSendStreamConfig(config); |
| 659 | 655 |
| 660 // TODO(mflodman): Base the start bitrate on a current bandwidth estimate, if | 656 // TODO(mflodman): Base the start bitrate on a current bandwidth estimate, if |
| 661 // the call has already started. | 657 // the call has already started. |
| 662 // Copy ssrcs from |config| since |config| is moved. | 658 // Copy ssrcs from |config| since |config| is moved. |
| 663 std::vector<uint32_t> ssrcs = config.rtp.ssrcs; | 659 std::vector<uint32_t> ssrcs = config.rtp.ssrcs; |
| 664 VideoSendStream* send_stream = new VideoSendStream( | 660 VideoSendStream* send_stream = new VideoSendStream( |
| 665 num_cpu_cores_, module_process_thread_.get(), &worker_queue_, | 661 num_cpu_cores_, module_process_thread_.get(), &worker_queue_, |
| 666 call_stats_.get(), transport_send_.get(), bitrate_allocator_.get(), | 662 call_stats_.get(), transport_send_.get(), bitrate_allocator_.get(), |
| 667 video_send_delay_stats_.get(), &remb_, event_log_, std::move(config), | 663 video_send_delay_stats_.get(), event_log_, std::move(config), |
| 668 std::move(encoder_config), suspended_video_send_ssrcs_); | 664 std::move(encoder_config), suspended_video_send_ssrcs_); |
| 669 | 665 |
| 670 { | 666 { |
| 671 WriteLockScoped write_lock(*send_crit_); | 667 WriteLockScoped write_lock(*send_crit_); |
| 672 for (uint32_t ssrc : ssrcs) { | 668 for (uint32_t ssrc : ssrcs) { |
| 673 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); | 669 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); |
| 674 video_send_ssrcs_[ssrc] = send_stream; | 670 video_send_ssrcs_[ssrc] = send_stream; |
| 675 } | 671 } |
| 676 video_send_streams_.insert(send_stream); | 672 video_send_streams_.insert(send_stream); |
| 677 } | 673 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 | 710 |
| 715 UpdateAggregateNetworkState(); | 711 UpdateAggregateNetworkState(); |
| 716 delete send_stream_impl; | 712 delete send_stream_impl; |
| 717 } | 713 } |
| 718 | 714 |
| 719 webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream( | 715 webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream( |
| 720 webrtc::VideoReceiveStream::Config configuration) { | 716 webrtc::VideoReceiveStream::Config configuration) { |
| 721 TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream"); | 717 TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream"); |
| 722 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 718 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
| 723 | 719 |
| 724 VideoReceiveStream* receive_stream = new VideoReceiveStream( | 720 VideoReceiveStream* receive_stream = |
| 725 num_cpu_cores_, transport_send_->packet_router(), | 721 new VideoReceiveStream(num_cpu_cores_, transport_send_->packet_router(), |
| 726 std::move(configuration), module_process_thread_.get(), call_stats_.get(), | 722 std::move(configuration), |
| 727 &remb_); | 723 module_process_thread_.get(), call_stats_.get()); |
| 728 | 724 |
| 729 const webrtc::VideoReceiveStream::Config& config = receive_stream->config(); | 725 const webrtc::VideoReceiveStream::Config& config = receive_stream->config(); |
| 730 ReceiveRtpConfig receive_config(config.rtp.extensions, | 726 ReceiveRtpConfig receive_config(config.rtp.extensions, |
| 731 UseSendSideBwe(config)); | 727 UseSendSideBwe(config)); |
| 732 { | 728 { |
| 733 WriteLockScoped write_lock(*receive_crit_); | 729 WriteLockScoped write_lock(*receive_crit_); |
| 734 RTC_DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) == | 730 RTC_DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) == |
| 735 video_receive_ssrcs_.end()); | 731 video_receive_ssrcs_.end()); |
| 736 video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; | 732 video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; |
| 737 if (config.rtp.rtx_ssrc) { | 733 if (config.rtp.rtx_ssrc) { |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1322 (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) { | 1318 (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) { |
| 1323 receive_side_cc_.OnReceivedPacket( | 1319 receive_side_cc_.OnReceivedPacket( |
| 1324 packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(), | 1320 packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(), |
| 1325 header); | 1321 header); |
| 1326 } | 1322 } |
| 1327 } | 1323 } |
| 1328 | 1324 |
| 1329 } // namespace internal | 1325 } // namespace internal |
| 1330 | 1326 |
| 1331 } // namespace webrtc | 1327 } // namespace webrtc |
| OLD | NEW |