| Index: webrtc/video/video_send_stream.cc
|
| diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
|
| index 08dcd77ac69c749ac609e63c73d1f65c0490b5bb..254805ff238cc8cdeadb28b6b18d96cdf966f62f 100644
|
| --- a/webrtc/video/video_send_stream.cc
|
| +++ b/webrtc/video/video_send_stream.cc
|
| @@ -22,6 +22,7 @@
|
| #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
| #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
|
| #include "webrtc/modules/pacing/packet_router.h"
|
| +#include "webrtc/modules/utility/include/process_thread.h"
|
| #include "webrtc/video/call_stats.h"
|
| #include "webrtc/video/encoder_state_feedback.h"
|
| #include "webrtc/video/payload_router.h"
|
| @@ -107,6 +108,18 @@ std::string VideoSendStream::Config::ToString() const {
|
| return ss.str();
|
| }
|
|
|
| +namespace {
|
| +
|
| +CpuOveruseOptions GetCpuOveruseOptions(bool full_overuse_time) {
|
| + CpuOveruseOptions options;
|
| + if (full_overuse_time) {
|
| + options.low_encode_usage_threshold_percent = 100;
|
| + options.high_encode_usage_threshold_percent = 120;
|
| + }
|
| + return options;
|
| +}
|
| +} // namespace
|
| +
|
| namespace internal {
|
| VideoSendStream::VideoSendStream(
|
| int num_cpu_cores,
|
| @@ -127,6 +140,12 @@ VideoSendStream::VideoSendStream(
|
| module_process_thread_(module_process_thread),
|
| call_stats_(call_stats),
|
| congestion_controller_(congestion_controller),
|
| + overuse_detector_(
|
| + Clock::GetRealTimeClock(),
|
| + GetCpuOveruseOptions(config.encoder_settings.full_overuse_time),
|
| + this,
|
| + config.post_encode_callback,
|
| + &stats_proxy_),
|
| encoder_feedback_(new EncoderStateFeedback()),
|
| use_config_bitrate_(true) {
|
| LOG(LS_INFO) << "VideoSendStream: " << config_.ToString();
|
| @@ -144,10 +163,10 @@ VideoSendStream::VideoSendStream(
|
|
|
| const std::vector<uint32_t>& ssrcs = config.rtp.ssrcs;
|
|
|
| - vie_encoder_.reset(new ViEEncoder(
|
| - num_cpu_cores, module_process_thread_, &stats_proxy_,
|
| - config.pre_encode_callback, congestion_controller_->pacer(),
|
| - bitrate_allocator));
|
| + vie_encoder_.reset(
|
| + new ViEEncoder(num_cpu_cores, module_process_thread_, &stats_proxy_,
|
| + config.pre_encode_callback, &overuse_detector_,
|
| + congestion_controller_->pacer(), bitrate_allocator));
|
| RTC_CHECK(vie_encoder_->Init());
|
|
|
| vie_channel_.reset(new ViEChannel(
|
| @@ -207,8 +226,8 @@ VideoSendStream::VideoSendStream(
|
| vie_channel_->SetRTCPCName(config_.rtp.c_name.c_str());
|
|
|
| input_.reset(new internal::VideoCaptureInput(
|
| - module_process_thread_, vie_encoder_.get(), config_.local_renderer,
|
| - &stats_proxy_, this, config_.encoding_time_observer));
|
| + vie_encoder_.get(), config_.local_renderer, &stats_proxy_,
|
| + &overuse_detector_));
|
|
|
| // 28 to match packet overhead in ModuleRtpRtcpImpl.
|
| RTC_DCHECK_LE(config_.rtp.max_packet_size, static_cast<size_t>(0xFFFF - 28));
|
| @@ -240,10 +259,13 @@ VideoSendStream::VideoSendStream(
|
| vie_channel_->RegisterRtcpPacketTypeCounterObserver(&stats_proxy_);
|
| vie_channel_->RegisterSendBitrateObserver(&stats_proxy_);
|
| vie_channel_->RegisterSendFrameCountObserver(&stats_proxy_);
|
| +
|
| + module_process_thread_->RegisterModule(&overuse_detector_);
|
| }
|
|
|
| VideoSendStream::~VideoSendStream() {
|
| LOG(LS_INFO) << "~VideoSendStream: " << config_.ToString();
|
| + module_process_thread_->DeRegisterModule(&overuse_detector_);
|
| vie_channel_->RegisterSendFrameCountObserver(nullptr);
|
| vie_channel_->RegisterSendBitrateObserver(nullptr);
|
| vie_channel_->RegisterRtcpPacketTypeCounterObserver(nullptr);
|
|
|