Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Unified Diff: remoting/protocol/webrtc_video_encoder.cc

Issue 1908203002: Adapt encoder behavior to target bitrate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« remoting/codec/video_encoder_vpx.cc ('K') | « remoting/protocol/webrtc_video_encoder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698