From 25e5110ab0420499962c34fa4691206f2a6dedf3 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Thu, 1 Mar 2018 15:56:47 +0100 Subject: [PATCH] Explicit injection of rate limiter in VideoSendStream. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injecting the retransmission rate limiter used in video send stream directly rather than using the transport controller reference. This prepares for removing ownership of the retransmission rate limiter from the congestion controller. Bug: webrtc:8415 Change-Id: Iee8af53e62f407ee430625008f2d2b0cabb1f369 Reviewed-on: https://webrtc-review.googlesource.com/58800 Reviewed-by: Stefan Holmer Reviewed-by: Erik Språng Commit-Queue: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#22251} --- call/call.cc | 3 ++- video/video_send_stream.cc | 38 ++++++++++++++++++++------------------ video/video_send_stream.h | 3 ++- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/call/call.cc b/call/call.cc index d730fdbaf8..29f619f953 100644 --- a/call/call.cc +++ b/call/call.cc @@ -703,7 +703,8 @@ webrtc::VideoSendStream* Call::CreateVideoSendStream( call_stats_.get(), transport_send_.get(), bitrate_allocator_.get(), video_send_delay_stats_.get(), event_log_, std::move(config), std::move(encoder_config), suspended_video_send_ssrcs_, - suspended_video_payload_states_, std::move(fec_controller)); + suspended_video_payload_states_, std::move(fec_controller), + transport_send_->GetRetransmissionRateLimiter()); { WriteLockScoped write_lock(*send_crit_); diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc index 872852955d..5fb41b6873 100644 --- a/video/video_send_stream.cc +++ b/video/video_send_stream.cc @@ -283,7 +283,8 @@ class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver, std::map suspended_ssrcs, std::map suspended_payload_states, VideoEncoderConfig::ContentType content_type, - std::unique_ptr fec_controller); + std::unique_ptr fec_controller, + RateLimiter* retransmission_limiter); ~VideoSendStreamImpl() override; // RegisterProcessThread register |module_process_thread| with those objects @@ -534,7 +535,8 @@ VideoSendStream::VideoSendStream( VideoEncoderConfig encoder_config, const std::map& suspended_ssrcs, const std::map& suspended_payload_states, - std::unique_ptr fec_controller) + std::unique_ptr fec_controller, + RateLimiter* retransmission_limiter) : worker_queue_(worker_queue), thread_sync_event_(false /* manual_reset */, false), stats_proxy_(Clock::GetRealTimeClock(), @@ -554,14 +556,14 @@ VideoSendStream::VideoSendStream( worker_queue_->PostTask(rtc::NewClosure( [this, call_stats, transport, bitrate_allocator, send_delay_stats, event_log, &suspended_ssrcs, &encoder_config, &suspended_payload_states, - &fec_controller]() { + &fec_controller, retransmission_limiter]() { send_stream_.reset(new VideoSendStreamImpl( &stats_proxy_, worker_queue_, call_stats, transport, bitrate_allocator, send_delay_stats, video_stream_encoder_.get(), event_log, &config_, encoder_config.max_bitrate_bps, encoder_config.bitrate_priority, suspended_ssrcs, suspended_payload_states, encoder_config.content_type, - std::move(fec_controller))); + std::move(fec_controller), retransmission_limiter)); }, [this]() { thread_sync_event_.Set(); })); @@ -702,7 +704,8 @@ VideoSendStreamImpl::VideoSendStreamImpl( std::map suspended_ssrcs, std::map suspended_payload_states, VideoEncoderConfig::ContentType content_type, - std::unique_ptr fec_controller) + std::unique_ptr fec_controller, + RateLimiter* retransmission_limiter) : send_side_bwe_with_overhead_( webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")), stats_proxy_(stats_proxy), @@ -726,19 +729,18 @@ VideoSendStreamImpl::VideoSendStreamImpl( config_->rtp.ssrcs, video_stream_encoder), bandwidth_observer_(transport->GetBandwidthObserver()), - rtp_rtcp_modules_(CreateRtpRtcpModules( - *config_, - &encoder_feedback_, - bandwidth_observer_, - transport, - call_stats_->rtcp_rtt_stats(), - flexfec_sender_.get(), - stats_proxy_, - send_delay_stats, - event_log, - transport->GetRetransmissionRateLimiter(), - this, - transport->keepalive_config())), + rtp_rtcp_modules_(CreateRtpRtcpModules(*config_, + &encoder_feedback_, + bandwidth_observer_, + transport, + call_stats_->rtcp_rtt_stats(), + flexfec_sender_.get(), + stats_proxy_, + send_delay_stats, + event_log, + retransmission_limiter, + this, + transport->keepalive_config())), payload_router_(rtp_rtcp_modules_, config_->rtp.ssrcs, config_->encoder_settings.payload_type, diff --git a/video/video_send_stream.h b/video/video_send_stream.h index 0049406eb6..a790a0b0f7 100644 --- a/video/video_send_stream.h +++ b/video/video_send_stream.h @@ -65,7 +65,8 @@ class VideoSendStream : public webrtc::VideoSendStream { VideoEncoderConfig encoder_config, const std::map& suspended_ssrcs, const std::map& suspended_payload_states, - std::unique_ptr fec_controller); + std::unique_ptr fec_controller, + RateLimiter* retransmission_limiter); ~VideoSendStream() override;