Index: webrtc/video/vie_encoder.cc |
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc |
index 01e64feebd43610175f489ead72c698ab67fdba5..4ee6b8f1277f4db78b43f910cd645125cba42b55 100644 |
--- a/webrtc/video/vie_encoder.cc |
+++ b/webrtc/video/vie_encoder.cc |
@@ -14,7 +14,6 @@ |
#include <limits> |
#include <utility> |
-#include "webrtc/modules/video_coding/include/video_codec_initializer.h" |
#include "webrtc/base/arraysize.h" |
#include "webrtc/base/checks.h" |
#include "webrtc/base/logging.h" |
@@ -23,6 +22,7 @@ |
#include "webrtc/common_video/include/video_bitrate_allocator.h" |
#include "webrtc/modules/pacing/paced_sender.h" |
#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" |
+#include "webrtc/modules/video_coding/include/video_codec_initializer.h" |
#include "webrtc/modules/video_coding/include/video_coding.h" |
#include "webrtc/modules/video_coding/include/video_coding_defines.h" |
#include "webrtc/video/overuse_frame_detector.h" |
@@ -31,6 +31,8 @@ |
namespace webrtc { |
namespace { |
+using DegradationPreference = VideoSendStream::DegradationPreference; |
+ |
// Time interval for logging frame counts. |
const int64_t kFrameLogIntervalMs = 60000; |
// We will never ask for a resolution lower than this. |
@@ -134,13 +136,11 @@ class ViEEncoder::VideoSourceProxy { |
public: |
explicit VideoSourceProxy(ViEEncoder* vie_encoder) |
: vie_encoder_(vie_encoder), |
- degradation_preference_( |
- VideoSendStream::DegradationPreference::kMaintainResolution), |
+ degradation_preference_(DegradationPreference::kMaintainResolution), |
source_(nullptr) {} |
- void SetSource( |
- rtc::VideoSourceInterface<VideoFrame>* source, |
- const VideoSendStream::DegradationPreference& degradation_preference) { |
+ void SetSource(rtc::VideoSourceInterface<VideoFrame>* source, |
+ const DegradationPreference& degradation_preference) { |
// Called on libjingle's worker thread. |
RTC_DCHECK_CALLED_SEQUENTIALLY(&main_checker_); |
rtc::VideoSourceInterface<VideoFrame>* old_source = nullptr; |
@@ -199,8 +199,7 @@ class ViEEncoder::VideoSourceProxy { |
if (!IsResolutionScalingEnabledLocked()) { |
// This can happen since |degradation_preference_| is set on |
// libjingle's worker thread but the adaptation is done on the encoder |
- // task |
- // queue. |
+ // task queue. |
return; |
} |
// The input video frame size will have a resolution with "one step up" |
@@ -216,7 +215,7 @@ class ViEEncoder::VideoSourceProxy { |
bool IsResolutionScalingEnabledLocked() const |
EXCLUSIVE_LOCKS_REQUIRED(&crit_) { |
return degradation_preference_ != |
- VideoSendStream::DegradationPreference::kMaintainResolution; |
+ DegradationPreference::kMaintainResolution; |
} |
const rtc::VideoSinkWants& current_wants() const |
@@ -230,8 +229,7 @@ class ViEEncoder::VideoSourceProxy { |
ViEEncoder* const vie_encoder_; |
rtc::VideoSinkWants sink_wants_ GUARDED_BY(&crit_); |
rtc::VideoSinkWants disabled_scaling_sink_wants_ GUARDED_BY(&crit_); |
- VideoSendStream::DegradationPreference degradation_preference_ |
- GUARDED_BY(&crit_); |
+ DegradationPreference degradation_preference_ GUARDED_BY(&crit_); |
rtc::VideoSourceInterface<VideoFrame>* source_ GUARDED_BY(&crit_); |
RTC_DISALLOW_COPY_AND_ASSIGN(VideoSourceProxy); |
@@ -269,6 +267,7 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores, |
picture_id_rpsi_(0), |
clock_(Clock::GetRealTimeClock()), |
scale_counter_(kScaleReasonSize, 0), |
+ degradation_preference_(DegradationPreference::kMaintainResolution), |
last_captured_timestamp_(0), |
delta_ntp_internal_ms_(clock_->CurrentNtpInMilliseconds() - |
clock_->TimeInMilliseconds()), |
@@ -293,7 +292,7 @@ ViEEncoder::~ViEEncoder() { |
void ViEEncoder::Stop() { |
RTC_DCHECK_RUN_ON(&thread_checker_); |
- source_proxy_->SetSource(nullptr, VideoSendStream::DegradationPreference()); |
+ source_proxy_->SetSource(nullptr, DegradationPreference()); |
encoder_queue_.PostTask([this] { |
RTC_DCHECK_RUN_ON(&encoder_queue_); |
overuse_detector_.StopCheckForOveruse(); |
@@ -338,10 +337,12 @@ void ViEEncoder::SetSource( |
source_proxy_->SetSource(source, degradation_preference); |
encoder_queue_.PostTask([this, degradation_preference] { |
RTC_DCHECK_RUN_ON(&encoder_queue_); |
- scaling_enabled_ = (degradation_preference != |
- VideoSendStream::DegradationPreference::kMaintainResolution); |
+ |
+ degradation_preference_ = degradation_preference; |
stats_proxy_->SetResolutionRestrictionStats( |
- scaling_enabled_, scale_counter_[kCpu] > 0, scale_counter_[kQuality]); |
+ degradation_preference != |
+ VideoSendStream::DegradationPreference::kMaintainResolution, |
+ scale_counter_[kCpu] > 0, scale_counter_[kQuality]); |
}); |
} |
@@ -437,7 +438,8 @@ void ViEEncoder::ReconfigureEncoder() { |
std::move(streams), encoder_config_.min_transmit_bitrate_bps); |
const auto scaling_settings = settings_.encoder->GetScalingSettings(); |
- if (scaling_enabled_ && scaling_settings.enabled) { |
+ if (degradation_preference_ != DegradationPreference::kMaintainResolution && |
+ scaling_settings.enabled) { |
if (scaling_settings.thresholds) { |
quality_scaler_.reset( |
new QualityScaler(this, *(scaling_settings.thresholds))); |
@@ -701,9 +703,9 @@ void ViEEncoder::OnBitrateUpdated(uint32_t bitrate_bps, |
} |
} |
-void ViEEncoder::ScaleDown(ScaleReason reason) { |
+void ViEEncoder::AdaptDown(AdaptReason reason) { |
RTC_DCHECK_RUN_ON(&encoder_queue_); |
- if (!scaling_enabled_) |
+ if (degradation_preference_ != DegradationPreference::kBalanced) |
return; |
// Request lower resolution if the current resolution is lower than last time |
// we asked for the resolution to be lowered. |
@@ -734,10 +736,12 @@ void ViEEncoder::ScaleDown(ScaleReason reason) { |
} |
} |
-void ViEEncoder::ScaleUp(ScaleReason reason) { |
+void ViEEncoder::AdaptUp(AdaptReason reason) { |
RTC_DCHECK_RUN_ON(&encoder_queue_); |
- if (scale_counter_[reason] == 0 || !scaling_enabled_) |
+ if (scale_counter_[reason] == 0 || |
+ degradation_preference_ != DegradationPreference::kBalanced) { |
return; |
+ } |
// Only scale if resolution is higher than last time |
// we requested higher resolution. |
int current_pixel_count = |