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 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 // An encoder may deliver frames through the EncodedImageCallback on an | 284 // An encoder may deliver frames through the EncodedImageCallback on an |
285 // arbitrary thread. | 285 // arbitrary thread. |
286 class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver, | 286 class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver, |
287 public webrtc::VCMProtectionCallback, | 287 public webrtc::VCMProtectionCallback, |
288 public ViEEncoder::EncoderSink { | 288 public ViEEncoder::EncoderSink { |
289 public: | 289 public: |
290 VideoSendStreamImpl(SendStatisticsProxy* stats_proxy, | 290 VideoSendStreamImpl(SendStatisticsProxy* stats_proxy, |
291 rtc::TaskQueue* worker_queue, | 291 rtc::TaskQueue* worker_queue, |
292 CallStats* call_stats, | 292 CallStats* call_stats, |
293 CongestionController* congestion_controller, | 293 CongestionController* congestion_controller, |
| 294 PacketRouter* packet_router, |
294 BitrateAllocator* bitrate_allocator, | 295 BitrateAllocator* bitrate_allocator, |
295 SendDelayStats* send_delay_stats, | 296 SendDelayStats* send_delay_stats, |
296 VieRemb* remb, | 297 VieRemb* remb, |
297 ViEEncoder* vie_encoder, | 298 ViEEncoder* vie_encoder, |
298 RtcEventLog* event_log, | 299 RtcEventLog* event_log, |
299 const VideoSendStream::Config* config, | 300 const VideoSendStream::Config* config, |
300 int initial_encoder_max_bitrate, | 301 int initial_encoder_max_bitrate, |
301 std::map<uint32_t, RtpState> suspended_ssrcs); | 302 std::map<uint32_t, RtpState> suspended_ssrcs); |
302 ~VideoSendStreamImpl() override; | 303 ~VideoSendStreamImpl() override; |
303 | 304 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 ProcessThread* module_process_thread_; | 361 ProcessThread* module_process_thread_; |
361 rtc::ThreadChecker module_process_thread_checker_; | 362 rtc::ThreadChecker module_process_thread_checker_; |
362 rtc::TaskQueue* const worker_queue_; | 363 rtc::TaskQueue* const worker_queue_; |
363 | 364 |
364 rtc::CriticalSection encoder_activity_crit_sect_; | 365 rtc::CriticalSection encoder_activity_crit_sect_; |
365 CheckEncoderActivityTask* check_encoder_activity_task_ | 366 CheckEncoderActivityTask* check_encoder_activity_task_ |
366 GUARDED_BY(encoder_activity_crit_sect_); | 367 GUARDED_BY(encoder_activity_crit_sect_); |
367 | 368 |
368 CallStats* const call_stats_; | 369 CallStats* const call_stats_; |
369 CongestionController* const congestion_controller_; | 370 CongestionController* const congestion_controller_; |
| 371 PacketRouter* const packet_router_; |
370 BitrateAllocator* const bitrate_allocator_; | 372 BitrateAllocator* const bitrate_allocator_; |
371 VieRemb* const remb_; | 373 VieRemb* const remb_; |
372 | 374 |
373 // TODO(brandtr): Consider moving this to a new FlexfecSendStream class. | 375 // TODO(brandtr): Consider moving this to a new FlexfecSendStream class. |
374 std::unique_ptr<FlexfecSender> flexfec_sender_; | 376 std::unique_ptr<FlexfecSender> flexfec_sender_; |
375 | 377 |
376 rtc::CriticalSection ivf_writers_crit_; | 378 rtc::CriticalSection ivf_writers_crit_; |
377 std::unique_ptr<IvfFileWriter> file_writers_[kMaxSimulcastStreams] GUARDED_BY( | 379 std::unique_ptr<IvfFileWriter> file_writers_[kMaxSimulcastStreams] GUARDED_BY( |
378 ivf_writers_crit_); | 380 ivf_writers_crit_); |
379 | 381 |
(...skipping 24 matching lines...) Expand all Loading... |
404 // an object on the correct task queue. | 406 // an object on the correct task queue. |
405 class VideoSendStream::ConstructionTask : public rtc::QueuedTask { | 407 class VideoSendStream::ConstructionTask : public rtc::QueuedTask { |
406 public: | 408 public: |
407 ConstructionTask(std::unique_ptr<VideoSendStreamImpl>* send_stream, | 409 ConstructionTask(std::unique_ptr<VideoSendStreamImpl>* send_stream, |
408 rtc::Event* done_event, | 410 rtc::Event* done_event, |
409 SendStatisticsProxy* stats_proxy, | 411 SendStatisticsProxy* stats_proxy, |
410 ViEEncoder* vie_encoder, | 412 ViEEncoder* vie_encoder, |
411 ProcessThread* module_process_thread, | 413 ProcessThread* module_process_thread, |
412 CallStats* call_stats, | 414 CallStats* call_stats, |
413 CongestionController* congestion_controller, | 415 CongestionController* congestion_controller, |
| 416 PacketRouter* packet_router, |
414 BitrateAllocator* bitrate_allocator, | 417 BitrateAllocator* bitrate_allocator, |
415 SendDelayStats* send_delay_stats, | 418 SendDelayStats* send_delay_stats, |
416 VieRemb* remb, | 419 VieRemb* remb, |
417 RtcEventLog* event_log, | 420 RtcEventLog* event_log, |
418 const VideoSendStream::Config* config, | 421 const VideoSendStream::Config* config, |
419 int initial_encoder_max_bitrate, | 422 int initial_encoder_max_bitrate, |
420 const std::map<uint32_t, RtpState>& suspended_ssrcs) | 423 const std::map<uint32_t, RtpState>& suspended_ssrcs) |
421 : send_stream_(send_stream), | 424 : send_stream_(send_stream), |
422 done_event_(done_event), | 425 done_event_(done_event), |
423 stats_proxy_(stats_proxy), | 426 stats_proxy_(stats_proxy), |
424 vie_encoder_(vie_encoder), | 427 vie_encoder_(vie_encoder), |
425 call_stats_(call_stats), | 428 call_stats_(call_stats), |
426 congestion_controller_(congestion_controller), | 429 congestion_controller_(congestion_controller), |
| 430 packet_router_(packet_router), |
427 bitrate_allocator_(bitrate_allocator), | 431 bitrate_allocator_(bitrate_allocator), |
428 send_delay_stats_(send_delay_stats), | 432 send_delay_stats_(send_delay_stats), |
429 remb_(remb), | 433 remb_(remb), |
430 event_log_(event_log), | 434 event_log_(event_log), |
431 config_(config), | 435 config_(config), |
432 initial_encoder_max_bitrate_(initial_encoder_max_bitrate), | 436 initial_encoder_max_bitrate_(initial_encoder_max_bitrate), |
433 suspended_ssrcs_(suspended_ssrcs) {} | 437 suspended_ssrcs_(suspended_ssrcs) {} |
434 | 438 |
435 ~ConstructionTask() override { done_event_->Set(); } | 439 ~ConstructionTask() override { done_event_->Set(); } |
436 | 440 |
437 private: | 441 private: |
438 bool Run() override { | 442 bool Run() override { |
439 send_stream_->reset(new VideoSendStreamImpl( | 443 send_stream_->reset(new VideoSendStreamImpl( |
440 stats_proxy_, rtc::TaskQueue::Current(), call_stats_, | 444 stats_proxy_, rtc::TaskQueue::Current(), call_stats_, |
441 congestion_controller_, bitrate_allocator_, send_delay_stats_, remb_, | 445 congestion_controller_, packet_router_, bitrate_allocator_, |
442 vie_encoder_, event_log_, config_, initial_encoder_max_bitrate_, | 446 send_delay_stats_, remb_, vie_encoder_, event_log_, config_, |
443 std::move(suspended_ssrcs_))); | 447 initial_encoder_max_bitrate_, std::move(suspended_ssrcs_))); |
444 return true; | 448 return true; |
445 } | 449 } |
446 | 450 |
447 std::unique_ptr<VideoSendStreamImpl>* const send_stream_; | 451 std::unique_ptr<VideoSendStreamImpl>* const send_stream_; |
448 rtc::Event* const done_event_; | 452 rtc::Event* const done_event_; |
449 SendStatisticsProxy* const stats_proxy_; | 453 SendStatisticsProxy* const stats_proxy_; |
450 ViEEncoder* const vie_encoder_; | 454 ViEEncoder* const vie_encoder_; |
451 CallStats* const call_stats_; | 455 CallStats* const call_stats_; |
452 CongestionController* const congestion_controller_; | 456 CongestionController* const congestion_controller_; |
| 457 PacketRouter* const packet_router_; |
453 BitrateAllocator* const bitrate_allocator_; | 458 BitrateAllocator* const bitrate_allocator_; |
454 SendDelayStats* const send_delay_stats_; | 459 SendDelayStats* const send_delay_stats_; |
455 VieRemb* const remb_; | 460 VieRemb* const remb_; |
456 RtcEventLog* const event_log_; | 461 RtcEventLog* const event_log_; |
457 const VideoSendStream::Config* config_; | 462 const VideoSendStream::Config* config_; |
458 int initial_encoder_max_bitrate_; | 463 int initial_encoder_max_bitrate_; |
459 std::map<uint32_t, RtpState> suspended_ssrcs_; | 464 std::map<uint32_t, RtpState> suspended_ssrcs_; |
460 }; | 465 }; |
461 | 466 |
462 class VideoSendStream::DestructAndGetRtpStateTask : public rtc::QueuedTask { | 467 class VideoSendStream::DestructAndGetRtpStateTask : public rtc::QueuedTask { |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 std::vector<VideoStream> streams_; | 562 std::vector<VideoStream> streams_; |
558 int min_transmit_bitrate_bps_; | 563 int min_transmit_bitrate_bps_; |
559 }; | 564 }; |
560 | 565 |
561 VideoSendStream::VideoSendStream( | 566 VideoSendStream::VideoSendStream( |
562 int num_cpu_cores, | 567 int num_cpu_cores, |
563 ProcessThread* module_process_thread, | 568 ProcessThread* module_process_thread, |
564 rtc::TaskQueue* worker_queue, | 569 rtc::TaskQueue* worker_queue, |
565 CallStats* call_stats, | 570 CallStats* call_stats, |
566 CongestionController* congestion_controller, | 571 CongestionController* congestion_controller, |
| 572 PacketRouter* packet_router, |
567 BitrateAllocator* bitrate_allocator, | 573 BitrateAllocator* bitrate_allocator, |
568 SendDelayStats* send_delay_stats, | 574 SendDelayStats* send_delay_stats, |
569 VieRemb* remb, | 575 VieRemb* remb, |
570 RtcEventLog* event_log, | 576 RtcEventLog* event_log, |
571 VideoSendStream::Config config, | 577 VideoSendStream::Config config, |
572 VideoEncoderConfig encoder_config, | 578 VideoEncoderConfig encoder_config, |
573 const std::map<uint32_t, RtpState>& suspended_ssrcs) | 579 const std::map<uint32_t, RtpState>& suspended_ssrcs) |
574 : worker_queue_(worker_queue), | 580 : worker_queue_(worker_queue), |
575 thread_sync_event_(false /* manual_reset */, false), | 581 thread_sync_event_(false /* manual_reset */, false), |
576 stats_proxy_(Clock::GetRealTimeClock(), | 582 stats_proxy_(Clock::GetRealTimeClock(), |
577 config, | 583 config, |
578 encoder_config.content_type), | 584 encoder_config.content_type), |
579 config_(std::move(config)) { | 585 config_(std::move(config)) { |
580 vie_encoder_.reset(new ViEEncoder( | 586 vie_encoder_.reset(new ViEEncoder( |
581 num_cpu_cores, &stats_proxy_, config_.encoder_settings, | 587 num_cpu_cores, &stats_proxy_, config_.encoder_settings, |
582 config_.pre_encode_callback, config_.post_encode_callback)); | 588 config_.pre_encode_callback, config_.post_encode_callback)); |
583 | 589 |
584 worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask( | 590 worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask( |
585 &send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(), | 591 &send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(), |
586 module_process_thread, call_stats, congestion_controller, | 592 module_process_thread, call_stats, congestion_controller, packet_router, |
587 bitrate_allocator, send_delay_stats, remb, event_log, &config_, | 593 bitrate_allocator, send_delay_stats, remb, event_log, &config_, |
588 encoder_config.max_bitrate_bps, suspended_ssrcs))); | 594 encoder_config.max_bitrate_bps, suspended_ssrcs))); |
589 | 595 |
590 // Wait for ConstructionTask to complete so that |send_stream_| can be used. | 596 // Wait for ConstructionTask to complete so that |send_stream_| can be used. |
591 // |module_process_thread| must be registered and deregistered on the thread | 597 // |module_process_thread| must be registered and deregistered on the thread |
592 // it was created on. | 598 // it was created on. |
593 thread_sync_event_.Wait(rtc::Event::kForever); | 599 thread_sync_event_.Wait(rtc::Event::kForever); |
594 send_stream_->RegisterProcessThread(module_process_thread); | 600 send_stream_->RegisterProcessThread(module_process_thread); |
595 | 601 |
596 vie_encoder_->RegisterProcessThread(module_process_thread); | 602 vie_encoder_->RegisterProcessThread(module_process_thread); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
684 const std::vector<rtc::PlatformFile>& files, | 690 const std::vector<rtc::PlatformFile>& files, |
685 size_t byte_limit) { | 691 size_t byte_limit) { |
686 send_stream_->EnableEncodedFrameRecording(files, byte_limit); | 692 send_stream_->EnableEncodedFrameRecording(files, byte_limit); |
687 } | 693 } |
688 | 694 |
689 VideoSendStreamImpl::VideoSendStreamImpl( | 695 VideoSendStreamImpl::VideoSendStreamImpl( |
690 SendStatisticsProxy* stats_proxy, | 696 SendStatisticsProxy* stats_proxy, |
691 rtc::TaskQueue* worker_queue, | 697 rtc::TaskQueue* worker_queue, |
692 CallStats* call_stats, | 698 CallStats* call_stats, |
693 CongestionController* congestion_controller, | 699 CongestionController* congestion_controller, |
| 700 PacketRouter* packet_router, |
694 BitrateAllocator* bitrate_allocator, | 701 BitrateAllocator* bitrate_allocator, |
695 SendDelayStats* send_delay_stats, | 702 SendDelayStats* send_delay_stats, |
696 VieRemb* remb, | 703 VieRemb* remb, |
697 ViEEncoder* vie_encoder, | 704 ViEEncoder* vie_encoder, |
698 RtcEventLog* event_log, | 705 RtcEventLog* event_log, |
699 const VideoSendStream::Config* config, | 706 const VideoSendStream::Config* config, |
700 int initial_encoder_max_bitrate, | 707 int initial_encoder_max_bitrate, |
701 std::map<uint32_t, RtpState> suspended_ssrcs) | 708 std::map<uint32_t, RtpState> suspended_ssrcs) |
702 : stats_proxy_(stats_proxy), | 709 : stats_proxy_(stats_proxy), |
703 config_(config), | 710 config_(config), |
704 suspended_ssrcs_(std::move(suspended_ssrcs)), | 711 suspended_ssrcs_(std::move(suspended_ssrcs)), |
705 module_process_thread_(nullptr), | 712 module_process_thread_(nullptr), |
706 worker_queue_(worker_queue), | 713 worker_queue_(worker_queue), |
707 check_encoder_activity_task_(nullptr), | 714 check_encoder_activity_task_(nullptr), |
708 call_stats_(call_stats), | 715 call_stats_(call_stats), |
709 congestion_controller_(congestion_controller), | 716 congestion_controller_(congestion_controller), |
| 717 packet_router_(packet_router), |
710 bitrate_allocator_(bitrate_allocator), | 718 bitrate_allocator_(bitrate_allocator), |
711 remb_(remb), | 719 remb_(remb), |
712 flexfec_sender_(MaybeCreateFlexfecSender(*config_)), | 720 flexfec_sender_(MaybeCreateFlexfecSender(*config_)), |
713 max_padding_bitrate_(0), | 721 max_padding_bitrate_(0), |
714 encoder_min_bitrate_bps_(0), | 722 encoder_min_bitrate_bps_(0), |
715 encoder_max_bitrate_bps_(initial_encoder_max_bitrate), | 723 encoder_max_bitrate_bps_(initial_encoder_max_bitrate), |
716 encoder_target_rate_bps_(0), | 724 encoder_target_rate_bps_(0), |
717 vie_encoder_(vie_encoder), | 725 vie_encoder_(vie_encoder), |
718 encoder_feedback_(Clock::GetRealTimeClock(), | 726 encoder_feedback_(Clock::GetRealTimeClock(), |
719 config_->rtp.ssrcs, | 727 config_->rtp.ssrcs, |
720 vie_encoder), | 728 vie_encoder), |
721 protection_bitrate_calculator_(Clock::GetRealTimeClock(), this), | 729 protection_bitrate_calculator_(Clock::GetRealTimeClock(), this), |
722 bandwidth_observer_(congestion_controller_->GetBitrateController() | 730 bandwidth_observer_(congestion_controller_->GetBitrateController() |
723 ->CreateRtcpBandwidthObserver()), | 731 ->CreateRtcpBandwidthObserver()), |
724 rtp_rtcp_modules_(CreateRtpRtcpModules( | 732 rtp_rtcp_modules_(CreateRtpRtcpModules( |
725 config_->send_transport, | 733 config_->send_transport, |
726 &encoder_feedback_, | 734 &encoder_feedback_, |
727 bandwidth_observer_.get(), | 735 bandwidth_observer_.get(), |
728 congestion_controller_->GetTransportFeedbackObserver(), | 736 congestion_controller_->GetTransportFeedbackObserver(), |
729 call_stats_->rtcp_rtt_stats(), | 737 call_stats_->rtcp_rtt_stats(), |
730 congestion_controller_->pacer(), | 738 congestion_controller_->pacer(), |
731 congestion_controller_->packet_router(), | 739 packet_router_, |
732 flexfec_sender_.get(), | 740 flexfec_sender_.get(), |
733 stats_proxy_, | 741 stats_proxy_, |
734 send_delay_stats, | 742 send_delay_stats, |
735 event_log, | 743 event_log, |
736 congestion_controller_->GetRetransmissionRateLimiter(), | 744 congestion_controller_->GetRetransmissionRateLimiter(), |
737 config_->rtp.ssrcs.size())), | 745 config_->rtp.ssrcs.size())), |
738 payload_router_(rtp_rtcp_modules_, | 746 payload_router_(rtp_rtcp_modules_, |
739 config_->encoder_settings.payload_type), | 747 config_->encoder_settings.payload_type), |
740 weak_ptr_factory_(this) { | 748 weak_ptr_factory_(this) { |
741 RTC_DCHECK_RUN_ON(worker_queue_); | 749 RTC_DCHECK_RUN_ON(worker_queue_); |
742 LOG(LS_INFO) << "VideoSendStreamInternal: " << config_->ToString(); | 750 LOG(LS_INFO) << "VideoSendStreamInternal: " << config_->ToString(); |
743 weak_ptr_ = weak_ptr_factory_.GetWeakPtr(); | 751 weak_ptr_ = weak_ptr_factory_.GetWeakPtr(); |
744 module_process_thread_checker_.DetachFromThread(); | 752 module_process_thread_checker_.DetachFromThread(); |
745 | 753 |
746 RTC_DCHECK(!config_->rtp.ssrcs.empty()); | 754 RTC_DCHECK(!config_->rtp.ssrcs.empty()); |
747 RTC_DCHECK(call_stats_); | 755 RTC_DCHECK(call_stats_); |
748 RTC_DCHECK(congestion_controller_); | 756 RTC_DCHECK(congestion_controller_); |
749 RTC_DCHECK(remb_); | 757 RTC_DCHECK(remb_); |
750 | 758 |
751 // RTP/RTCP initialization. | 759 // RTP/RTCP initialization. |
752 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 760 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
753 congestion_controller_->packet_router()->AddRtpModule(rtp_rtcp); | 761 packet_router_->AddRtpModule(rtp_rtcp); |
754 } | 762 } |
755 | 763 |
756 for (size_t i = 0; i < config_->rtp.extensions.size(); ++i) { | 764 for (size_t i = 0; i < config_->rtp.extensions.size(); ++i) { |
757 const std::string& extension = config_->rtp.extensions[i].uri; | 765 const std::string& extension = config_->rtp.extensions[i].uri; |
758 int id = config_->rtp.extensions[i].id; | 766 int id = config_->rtp.extensions[i].id; |
759 // One-byte-extension local identifiers are in the range 1-14 inclusive. | 767 // One-byte-extension local identifiers are in the range 1-14 inclusive. |
760 RTC_DCHECK_GE(id, 1); | 768 RTC_DCHECK_GE(id, 1); |
761 RTC_DCHECK_LE(id, 14); | 769 RTC_DCHECK_LE(id, 14); |
762 RTC_DCHECK(RtpExtension::IsSupportedForVideo(extension)); | 770 RTC_DCHECK(RtpExtension::IsSupportedForVideo(extension)); |
763 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 771 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 VideoSendStreamImpl::~VideoSendStreamImpl() { | 835 VideoSendStreamImpl::~VideoSendStreamImpl() { |
828 RTC_DCHECK_RUN_ON(worker_queue_); | 836 RTC_DCHECK_RUN_ON(worker_queue_); |
829 RTC_DCHECK(!payload_router_.active()) | 837 RTC_DCHECK(!payload_router_.active()) |
830 << "VideoSendStreamImpl::Stop not called"; | 838 << "VideoSendStreamImpl::Stop not called"; |
831 LOG(LS_INFO) << "~VideoSendStreamInternal: " << config_->ToString(); | 839 LOG(LS_INFO) << "~VideoSendStreamInternal: " << config_->ToString(); |
832 | 840 |
833 rtp_rtcp_modules_[0]->SetREMBStatus(false); | 841 rtp_rtcp_modules_[0]->SetREMBStatus(false); |
834 remb_->RemoveRembSender(rtp_rtcp_modules_[0]); | 842 remb_->RemoveRembSender(rtp_rtcp_modules_[0]); |
835 | 843 |
836 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 844 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
837 congestion_controller_->packet_router()->RemoveRtpModule(rtp_rtcp); | 845 packet_router_->RemoveRtpModule(rtp_rtcp); |
838 delete rtp_rtcp; | 846 delete rtp_rtcp; |
839 } | 847 } |
840 } | 848 } |
841 | 849 |
842 bool VideoSendStreamImpl::DeliverRtcp(const uint8_t* packet, size_t length) { | 850 bool VideoSendStreamImpl::DeliverRtcp(const uint8_t* packet, size_t length) { |
843 // Runs on a network thread. | 851 // Runs on a network thread. |
844 RTC_DCHECK(!worker_queue_->IsCurrent()); | 852 RTC_DCHECK(!worker_queue_->IsCurrent()); |
845 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 853 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
846 rtp_rtcp->IncomingRtcpPacket(packet, length); | 854 rtp_rtcp->IncomingRtcpPacket(packet, length); |
847 return true; | 855 return true; |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1212 } | 1220 } |
1213 | 1221 |
1214 void VideoSendStreamImpl::SetTransportOverhead( | 1222 void VideoSendStreamImpl::SetTransportOverhead( |
1215 int transport_overhead_per_packet) { | 1223 int transport_overhead_per_packet) { |
1216 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 1224 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
1217 rtp_rtcp->SetTransportOverhead(transport_overhead_per_packet); | 1225 rtp_rtcp->SetTransportOverhead(transport_overhead_per_packet); |
1218 } | 1226 } |
1219 | 1227 |
1220 } // namespace internal | 1228 } // namespace internal |
1221 } // namespace webrtc | 1229 } // namespace webrtc |
OLD | NEW |