| 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 7ef7c575ba4b699210fca7c4e40f0b557a54d440..55cb274209565687ccf146477f6ff8928a85c6fd 100644
|
| --- a/webrtc/modules/video_coding/utility/quality_scaler.cc
|
| +++ b/webrtc/modules/video_coding/utility/quality_scaler.cc
|
| @@ -14,6 +14,8 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "webrtc/base/checks.h"
|
| +
|
| // TODO(kthelgason): Some versions of Android have issues with log2.
|
| // See https://code.google.com/p/android/issues/detail?id=212634 for details
|
| #if defined(WEBRTC_ANDROID)
|
| @@ -38,22 +40,15 @@ static const int kVgaBitrateThresholdKbps = 500;
|
| static const int kVgaNumPixels = 700 * 500; // 640x480
|
| static const int kQvgaBitrateThresholdKbps = 250;
|
| static const int kQvgaNumPixels = 400 * 300; // 320x240
|
| -} // namespace
|
| -
|
| -// QP thresholds are chosen to be high enough to be hit in practice when quality
|
| -// is good, but also low enough to not cause a flip-flop behavior (e.g. going up
|
| -// in resolution shouldn't give so bad quality that we should go back down).
|
|
|
| -const int QualityScaler::kLowVp8QpThreshold = 29;
|
| -const int QualityScaler::kBadVp8QpThreshold = 95;
|
| -
|
| -#if defined(WEBRTC_IOS)
|
| -const int QualityScaler::kLowH264QpThreshold = 32;
|
| -const int QualityScaler::kBadH264QpThreshold = 42;
|
| -#else
|
| -const int QualityScaler::kLowH264QpThreshold = 24;
|
| -const int QualityScaler::kBadH264QpThreshold = 37;
|
| -#endif
|
| +// QP scaling threshold defaults:
|
| +static const int kLowH264QpThreshold = 24;
|
| +static const int kHighH264QpThreshold = 37;
|
| +// QP is obtained from VP8-bitstream for HW, so the QP corresponds to the
|
| +// bitstream range of [0, 127] and not the user-level range of [0,63].
|
| +static const int kLowVp8QpThreshold = 29;
|
| +static const int kHighVp8QpThreshold = 95;
|
| +} // namespace
|
|
|
| // Default values. Should immediately get set to something more sensible.
|
| QualityScaler::QualityScaler()
|
| @@ -61,19 +56,38 @@ QualityScaler::QualityScaler()
|
| framedrop_percent_(kMeasureSecondsUpscale * 30),
|
| low_qp_threshold_(-1) {}
|
|
|
| +void QualityScaler::Init(VideoCodecType codec_type,
|
| + int initial_bitrate_kbps,
|
| + int width,
|
| + int height,
|
| + int fps) {
|
| + int low = -1, high = -1;
|
| + switch (codec_type) {
|
| + case kVideoCodecH264:
|
| + low = kLowH264QpThreshold;
|
| + high = kHighH264QpThreshold;
|
| + break;
|
| + case kVideoCodecVP8:
|
| + low = kLowVp8QpThreshold;
|
| + high = kHighVp8QpThreshold;
|
| + break;
|
| + default:
|
| + RTC_NOTREACHED() << "Invalid codec type for QualityScaler.";
|
| + }
|
| + Init(low, high, initial_bitrate_kbps, width, height, fps);
|
| +}
|
| +
|
| void QualityScaler::Init(int low_qp_threshold,
|
| int high_qp_threshold,
|
| int initial_bitrate_kbps,
|
| int width,
|
| int height,
|
| int fps) {
|
| + ClearSamples();
|
| low_qp_threshold_ = low_qp_threshold;
|
| high_qp_threshold_ = high_qp_threshold;
|
| downscale_shift_ = 0;
|
| -
|
| fast_rampup_ = true;
|
| -
|
| - ClearSamples();
|
| ReportFramerate(fps);
|
|
|
| const int init_width = width;
|
|
|