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 |