1 /*
2 * Copyright 2021 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "rtc_base/experiments/encoder_info_settings.h"
12
13 #include "rtc_base/gunit.h"
14 #include "test/field_trial.h"
15 #include "test/gmock.h"
16
17 namespace webrtc {
18
TEST(SimulcastEncoderAdapterSettingsTest,NoValuesWithoutFieldTrial)19 TEST(SimulcastEncoderAdapterSettingsTest, NoValuesWithoutFieldTrial) {
20 SimulcastEncoderAdapterEncoderInfoSettings settings;
21 EXPECT_EQ(absl::nullopt, settings.requested_resolution_alignment());
22 EXPECT_FALSE(settings.apply_alignment_to_all_simulcast_layers());
23 EXPECT_TRUE(settings.resolution_bitrate_limits().empty());
24 }
25
TEST(SimulcastEncoderAdapterSettingsTest,NoValueForInvalidAlignment)26 TEST(SimulcastEncoderAdapterSettingsTest, NoValueForInvalidAlignment) {
27 webrtc::test::ScopedFieldTrials field_trials(
28 "WebRTC-SimulcastEncoderAdapter-GetEncoderInfoOverride/"
29 "requested_resolution_alignment:0/");
30
31 SimulcastEncoderAdapterEncoderInfoSettings settings;
32 EXPECT_EQ(absl::nullopt, settings.requested_resolution_alignment());
33 }
34
TEST(SimulcastEncoderAdapterSettingsTest,GetResolutionAlignment)35 TEST(SimulcastEncoderAdapterSettingsTest, GetResolutionAlignment) {
36 webrtc::test::ScopedFieldTrials field_trials(
37 "WebRTC-SimulcastEncoderAdapter-GetEncoderInfoOverride/"
38 "requested_resolution_alignment:2/");
39
40 SimulcastEncoderAdapterEncoderInfoSettings settings;
41 EXPECT_EQ(2, settings.requested_resolution_alignment());
42 EXPECT_FALSE(settings.apply_alignment_to_all_simulcast_layers());
43 EXPECT_TRUE(settings.resolution_bitrate_limits().empty());
44 }
45
TEST(SimulcastEncoderAdapterSettingsTest,GetApplyAlignment)46 TEST(SimulcastEncoderAdapterSettingsTest, GetApplyAlignment) {
47 webrtc::test::ScopedFieldTrials field_trials(
48 "WebRTC-SimulcastEncoderAdapter-GetEncoderInfoOverride/"
49 "requested_resolution_alignment:3,"
50 "apply_alignment_to_all_simulcast_layers/");
51
52 SimulcastEncoderAdapterEncoderInfoSettings settings;
53 EXPECT_EQ(3, settings.requested_resolution_alignment());
54 EXPECT_TRUE(settings.apply_alignment_to_all_simulcast_layers());
55 EXPECT_TRUE(settings.resolution_bitrate_limits().empty());
56 }
57
TEST(SimulcastEncoderAdapterSettingsTest,GetResolutionBitrateLimits)58 TEST(SimulcastEncoderAdapterSettingsTest, GetResolutionBitrateLimits) {
59 webrtc::test::ScopedFieldTrials field_trials(
60 "WebRTC-SimulcastEncoderAdapter-GetEncoderInfoOverride/"
61 "frame_size_pixels:123,"
62 "min_start_bitrate_bps:11000,"
63 "min_bitrate_bps:44000,"
64 "max_bitrate_bps:77000/");
65
66 SimulcastEncoderAdapterEncoderInfoSettings settings;
67 EXPECT_EQ(absl::nullopt, settings.requested_resolution_alignment());
68 EXPECT_FALSE(settings.apply_alignment_to_all_simulcast_layers());
69 EXPECT_THAT(settings.resolution_bitrate_limits(),
70 ::testing::ElementsAre(VideoEncoder::ResolutionBitrateLimits{
71 123, 11000, 44000, 77000}));
72 }
73
TEST(SimulcastEncoderAdapterSettingsTest,GetResolutionBitrateLimitsWithList)74 TEST(SimulcastEncoderAdapterSettingsTest, GetResolutionBitrateLimitsWithList) {
75 webrtc::test::ScopedFieldTrials field_trials(
76 "WebRTC-SimulcastEncoderAdapter-GetEncoderInfoOverride/"
77 "frame_size_pixels:123|456|789,"
78 "min_start_bitrate_bps:11000|22000|33000,"
79 "min_bitrate_bps:44000|55000|66000,"
80 "max_bitrate_bps:77000|88000|99000/");
81
82 SimulcastEncoderAdapterEncoderInfoSettings settings;
83 EXPECT_THAT(
84 settings.resolution_bitrate_limits(),
85 ::testing::ElementsAre(
86 VideoEncoder::ResolutionBitrateLimits{123, 11000, 44000, 77000},
87 VideoEncoder::ResolutionBitrateLimits{456, 22000, 55000, 88000},
88 VideoEncoder::ResolutionBitrateLimits{789, 33000, 66000, 99000}));
89 }
90
TEST(EncoderSettingsTest,CommonSettingsUsedIfEncoderNameUnspecified)91 TEST(EncoderSettingsTest, CommonSettingsUsedIfEncoderNameUnspecified) {
92 webrtc::test::ScopedFieldTrials field_trials(
93 "WebRTC-VP8-GetEncoderInfoOverride/requested_resolution_alignment:2/"
94 "WebRTC-GetEncoderInfoOverride/requested_resolution_alignment:3/");
95
96 LibvpxVp8EncoderInfoSettings vp8_settings;
97 EXPECT_EQ(2, vp8_settings.requested_resolution_alignment());
98 LibvpxVp9EncoderInfoSettings vp9_settings;
99 EXPECT_EQ(3, vp9_settings.requested_resolution_alignment());
100 }
101
102 } // namespace webrtc
103