webrtc/call/adaptation/video_source_restrictions_unittest.cc
Evan Shrubsole 3b6afeeed0 Add comparison methods for VideoSourceRestrictions
Bug: None
Change-Id: Ia67f39e9b17e37294462823dd6f6ca365c7fd46b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174700
Commit-Queue: Evan Shrubsole <eshr@google.com>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31182}
2020-05-07 13:27:13 +00:00

129 lines
5.6 KiB
C++

/*
* 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(absl::nullopt, absl::nullopt, 15.0);
const VideoSourceRestrictions kHd(kHdPixels, kHdPixels, absl::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, absl::nullopt,
absl::nullopt);
}
VideoSourceRestrictions RestrictionsFromMaxFrameRate(double max_frame_rate) {
return VideoSourceRestrictions(absl::nullopt, absl::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));
}
} // namespace webrtc