Move creation of OveruseFrameDetector to VideoSendStream.
Intended to make it easier to wire up cpu-adaptation experiments.
To setup the circular references between OveruseFrameDetector and
VideoStreamEncoder, let the AdaptationObserverInterface pointer be
an argument to StartCheckForOveruse.
Bug: webrtc:8504
Change-Id: Ifcf7655ec65e637819d77f507552cb22a6aa5f0f
Reviewed-on: https://webrtc-review.googlesource.com/33340
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22006}
diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc
index 4bada9a..765ec42 100644
--- a/video/video_send_stream.cc
+++ b/video/video_send_stream.cc
@@ -234,6 +234,24 @@
packet_size_bits);
}
+// TODO(pbos): Lower these thresholds (to closer to 100%) when we handle
+// pipelining encoders better (multiple input frames before something comes
+// out). This should effectively turn off CPU adaptations for systems that
+// remotely cope with the load right now.
+CpuOveruseOptions GetCpuOveruseOptions(const VideoSendStream::Config& config) {
+ CpuOveruseOptions options;
+
+ if (config.encoder_settings.full_overuse_time) {
+ options.low_encode_usage_threshold_percent = 150;
+ options.high_encode_usage_threshold_percent = 200;
+ }
+ if (config.encoder_settings.experiment_cpu_load_estimator) {
+ options.filter_time_ms = 5 * rtc::kNumMillisecsPerSec;
+ }
+
+ return options;
+}
+
} // namespace
namespace internal {
@@ -597,11 +615,13 @@
encoder_config.content_type),
config_(std::move(config)),
content_type_(encoder_config.content_type) {
- video_stream_encoder_.reset(
- new VideoStreamEncoder(num_cpu_cores, &stats_proxy_,
- config_.encoder_settings,
- config_.pre_encode_callback,
- std::unique_ptr<OveruseFrameDetector>()));
+ video_stream_encoder_ = rtc::MakeUnique<VideoStreamEncoder>(
+ num_cpu_cores, &stats_proxy_,
+ config_.encoder_settings,
+ config_.pre_encode_callback,
+ rtc::MakeUnique<OveruseFrameDetector>(
+ GetCpuOveruseOptions(config_), &stats_proxy_));
+
worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask(
&send_stream_, &thread_sync_event_, &stats_proxy_,
video_stream_encoder_.get(), module_process_thread, call_stats, transport,