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

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

Issue 2516983004: Move ownership of PacketRouter from CongestionController to Call. (Closed)
Patch Set: Rebased. Created 4 years 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
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698