Index: webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc |
diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc |
index e7a5b326ea4bfabc02c924683d01703f03363da8..2885bb88f609a64216ac004ae29e7b1cec4bacac 100644 |
--- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc |
+++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc |
@@ -148,7 +148,8 @@ VP8EncoderImpl::VP8EncoderImpl() |
down_scale_bitrate_(0), |
tl0_frame_dropper_(), |
tl1_frame_dropper_(kTl1MaxTimeToDropFrames), |
- key_frame_request_(kMaxSimulcastStreams, false) { |
+ key_frame_request_(kMaxSimulcastStreams, false), |
+ quality_scaler_enabled_(false) { |
uint32_t seed = static_cast<uint32_t>(TickTime::MillisecondTimestamp()); |
srand(seed); |
@@ -586,6 +587,12 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst, |
kDisabledBadQpThreshold, false); |
quality_scaler_.ReportFramerate(codec_.maxFramerate); |
+ // Only apply scaling to improve for single-layer streams. The scaling metrics |
+ // use frame drops as a signal and is only applicable when we drop frames. |
+ quality_scaler_enabled_ = encoders_.size() == 1 && |
+ configurations_[0].rc_dropframe_thresh > 0 && |
+ codec_.codecSpecific.VP8.automaticResizeOn; |
+ |
return InitAndSetControlSettings(); |
} |
@@ -709,17 +716,12 @@ int VP8EncoderImpl::Encode(const VideoFrame& frame, |
if (encoded_complete_callback_ == NULL) |
return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
- // Only apply scaling to improve for single-layer streams. The scaling metrics |
- // use frame drops as a signal and is only applicable when we drop frames. |
- const bool use_quality_scaler = encoders_.size() == 1 && |
- configurations_[0].rc_dropframe_thresh > 0 && |
- codec_.codecSpecific.VP8.automaticResizeOn; |
- if (use_quality_scaler) |
+ if (quality_scaler_enabled_) |
quality_scaler_.OnEncodeFrame(frame); |
const VideoFrame& input_image = |
- use_quality_scaler ? quality_scaler_.GetScaledFrame(frame) : frame; |
+ quality_scaler_enabled_ ? quality_scaler_.GetScaledFrame(frame) : frame; |
- if (use_quality_scaler && (input_image.width() != codec_.width || |
+ if (quality_scaler_enabled_ && (input_image.width() != codec_.width || |
input_image.height() != codec_.height)) { |
int ret = UpdateCodecFrameSize(input_image); |
if (ret < 0) |
@@ -1013,6 +1015,9 @@ int VP8EncoderImpl::GetEncodedPartitions(const VideoFrame& input_image, |
codec_.simulcastStream[stream_idx].height; |
encoded_images_[encoder_idx]._encodedWidth = |
codec_.simulcastStream[stream_idx].width; |
+ encoded_images_[encoder_idx] |
+ .adapt_reason_.quality_resolution_downscales = |
+ quality_scaler_enabled_ ? quality_scaler_.downscale_shift() : -1; |
encoded_complete_callback_->Encoded(encoded_images_[encoder_idx], |
&codec_specific, &frag_info); |
} else if (codec_.mode == kScreensharing) { |