blob: 1205332fc5c68de6ab1f463a0ca830077395df7e [file] [log] [blame]
/*
* Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "call/adaptation/video_source_restrictions.h"
#include "test/gtest.h"
namespace webrtc {
namespace {
const size_t kHdPixels = 1280 * 720;
const VideoSourceRestrictions kUnlimited;
const VideoSourceRestrictions k15fps(std::nullopt, std::nullopt, 15.0);
const VideoSourceRestrictions kHd(kHdPixels, kHdPixels, std::nullopt);
const VideoSourceRestrictions kHd15fps(kHdPixels, kHdPixels, 15.0);
const VideoSourceRestrictions kVga7fps(kHdPixels / 2, kHdPixels / 2, 7.0);
VideoSourceRestrictions RestrictionsFromMaxPixelsPerFrame(
size_t max_pixels_per_frame) {
return VideoSourceRestrictions(max_pixels_per_frame, std::nullopt,
std::nullopt);
}
VideoSourceRestrictions RestrictionsFromMaxFrameRate(double max_frame_rate) {
return VideoSourceRestrictions(std::nullopt, std::nullopt, max_frame_rate);
}
} // namespace
TEST(VideoSourceRestrictionsTest, DidIncreaseResolution) {
// smaller restrictions -> larger restrictions
EXPECT_TRUE(DidIncreaseResolution(RestrictionsFromMaxPixelsPerFrame(10),
RestrictionsFromMaxPixelsPerFrame(11)));
// unrestricted -> restricted
EXPECT_FALSE(DidIncreaseResolution(VideoSourceRestrictions(),
RestrictionsFromMaxPixelsPerFrame(10)));
// restricted -> unrestricted
EXPECT_TRUE(DidIncreaseResolution(RestrictionsFromMaxPixelsPerFrame(10),
VideoSourceRestrictions()));
// restricted -> equally restricted
EXPECT_FALSE(DidIncreaseResolution(RestrictionsFromMaxPixelsPerFrame(10),
RestrictionsFromMaxPixelsPerFrame(10)));
// unrestricted -> unrestricted
EXPECT_FALSE(DidIncreaseResolution(VideoSourceRestrictions(),
VideoSourceRestrictions()));
// larger restrictions -> smaller restrictions
EXPECT_FALSE(DidIncreaseResolution(RestrictionsFromMaxPixelsPerFrame(10),
RestrictionsFromMaxPixelsPerFrame(9)));
}
TEST(VideoSourceRestrictionsTest, DidDecreaseFrameRate) {
// samller restrictions -> larger restrictions
EXPECT_FALSE(DidDecreaseFrameRate(RestrictionsFromMaxFrameRate(10),
RestrictionsFromMaxFrameRate(11)));
// unrestricted -> restricted
EXPECT_TRUE(DidDecreaseFrameRate(VideoSourceRestrictions(),
RestrictionsFromMaxFrameRate(10)));
// restricted -> unrestricted
EXPECT_FALSE(DidDecreaseFrameRate(RestrictionsFromMaxFrameRate(10),
VideoSourceRestrictions()));
// restricted -> equally restricted
EXPECT_FALSE(DidDecreaseFrameRate(RestrictionsFromMaxFrameRate(10),
RestrictionsFromMaxFrameRate(10)));
// unrestricted -> unrestricted
EXPECT_FALSE(DidDecreaseFrameRate(VideoSourceRestrictions(),
VideoSourceRestrictions()));
// larger restrictions -> samller restrictions
EXPECT_TRUE(DidDecreaseFrameRate(RestrictionsFromMaxFrameRate(10),
RestrictionsFromMaxFrameRate(9)));
}
TEST(VideoSourceRestrictionsTest, DidRestrictionsChangeFalseForSame) {
EXPECT_FALSE(DidRestrictionsDecrease(kUnlimited, kUnlimited));
EXPECT_FALSE(DidRestrictionsIncrease(kUnlimited, kUnlimited));
// Both resolution and fps restricted.
EXPECT_FALSE(DidRestrictionsDecrease(kHd15fps, kHd15fps));
EXPECT_FALSE(DidRestrictionsIncrease(kHd15fps, kHd15fps));
}
TEST(VideoSourceRestrictions,
DidRestrictionsIncreaseTrueWhenPixelsOrFrameRateDecreased) {
// Unlimited > Limited resolution.
EXPECT_TRUE(DidRestrictionsIncrease(kUnlimited, kHd));
// Unlimited > limited fps.
EXPECT_TRUE(DidRestrictionsIncrease(kUnlimited, k15fps));
// Unlimited > limited resolution + limited fps.
EXPECT_TRUE(DidRestrictionsIncrease(kUnlimited, kHd15fps));
// Limited resolution > limited resolution + limited fps.
EXPECT_TRUE(DidRestrictionsIncrease(kHd, kHd15fps));
// Limited fps > limited resolution + limited fps.
EXPECT_TRUE(DidRestrictionsIncrease(k15fps, kHd15fps));
// Limited resolution + fps > More limited resolution + more limited fps
EXPECT_TRUE(DidRestrictionsIncrease(kHd15fps, kVga7fps));
}
TEST(VideoSourceRestrictions,
DidRestrictionsDecreaseTrueWhenPixelsOrFrameRateIncreased) {
// Limited resolution < Unlimited.
EXPECT_TRUE(DidRestrictionsDecrease(kHd, kUnlimited));
// Limited fps < Unlimited.
EXPECT_TRUE(DidRestrictionsDecrease(k15fps, kUnlimited));
// Limited resolution + limited fps < unlimited.
EXPECT_TRUE(DidRestrictionsDecrease(kHd15fps, kUnlimited));
// Limited resolution + limited fps < limited resolution.
EXPECT_TRUE(DidRestrictionsDecrease(kHd15fps, kHd));
// Limited resolution + limited fps < limited fps.
EXPECT_TRUE(DidRestrictionsDecrease(kHd15fps, k15fps));
// More limited resolution + more limited fps < limited resolution + fps
EXPECT_TRUE(DidRestrictionsDecrease(kVga7fps, kHd15fps));
}
TEST(VideoSourceRestrictions,
DidRestrictionsChangeFalseWhenFrameRateAndPixelsChangeDifferently) {
// One changed framerate, the other resolution; not an increase or decrease.
EXPECT_FALSE(DidRestrictionsIncrease(kHd, k15fps));
EXPECT_FALSE(DidRestrictionsDecrease(kHd, k15fps));
}
TEST(VideoSourceRestrictions, UpdateMin) {
VideoSourceRestrictions one(kHdPixels / 2, kHdPixels, 7.0);
VideoSourceRestrictions two(kHdPixels, kHdPixels / 3, 15.0);
one.UpdateMin(two);
EXPECT_EQ(one.max_pixels_per_frame(), kHdPixels / 2);
EXPECT_EQ(one.target_pixels_per_frame(), kHdPixels / 3);
EXPECT_EQ(one.max_frame_rate(), 7.0);
two.UpdateMin(one);
EXPECT_EQ(two.max_pixels_per_frame(), kHdPixels / 2);
EXPECT_EQ(two.target_pixels_per_frame(), kHdPixels / 3);
EXPECT_EQ(two.max_frame_rate(), 7.0);
}
} // namespace webrtc