xref: /aosp_15_r20/external/webrtc/rtc_base/experiments/encoder_info_settings_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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