Chromium Code Reviews| Index: webrtc/video/video_send_stream.cc | 
| diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc | 
| index c98e5187dbbaae1443b33bff14be403788742357..658cd495ba28181165516ab514da4c0702b0f63a 100644 | 
| --- a/webrtc/video/video_send_stream.cc | 
| +++ b/webrtc/video/video_send_stream.cc | 
| @@ -156,8 +156,8 @@ VideoSendStream::VideoSendStream( | 
| ProcessThread* module_process_thread, | 
| CallStats* call_stats, | 
| CongestionController* congestion_controller, | 
| - VieRemb* remb, | 
| BitrateAllocator* bitrate_allocator, | 
| 
 
stefan-webrtc
2016/03/11 13:43:53
It would have been nicer if we didn't have to pass
 
mflodman
2016/03/11 14:26:05
Yes, I did that initially but reverted for the rea
 
mflodman
2016/03/11 14:28:39
Just to get the discussion on the record.
This do
 
 | 
| + VieRemb* remb, | 
| const VideoSendStream::Config& config, | 
| const VideoEncoderConfig& encoder_config, | 
| const std::map<uint32_t, RtpState>& suspended_ssrcs) | 
| @@ -170,6 +170,7 @@ VideoSendStream::VideoSendStream( | 
| module_process_thread_(module_process_thread), | 
| call_stats_(call_stats), | 
| congestion_controller_(congestion_controller), | 
| + bitrate_allocator_(bitrate_allocator), | 
| remb_(remb), | 
| encoder_thread_(EncoderThreadFunction, this, "EncoderThread"), | 
| encoder_wakeup_event_(false, false), | 
| @@ -202,8 +203,7 @@ VideoSendStream::VideoSendStream( | 
| config.pre_encode_callback, | 
| &overuse_detector_, | 
| congestion_controller_->pacer(), | 
| - &payload_router_, | 
| - bitrate_allocator), | 
| + &payload_router_), | 
| vcm_(vie_encoder_.vcm()), | 
| rtp_rtcp_modules_(vie_channel_.rtp_rtcp()), | 
| input_(&encoder_wakeup_event_, | 
| @@ -298,8 +298,10 @@ VideoSendStream::VideoSendStream( | 
| if (config_.post_encode_callback) | 
| vie_encoder_.RegisterPostEncodeImageCallback(&encoded_frame_proxy_); | 
| - if (config_.suspend_below_min_bitrate) | 
| - vie_encoder_.SuspendBelowMinBitrate(); | 
| + if (config_.suspend_below_min_bitrate) { | 
| + vcm_->SuspendBelowMinBitrate(); | 
| + bitrate_allocator_->EnforceMinBitrate(false); | 
| + } | 
| vie_channel_.RegisterRtcpPacketTypeCounterObserver(&stats_proxy_); | 
| vie_channel_.RegisterSendBitrateObserver(&stats_proxy_); | 
| @@ -313,6 +315,8 @@ VideoSendStream::VideoSendStream( | 
| VideoSendStream::~VideoSendStream() { | 
| LOG(LS_INFO) << "~VideoSendStream: " << config_.ToString(); | 
| + | 
| + bitrate_allocator_->RemoveObserver(this); | 
| Stop(); | 
| // Stop the encoder thread permanently. | 
| @@ -516,6 +520,10 @@ void VideoSendStream::ReconfigureVideoEncoder( | 
| RTC_DCHECK_GT(streams[0].max_framerate, 0); | 
| video_codec.maxFramerate = streams[0].max_framerate; | 
| + video_codec.startBitrate = | 
| + bitrate_allocator_->AddObserver(this, | 
| + video_codec.minBitrate * 1000, | 
| + video_codec.maxBitrate * 1000) / 1000; | 
| vie_encoder_.SetEncoder(video_codec, config.min_transmit_bitrate_bps); | 
| } | 
| @@ -614,5 +622,12 @@ void VideoSendStream::SignalNetworkState(NetworkState state) { | 
| int VideoSendStream::GetPaddingNeededBps() const { | 
| return vie_encoder_.GetPaddingNeededBps(); | 
| } | 
| + | 
| +void VideoSendStream::OnBitrateUpdated(uint32_t bitrate_bps, | 
| + uint8_t fraction_loss, | 
| + int64_t rtt) { | 
| + vie_encoder_.OnBitrateUpdated(bitrate_bps, fraction_loss, rtt); | 
| +} | 
| + | 
| } // namespace internal | 
| } // namespace webrtc |