| 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 #include "webrtc/video/video_send_stream.h" | 10 #include "webrtc/video/video_send_stream.h" |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 rtc::TaskQueue* worker_queue, | 342 rtc::TaskQueue* worker_queue, |
| 343 CallStats* call_stats, | 343 CallStats* call_stats, |
| 344 RtpTransportControllerSendInterface* transport, | 344 RtpTransportControllerSendInterface* transport, |
| 345 BitrateAllocator* bitrate_allocator, | 345 BitrateAllocator* bitrate_allocator, |
| 346 SendDelayStats* send_delay_stats, | 346 SendDelayStats* send_delay_stats, |
| 347 ViEEncoder* vie_encoder, | 347 ViEEncoder* vie_encoder, |
| 348 RtcEventLog* event_log, | 348 RtcEventLog* event_log, |
| 349 const VideoSendStream::Config* config, | 349 const VideoSendStream::Config* config, |
| 350 int initial_encoder_max_bitrate, | 350 int initial_encoder_max_bitrate, |
| 351 std::map<uint32_t, RtpState> suspended_ssrcs, | 351 std::map<uint32_t, RtpState> suspended_ssrcs, |
| 352 VideoEncoderConfig::ContentType content_type); | 352 VideoEncoderConfig::ContentType content_type, |
| 353 const RtpKeepAliveConfig& keepalive_config); |
| 353 ~VideoSendStreamImpl() override; | 354 ~VideoSendStreamImpl() override; |
| 354 | 355 |
| 355 // RegisterProcessThread register |module_process_thread| with those objects | 356 // RegisterProcessThread register |module_process_thread| with those objects |
| 356 // that use it. Registration has to happen on the thread were | 357 // that use it. Registration has to happen on the thread were |
| 357 // |module_process_thread| was created (libjingle's worker thread). | 358 // |module_process_thread| was created (libjingle's worker thread). |
| 358 // TODO(perkj): Replace the use of |module_process_thread| with a TaskQueue, | 359 // TODO(perkj): Replace the use of |module_process_thread| with a TaskQueue, |
| 359 // maybe |worker_queue|. | 360 // maybe |worker_queue|. |
| 360 void RegisterProcessThread(ProcessThread* module_process_thread); | 361 void RegisterProcessThread(ProcessThread* module_process_thread); |
| 361 void DeRegisterProcessThread(); | 362 void DeRegisterProcessThread(); |
| 362 | 363 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 ViEEncoder* vie_encoder, | 474 ViEEncoder* vie_encoder, |
| 474 ProcessThread* module_process_thread, | 475 ProcessThread* module_process_thread, |
| 475 CallStats* call_stats, | 476 CallStats* call_stats, |
| 476 RtpTransportControllerSendInterface* transport, | 477 RtpTransportControllerSendInterface* transport, |
| 477 BitrateAllocator* bitrate_allocator, | 478 BitrateAllocator* bitrate_allocator, |
| 478 SendDelayStats* send_delay_stats, | 479 SendDelayStats* send_delay_stats, |
| 479 RtcEventLog* event_log, | 480 RtcEventLog* event_log, |
| 480 const VideoSendStream::Config* config, | 481 const VideoSendStream::Config* config, |
| 481 int initial_encoder_max_bitrate, | 482 int initial_encoder_max_bitrate, |
| 482 const std::map<uint32_t, RtpState>& suspended_ssrcs, | 483 const std::map<uint32_t, RtpState>& suspended_ssrcs, |
| 483 VideoEncoderConfig::ContentType content_type) | 484 VideoEncoderConfig::ContentType content_type, |
| 485 const RtpKeepAliveConfig& keepalive_config) |
| 484 : send_stream_(send_stream), | 486 : send_stream_(send_stream), |
| 485 done_event_(done_event), | 487 done_event_(done_event), |
| 486 stats_proxy_(stats_proxy), | 488 stats_proxy_(stats_proxy), |
| 487 vie_encoder_(vie_encoder), | 489 vie_encoder_(vie_encoder), |
| 488 call_stats_(call_stats), | 490 call_stats_(call_stats), |
| 489 transport_(transport), | 491 transport_(transport), |
| 490 bitrate_allocator_(bitrate_allocator), | 492 bitrate_allocator_(bitrate_allocator), |
| 491 send_delay_stats_(send_delay_stats), | 493 send_delay_stats_(send_delay_stats), |
| 492 event_log_(event_log), | 494 event_log_(event_log), |
| 493 config_(config), | 495 config_(config), |
| 494 initial_encoder_max_bitrate_(initial_encoder_max_bitrate), | 496 initial_encoder_max_bitrate_(initial_encoder_max_bitrate), |
| 495 suspended_ssrcs_(suspended_ssrcs), | 497 suspended_ssrcs_(suspended_ssrcs), |
| 496 content_type_(content_type) {} | 498 content_type_(content_type), |
| 499 keepalive_config_(keepalive_config) {} |
| 497 | 500 |
| 498 ~ConstructionTask() override { done_event_->Set(); } | 501 ~ConstructionTask() override { done_event_->Set(); } |
| 499 | 502 |
| 500 private: | 503 private: |
| 501 bool Run() override { | 504 bool Run() override { |
| 502 send_stream_->reset(new VideoSendStreamImpl( | 505 send_stream_->reset(new VideoSendStreamImpl( |
| 503 stats_proxy_, rtc::TaskQueue::Current(), call_stats_, transport_, | 506 stats_proxy_, rtc::TaskQueue::Current(), call_stats_, transport_, |
| 504 bitrate_allocator_, send_delay_stats_, vie_encoder_, event_log_, | 507 bitrate_allocator_, send_delay_stats_, vie_encoder_, event_log_, |
| 505 config_, initial_encoder_max_bitrate_, std::move(suspended_ssrcs_), | 508 config_, initial_encoder_max_bitrate_, std::move(suspended_ssrcs_), |
| 506 content_type_)); | 509 content_type_, keepalive_config_)); |
| 507 return true; | 510 return true; |
| 508 } | 511 } |
| 509 | 512 |
| 510 std::unique_ptr<VideoSendStreamImpl>* const send_stream_; | 513 std::unique_ptr<VideoSendStreamImpl>* const send_stream_; |
| 511 rtc::Event* const done_event_; | 514 rtc::Event* const done_event_; |
| 512 SendStatisticsProxy* const stats_proxy_; | 515 SendStatisticsProxy* const stats_proxy_; |
| 513 ViEEncoder* const vie_encoder_; | 516 ViEEncoder* const vie_encoder_; |
| 514 CallStats* const call_stats_; | 517 CallStats* const call_stats_; |
| 515 RtpTransportControllerSendInterface* const transport_; | 518 RtpTransportControllerSendInterface* const transport_; |
| 516 BitrateAllocator* const bitrate_allocator_; | 519 BitrateAllocator* const bitrate_allocator_; |
| 517 SendDelayStats* const send_delay_stats_; | 520 SendDelayStats* const send_delay_stats_; |
| 518 RtcEventLog* const event_log_; | 521 RtcEventLog* const event_log_; |
| 519 const VideoSendStream::Config* config_; | 522 const VideoSendStream::Config* config_; |
| 520 int initial_encoder_max_bitrate_; | 523 int initial_encoder_max_bitrate_; |
| 521 std::map<uint32_t, RtpState> suspended_ssrcs_; | 524 std::map<uint32_t, RtpState> suspended_ssrcs_; |
| 522 const VideoEncoderConfig::ContentType content_type_; | 525 const VideoEncoderConfig::ContentType content_type_; |
| 526 const RtpKeepAliveConfig& keepalive_config_; |
| 523 }; | 527 }; |
| 524 | 528 |
| 525 class VideoSendStream::DestructAndGetRtpStateTask : public rtc::QueuedTask { | 529 class VideoSendStream::DestructAndGetRtpStateTask : public rtc::QueuedTask { |
| 526 public: | 530 public: |
| 527 DestructAndGetRtpStateTask(VideoSendStream::RtpStateMap* state_map, | 531 DestructAndGetRtpStateTask(VideoSendStream::RtpStateMap* state_map, |
| 528 std::unique_ptr<VideoSendStreamImpl> send_stream, | 532 std::unique_ptr<VideoSendStreamImpl> send_stream, |
| 529 rtc::Event* done_event) | 533 rtc::Event* done_event) |
| 530 : state_map_(state_map), | 534 : state_map_(state_map), |
| 531 send_stream_(std::move(send_stream)), | 535 send_stream_(std::move(send_stream)), |
| 532 done_event_(done_event) {} | 536 done_event_(done_event) {} |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 int num_cpu_cores, | 629 int num_cpu_cores, |
| 626 ProcessThread* module_process_thread, | 630 ProcessThread* module_process_thread, |
| 627 rtc::TaskQueue* worker_queue, | 631 rtc::TaskQueue* worker_queue, |
| 628 CallStats* call_stats, | 632 CallStats* call_stats, |
| 629 RtpTransportControllerSendInterface* transport, | 633 RtpTransportControllerSendInterface* transport, |
| 630 BitrateAllocator* bitrate_allocator, | 634 BitrateAllocator* bitrate_allocator, |
| 631 SendDelayStats* send_delay_stats, | 635 SendDelayStats* send_delay_stats, |
| 632 RtcEventLog* event_log, | 636 RtcEventLog* event_log, |
| 633 VideoSendStream::Config config, | 637 VideoSendStream::Config config, |
| 634 VideoEncoderConfig encoder_config, | 638 VideoEncoderConfig encoder_config, |
| 635 const std::map<uint32_t, RtpState>& suspended_ssrcs) | 639 const std::map<uint32_t, RtpState>& suspended_ssrcs, |
| 640 const RtpKeepAliveConfig& keepalive_config) |
| 636 : worker_queue_(worker_queue), | 641 : worker_queue_(worker_queue), |
| 637 thread_sync_event_(false /* manual_reset */, false), | 642 thread_sync_event_(false /* manual_reset */, false), |
| 638 stats_proxy_(Clock::GetRealTimeClock(), | 643 stats_proxy_(Clock::GetRealTimeClock(), |
| 639 config, | 644 config, |
| 640 encoder_config.content_type), | 645 encoder_config.content_type), |
| 641 config_(std::move(config)), | 646 config_(std::move(config)), |
| 642 content_type_(encoder_config.content_type) { | 647 content_type_(encoder_config.content_type) { |
| 643 vie_encoder_.reset( | 648 vie_encoder_.reset( |
| 644 new ViEEncoder(num_cpu_cores, &stats_proxy_, config_.encoder_settings, | 649 new ViEEncoder(num_cpu_cores, &stats_proxy_, config_.encoder_settings, |
| 645 config_.pre_encode_callback, config_.post_encode_callback, | 650 config_.pre_encode_callback, config_.post_encode_callback, |
| 646 std::unique_ptr<OveruseFrameDetector>())); | 651 std::unique_ptr<OveruseFrameDetector>())); |
| 647 worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask( | 652 worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask( |
| 648 &send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(), | 653 &send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(), |
| 649 module_process_thread, call_stats, transport, bitrate_allocator, | 654 module_process_thread, call_stats, transport, bitrate_allocator, |
| 650 send_delay_stats, event_log, &config_, encoder_config.max_bitrate_bps, | 655 send_delay_stats, event_log, &config_, encoder_config.max_bitrate_bps, |
| 651 suspended_ssrcs, encoder_config.content_type))); | 656 suspended_ssrcs, encoder_config.content_type, keepalive_config))); |
| 652 | 657 |
| 653 // Wait for ConstructionTask to complete so that |send_stream_| can be used. | 658 // Wait for ConstructionTask to complete so that |send_stream_| can be used. |
| 654 // |module_process_thread| must be registered and deregistered on the thread | 659 // |module_process_thread| must be registered and deregistered on the thread |
| 655 // it was created on. | 660 // it was created on. |
| 656 thread_sync_event_.Wait(rtc::Event::kForever); | 661 thread_sync_event_.Wait(rtc::Event::kForever); |
| 657 send_stream_->RegisterProcessThread(module_process_thread); | 662 send_stream_->RegisterProcessThread(module_process_thread); |
| 658 // TODO(sprang): Enable this also for regular video calls if it works well. | 663 // TODO(sprang): Enable this also for regular video calls if it works well. |
| 659 if (encoder_config.content_type == VideoEncoderConfig::ContentType::kScreen) { | 664 if (encoder_config.content_type == VideoEncoderConfig::ContentType::kScreen) { |
| 660 // Only signal target bitrate for screenshare streams, for now. | 665 // Only signal target bitrate for screenshare streams, for now. |
| 661 vie_encoder_->SetBitrateObserver(send_stream_.get()); | 666 vie_encoder_->SetBitrateObserver(send_stream_.get()); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 rtc::TaskQueue* worker_queue, | 765 rtc::TaskQueue* worker_queue, |
| 761 CallStats* call_stats, | 766 CallStats* call_stats, |
| 762 RtpTransportControllerSendInterface* transport, | 767 RtpTransportControllerSendInterface* transport, |
| 763 BitrateAllocator* bitrate_allocator, | 768 BitrateAllocator* bitrate_allocator, |
| 764 SendDelayStats* send_delay_stats, | 769 SendDelayStats* send_delay_stats, |
| 765 ViEEncoder* vie_encoder, | 770 ViEEncoder* vie_encoder, |
| 766 RtcEventLog* event_log, | 771 RtcEventLog* event_log, |
| 767 const VideoSendStream::Config* config, | 772 const VideoSendStream::Config* config, |
| 768 int initial_encoder_max_bitrate, | 773 int initial_encoder_max_bitrate, |
| 769 std::map<uint32_t, RtpState> suspended_ssrcs, | 774 std::map<uint32_t, RtpState> suspended_ssrcs, |
| 770 VideoEncoderConfig::ContentType content_type) | 775 VideoEncoderConfig::ContentType content_type, |
| 776 const RtpKeepAliveConfig& keepalive_config) |
| 771 : send_side_bwe_with_overhead_( | 777 : send_side_bwe_with_overhead_( |
| 772 webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")), | 778 webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")), |
| 773 stats_proxy_(stats_proxy), | 779 stats_proxy_(stats_proxy), |
| 774 config_(config), | 780 config_(config), |
| 775 suspended_ssrcs_(std::move(suspended_ssrcs)), | 781 suspended_ssrcs_(std::move(suspended_ssrcs)), |
| 776 module_process_thread_(nullptr), | 782 module_process_thread_(nullptr), |
| 777 worker_queue_(worker_queue), | 783 worker_queue_(worker_queue), |
| 778 check_encoder_activity_task_(nullptr), | 784 check_encoder_activity_task_(nullptr), |
| 779 call_stats_(call_stats), | 785 call_stats_(call_stats), |
| 780 transport_(transport), | 786 transport_(transport), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 798 bandwidth_observer_.get(), | 804 bandwidth_observer_.get(), |
| 799 transport, | 805 transport, |
| 800 call_stats_->rtcp_rtt_stats(), | 806 call_stats_->rtcp_rtt_stats(), |
| 801 flexfec_sender_.get(), | 807 flexfec_sender_.get(), |
| 802 stats_proxy_, | 808 stats_proxy_, |
| 803 send_delay_stats, | 809 send_delay_stats, |
| 804 event_log, | 810 event_log, |
| 805 transport->send_side_cc()->GetRetransmissionRateLimiter(), | 811 transport->send_side_cc()->GetRetransmissionRateLimiter(), |
| 806 this, | 812 this, |
| 807 config_->rtp.ssrcs.size(), | 813 config_->rtp.ssrcs.size(), |
| 808 config_->rtp.keep_alive)), | 814 keepalive_config)), |
| 809 payload_router_(rtp_rtcp_modules_, | 815 payload_router_(rtp_rtcp_modules_, |
| 810 config_->encoder_settings.payload_type), | 816 config_->encoder_settings.payload_type), |
| 811 weak_ptr_factory_(this), | 817 weak_ptr_factory_(this), |
| 812 overhead_bytes_per_packet_(0), | 818 overhead_bytes_per_packet_(0), |
| 813 transport_overhead_bytes_per_packet_(0) { | 819 transport_overhead_bytes_per_packet_(0) { |
| 814 RTC_DCHECK_RUN_ON(worker_queue_); | 820 RTC_DCHECK_RUN_ON(worker_queue_); |
| 815 LOG(LS_INFO) << "VideoSendStreamInternal: " << config_->ToString(); | 821 LOG(LS_INFO) << "VideoSendStreamInternal: " << config_->ToString(); |
| 816 weak_ptr_ = weak_ptr_factory_.GetWeakPtr(); | 822 weak_ptr_ = weak_ptr_factory_.GetWeakPtr(); |
| 817 module_process_thread_checker_.DetachFromThread(); | 823 module_process_thread_checker_.DetachFromThread(); |
| 818 | 824 |
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1364 std::min(config_->rtp.max_packet_size, | 1370 std::min(config_->rtp.max_packet_size, |
| 1365 kPathMTU - transport_overhead_bytes_per_packet_); | 1371 kPathMTU - transport_overhead_bytes_per_packet_); |
| 1366 | 1372 |
| 1367 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 1373 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
| 1368 rtp_rtcp->SetMaxRtpPacketSize(rtp_packet_size); | 1374 rtp_rtcp->SetMaxRtpPacketSize(rtp_packet_size); |
| 1369 } | 1375 } |
| 1370 } | 1376 } |
| 1371 | 1377 |
| 1372 } // namespace internal | 1378 } // namespace internal |
| 1373 } // namespace webrtc | 1379 } // namespace webrtc |
| OLD | NEW |