Make QualityScaler not downscale below QVGA.

Applies to all platforms, not only Android now, 160x90 video looks
awful and there's no real point to going below QVGA.

BUG=webrtc:5678
R=danilchap@webrtc.org
TBR=glaznev@webrtc.org

Review URL: https://codereview.webrtc.org/1867643003 .

Cr-Commit-Position: refs/heads/master@{#12362}
This commit is contained in:
Peter Boström
2016-04-14 14:48:10 +02:00
parent 139906dd2b
commit 926dfcdf5e
4 changed files with 22 additions and 49 deletions

View File

@ -32,6 +32,7 @@ static const int kLowInitialBitrateKbps = 300;
static const int kMeasureSecondsDownscale = 3;
static const int kMeasureSecondsFastUpscale = 2;
static const int kMeasureSecondsUpscale = 5;
static const int kMinDownscaleDimension = 140;
} // namespace
class QualityScalerTest : public ::testing::Test {
@ -200,7 +201,7 @@ void QualityScalerTest::ContinuouslyDownscalesByHalfDimensionsAndBackUp() {
int min_dimension = initial_min_dimension;
int current_shift = 0;
// Drop all frames to force-trigger downscaling.
while (min_dimension >= 2 * QualityScaler::kDefaultMinDownscaleDimension) {
while (min_dimension >= 2 * kMinDownscaleDimension) {
EXPECT_TRUE(TriggerScale(kScaleDown)) << "No downscale within "
<< kNumSeconds << " seconds.";
qs_.OnEncodeFrame(input_frame_);
@ -371,12 +372,12 @@ TEST_F(QualityScalerTest, ChangeSpatialSizeOnly) {
TEST_F(QualityScalerTest, DoesNotDownscaleBelow2xDefaultMinDimensionsWidth) {
DoesNotDownscaleFrameDimensions(
2 * QualityScaler::kDefaultMinDownscaleDimension - 1, 1000);
2 * kMinDownscaleDimension - 1, 1000);
}
TEST_F(QualityScalerTest, DoesNotDownscaleBelow2xDefaultMinDimensionsHeight) {
DoesNotDownscaleFrameDimensions(
1000, 2 * QualityScaler::kDefaultMinDownscaleDimension - 1);
1000, 2 * kMinDownscaleDimension - 1);
}
TEST_F(QualityScalerTest, DownscaleToVgaOnLowInitialBitrate) {
@ -480,36 +481,20 @@ void QualityScalerTest::DownscaleEndsAt(int input_width,
}
}
TEST_F(QualityScalerTest, DefaultDownscalesTo160x90) {
DownscaleEndsAt(320, 180, 160, 90);
TEST_F(QualityScalerTest, DownscalesTo320x180) {
DownscaleEndsAt(640, 360, 320, 180);
}
TEST_F(QualityScalerTest, DefaultDownscalesTo90x160) {
DownscaleEndsAt(180, 320, 90, 160);
TEST_F(QualityScalerTest, DownscalesTo180x320) {
DownscaleEndsAt(360, 640, 180, 320);
}
TEST_F(QualityScalerTest, DefaultDownscalesFrom1280x720To160x90) {
DownscaleEndsAt(1280, 720, 160, 90);
TEST_F(QualityScalerTest, DownscalesFrom1280x720To320x180) {
DownscaleEndsAt(1280, 720, 320, 180);
}
TEST_F(QualityScalerTest, DefaultDoesntDownscaleBelow160x90) {
DownscaleEndsAt(320 - 1, 180 - 1, 320 - 1, 180 - 1);
}
TEST_F(QualityScalerTest, DefaultDoesntDownscaleBelow90x160) {
DownscaleEndsAt(180 - 1, 320 - 1, 180 - 1, 320 - 1);
}
TEST_F(QualityScalerTest, RespectsMinResolutionWidth) {
// Should end at 200x100, as width can't go lower.
qs_.SetMinResolution(200, 10);
DownscaleEndsAt(1600, 800, 200, 100);
}
TEST_F(QualityScalerTest, RespectsMinResolutionHeight) {
// Should end at 100x200, as height can't go lower.
qs_.SetMinResolution(10, 200);
DownscaleEndsAt(800, 1600, 100, 200);
TEST_F(QualityScalerTest, DoesntDownscaleInitialQvga) {
DownscaleEndsAt(320, 180, 320, 180);
}
} // namespace webrtc