Index: remoting/protocol/webrtc_video_encoder.cc |
diff --git a/remoting/protocol/webrtc_video_encoder.cc b/remoting/protocol/webrtc_video_encoder.cc |
index 39c27ec22d4830c87a3ddf9865d4842b26268470..2bb668a599c7c7fbd4461675141b630f3ac82c49 100644 |
--- a/remoting/protocol/webrtc_video_encoder.cc |
+++ b/remoting/protocol/webrtc_video_encoder.cc |
@@ -44,7 +44,6 @@ int32_t WebRtcVideoEncoder::InitEncode(const webrtc::VideoCodec* codec_settings, |
} |
} |
} |
- target_bitrate_ = codec_settings->startBitrate; |
state_ = kInitialized; |
return WEBRTC_VIDEO_CODEC_OK; |
} |
@@ -84,7 +83,8 @@ int32_t WebRtcVideoEncoder::SetChannelParameters(uint32_t packet_loss, |
int32_t WebRtcVideoEncoder::SetRates(uint32_t bitrate, uint32_t framerate) { |
VLOG(1) << "WebRtcVideoEncoder::SetRates bitrate:framerate " << bitrate << ":" |
<< framerate; |
- target_bitrate_ = bitrate; |
+ if (!target_bitrate_cb_.is_null()) |
+ target_bitrate_cb_.Run(bitrate); |
// framerate is not expected to be valid given we never report captured |
// frames |
return WEBRTC_VIDEO_CODEC_OK; |
@@ -144,6 +144,12 @@ void WebRtcVideoEncoder::SetKeyFrameRequestCallback( |
key_frame_request_ = key_frame_request; |
} |
+void WebRtcVideoEncoder::SetTargetBitrateCallback( |
+ const TargetBitrateCallback& target_bitrate_cb) { |
+ base::AutoLock lock(lock_); |
+ target_bitrate_cb_ = target_bitrate_cb; |
+} |
+ |
WebRtcVideoEncoderFactory::WebRtcVideoEncoderFactory() { |
// TODO(isheriff): These do not really affect anything internally |
// in webrtc. |
@@ -162,6 +168,7 @@ webrtc::VideoEncoder* WebRtcVideoEncoderFactory::CreateVideoEncoder( |
WebRtcVideoEncoder* encoder = new WebRtcVideoEncoder(type); |
base::AutoLock lock(lock_); |
encoder->SetKeyFrameRequestCallback(key_frame_request_); |
+ encoder->SetTargetBitrateCallback(target_bitrate_cb_); |
VLOG(1) << "Created " << encoder; |
encoders_.push_back(base::WrapUnique(encoder)); |
return encoder; |
@@ -218,4 +225,17 @@ void WebRtcVideoEncoderFactory::SetKeyFrameRequestCallback( |
<< encoders_.size(); |
} |
} |
+ |
+void WebRtcVideoEncoderFactory::SetTargetBitrateCallback( |
+ const TargetBitrateCallback& target_bitrate_cb) { |
+ base::AutoLock lock(lock_); |
+ target_bitrate_cb_ = target_bitrate_cb; |
+ if (encoders_.size() == 1) { |
+ encoders_.front()->SetTargetBitrateCallback(target_bitrate_cb); |
+ } else { |
+ LOG(ERROR) << "Dropping target bitrate request callback with unexpected" |
+ " number of encoders" |
+ << encoders_.size(); |
+ } |
+} |
} // namespace remoting |