| Index: webrtc/modules/video_coding/utility/quality_scaler.cc
|
| diff --git a/webrtc/modules/video_coding/utility/quality_scaler.cc b/webrtc/modules/video_coding/utility/quality_scaler.cc
|
| index bb60ee036e381dc9762e3b9a030acd257582eed5..6fe1c66490d3c2cbc6a358408d484c1d18606489 100644
|
| --- a/webrtc/modules/video_coding/utility/quality_scaler.cc
|
| +++ b/webrtc/modules/video_coding/utility/quality_scaler.cc
|
| @@ -7,6 +7,10 @@
|
| * in the file PATENTS. All contributing project authors may
|
| * be found in the AUTHORS file in the root of the source tree.
|
| */
|
| +
|
| +// TODO(nisse): Switch to RTC_CHECK (or RTC_DCHECK) ?
|
| +#include <assert.h>
|
| +
|
| #include "webrtc/modules/video_coding/utility/quality_scaler.h"
|
|
|
| namespace webrtc {
|
| @@ -94,7 +98,7 @@ void QualityScaler::ReportDroppedFrame() {
|
| framedrop_percent_.AddSample(100);
|
| }
|
|
|
| -void QualityScaler::OnEncodeFrame(const VideoFrame& frame) {
|
| +void QualityScaler::OnEncodeFrame(int width, int height) {
|
| // Should be set through InitEncode -> Should be set by now.
|
| assert(low_qp_threshold_ >= 0);
|
| assert(num_samples_upscale_ > 0);
|
| @@ -113,34 +117,27 @@ void QualityScaler::OnEncodeFrame(const VideoFrame& frame) {
|
| avg_qp <= low_qp_threshold_) {
|
| AdjustScale(true);
|
| }
|
| - UpdateTargetResolution(frame.width(), frame.height());
|
| + UpdateTargetResolution(width, height);
|
| }
|
|
|
| QualityScaler::Resolution QualityScaler::GetScaledResolution() const {
|
| return res_;
|
| }
|
|
|
| -const VideoFrame& QualityScaler::GetScaledFrame(const VideoFrame& frame) {
|
| +rtc::scoped_refptr<VideoFrameBuffer> QualityScaler::GetScaledFrame(
|
| + const rtc::scoped_refptr<VideoFrameBuffer>& frame) {
|
| Resolution res = GetScaledResolution();
|
| - if (res.width == frame.width())
|
| - return frame;
|
| + int src_width = frame->width();
|
| + int src_height = frame->height();
|
|
|
| - scaler_.Set(frame.width(), frame.height(), res.width, res.height, kI420,
|
| - kI420, kScaleBox);
|
| - if (scaler_.Scale(frame, &scaled_frame_) != 0)
|
| + if (res.width == src_width && res.height == src_height)
|
| return frame;
|
| + rtc::scoped_refptr<I420Buffer> scaled =
|
| + pool_.CreateBuffer(res.width, res.height);
|
| +
|
| + I420Buffer::CenterCropAndScale(scaled, frame);
|
|
|
| - // TODO(perkj): Refactor the scaler to not own |scaled_frame|. VideoFrame are
|
| - // just thin wrappers so instead the scaler should return a
|
| - // rtc::scoped_refptr<VideoFrameBuffer> and a new VideoFrame be created with
|
| - // the meta data from |frame|. That way we would not have to set all these
|
| - // meta data.
|
| - scaled_frame_.set_ntp_time_ms(frame.ntp_time_ms());
|
| - scaled_frame_.set_timestamp(frame.timestamp());
|
| - scaled_frame_.set_render_time_ms(frame.render_time_ms());
|
| - scaled_frame_.set_rotation(frame.rotation());
|
| -
|
| - return scaled_frame_;
|
| + return scaled;
|
| }
|
|
|
| void QualityScaler::UpdateTargetResolution(int frame_width, int frame_height) {
|
|
|