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, |
+ 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 |