• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024, Alliance for Open Media. All rights reserved
3  *
4  * This source code is subject to the terms of the BSD 3-Clause Clear License
5  * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
6  * License was not distributed with this source code in the LICENSE file, you
7  * can obtain it at www.aomedia.org/license/software-license/bsd-3-c-c. If the
8  * Alliance for Open Media Patent License 1.0 was not distributed with this
9  * source code in the PATENTS file, you can obtain it at
10  * www.aomedia.org/license/patent.
11  */
12 #include "iamf/cli/channel_label.h"
13 
14 #include <optional>
15 #include <vector>
16 
17 #include "absl/status/status_matchers.h"
18 #include "gmock/gmock.h"
19 #include "gtest/gtest.h"
20 #include "iamf/obu/audio_element.h"
21 #include "iamf/obu/recon_gain_info_parameter_data.h"
22 
23 namespace iamf_tools {
24 namespace {
25 
26 using ::absl_testing::IsOk;
27 using ::absl_testing::IsOkAndHolds;
28 using ::testing::IsEmpty;
29 
30 using enum ChannelLabel::Label;
31 using enum ChannelAudioLayerConfig::ExpandedLoudspeakerLayout;
32 using enum ChannelAudioLayerConfig::LoudspeakerLayout;
33 
34 constexpr std::optional<ChannelAudioLayerConfig::ExpandedLoudspeakerLayout>
35     kNoExpandedLayout = std::nullopt;
36 using enum ChannelAudioLayerConfig::LoudspeakerLayout;
37 using enum ReconGainElement::ReconGainFlagBitmask;
38 
TEST(GetDemixedLabel,SucceedsForDemixedStereo)39 TEST(GetDemixedLabel, SucceedsForDemixedStereo) {
40   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kR2), IsOkAndHolds(kDemixedR2));
41 }
42 
TEST(GetDemixedLabel,SucceedsForDemixed3_1_2)43 TEST(GetDemixedLabel, SucceedsForDemixed3_1_2) {
44   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kL3), IsOkAndHolds(kDemixedL3));
45   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kR3), IsOkAndHolds(kDemixedR3));
46 }
47 
TEST(GetDemixedLabel,SucceedsForDemixed5_1_2)48 TEST(GetDemixedLabel, SucceedsForDemixed5_1_2) {
49   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kL5), IsOkAndHolds(kDemixedL5));
50   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kR5), IsOkAndHolds(kDemixedR5));
51   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kLs5), IsOkAndHolds(kDemixedLs5));
52   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kRs5), IsOkAndHolds(kDemixedRs5));
53   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kLtf2), IsOkAndHolds(kDemixedLtf2));
54   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kRtf2), IsOkAndHolds(kDemixedRtf2));
55 }
56 
TEST(GetDemixedLabel,SucceedsForDemixed7_1_4)57 TEST(GetDemixedLabel, SucceedsForDemixed7_1_4) {
58   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kL7), IsOkAndHolds(kDemixedL7));
59   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kR7), IsOkAndHolds(kDemixedR7));
60   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kLrs7), IsOkAndHolds(kDemixedLrs7));
61   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kRrs7), IsOkAndHolds(kDemixedRrs7));
62   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kLtb4), IsOkAndHolds(kDemixedLtb4));
63   EXPECT_THAT(ChannelLabel::GetDemixedLabel(kRtb4), IsOkAndHolds(kDemixedRtb4));
64 }
65 
TEST(GetDemixedLabel,InvalidForL2)66 TEST(GetDemixedLabel, InvalidForL2) {
67   EXPECT_FALSE(ChannelLabel::GetDemixedLabel(kL2).ok());
68 }
69 
TEST(GetDemixedLabel,InvalidForCentre)70 TEST(GetDemixedLabel, InvalidForCentre) {
71   EXPECT_FALSE(ChannelLabel::GetDemixedLabel(kCentre).ok());
72 }
73 
TEST(GetDemixedLabel,InvalidForLFE)74 TEST(GetDemixedLabel, InvalidForLFE) {
75   EXPECT_FALSE(ChannelLabel::GetDemixedLabel(kCentre).ok());
76 }
77 
TEST(GetDemixedLabel,InvalidForAmbisonics)78 TEST(GetDemixedLabel, InvalidForAmbisonics) {
79   EXPECT_FALSE(ChannelLabel::GetDemixedLabel(kA0).ok());
80 }
81 
TEST(AmbisonicsChannelNumberToLabel,SucceedsForZerothOrderAmbisonics)82 TEST(AmbisonicsChannelNumberToLabel, SucceedsForZerothOrderAmbisonics) {
83   constexpr int kFirstZerothOrderAmbisonicsChannel = 0;
84   EXPECT_THAT(ChannelLabel::AmbisonicsChannelNumberToLabel(
85                   kFirstZerothOrderAmbisonicsChannel),
86               IsOkAndHolds(kA0));
87 }
88 
TEST(AmbisonicsChannelNumberToLabel,SucceedsForFourthOrderAmbisonics)89 TEST(AmbisonicsChannelNumberToLabel, SucceedsForFourthOrderAmbisonics) {
90   constexpr int kFirstFourthOrderAmbisonicsChannel = 16;
91   constexpr int kLastFourthOrderAmbisonicsChannel = 24;
92   EXPECT_THAT(ChannelLabel::AmbisonicsChannelNumberToLabel(
93                   kFirstFourthOrderAmbisonicsChannel),
94               IsOkAndHolds(kA16));
95   EXPECT_THAT(ChannelLabel::AmbisonicsChannelNumberToLabel(
96                   kLastFourthOrderAmbisonicsChannel),
97               IsOkAndHolds(kA24));
98 }
99 
TEST(AmbisonicsChannelNumberToLabel,InvalidForFifthOrderAmbisonics)100 TEST(AmbisonicsChannelNumberToLabel, InvalidForFifthOrderAmbisonics) {
101   constexpr int kFirstFifthOrderAmbisonicsChannel = 25;
102   constexpr int kLastFifthOrderAmbisonicsChannel = 35;
103   EXPECT_FALSE(ChannelLabel::AmbisonicsChannelNumberToLabel(
104                    kFirstFifthOrderAmbisonicsChannel)
105                    .ok());
106   EXPECT_FALSE(ChannelLabel::AmbisonicsChannelNumberToLabel(
107                    kLastFifthOrderAmbisonicsChannel)
108                    .ok());
109 }
110 
TEST(AmbisonicsChannelNumberToLabel,InvalidForFourteenthOrderAmbisonics)111 TEST(AmbisonicsChannelNumberToLabel, InvalidForFourteenthOrderAmbisonics) {
112   constexpr int kFirstFourteenthOrderAmbisonicsChannel = 196;
113   constexpr int kLastFourteenthOrderAmbisonicsChannel = 224;
114   EXPECT_FALSE(ChannelLabel::AmbisonicsChannelNumberToLabel(
115                    kFirstFourteenthOrderAmbisonicsChannel)
116                    .ok());
117   EXPECT_FALSE(ChannelLabel::AmbisonicsChannelNumberToLabel(
118                    kLastFourteenthOrderAmbisonicsChannel)
119                    .ok());
120 }
121 
TEST(LookupEarChannelOrderFromScalableLoudspeakerLayout,SucceedsForChannelBasedLayout)122 TEST(LookupEarChannelOrderFromScalableLoudspeakerLayout,
123      SucceedsForChannelBasedLayout) {
124   EXPECT_THAT(ChannelLabel::LookupEarChannelOrderFromScalableLoudspeakerLayout(
125                   ChannelAudioLayerConfig::kLayoutMono, kNoExpandedLayout),
126               IsOk());
127 }
128 
TEST(LookupEarChannelOrderFromScalableLoudspeakerLayout,FailsForReservedLayouts10Through14)129 TEST(LookupEarChannelOrderFromScalableLoudspeakerLayout,
130      FailsForReservedLayouts10Through14) {
131   EXPECT_FALSE(ChannelLabel::LookupEarChannelOrderFromScalableLoudspeakerLayout(
132                    kLayoutReserved10, kNoExpandedLayout)
133                    .ok());
134   EXPECT_FALSE(ChannelLabel::LookupEarChannelOrderFromScalableLoudspeakerLayout(
135                    kLayoutReserved11, kNoExpandedLayout)
136                    .ok());
137   EXPECT_FALSE(ChannelLabel::LookupEarChannelOrderFromScalableLoudspeakerLayout(
138                    kLayoutReserved12, kNoExpandedLayout)
139                    .ok());
140   EXPECT_FALSE(ChannelLabel::LookupEarChannelOrderFromScalableLoudspeakerLayout(
141                    kLayoutReserved13, kNoExpandedLayout)
142                    .ok());
143   EXPECT_FALSE(ChannelLabel::LookupEarChannelOrderFromScalableLoudspeakerLayout(
144                    kLayoutReserved14, kNoExpandedLayout)
145                    .ok());
146 }
147 
TEST(LookupEarChannelOrderFromScalableLoudspeakerLayout,InvalidWhenExpandedLayoutIsInconsistent)148 TEST(LookupEarChannelOrderFromScalableLoudspeakerLayout,
149      InvalidWhenExpandedLayoutIsInconsistent) {
150   EXPECT_FALSE(ChannelLabel::LookupEarChannelOrderFromScalableLoudspeakerLayout(
151                    ChannelAudioLayerConfig::kLayoutExpanded, kNoExpandedLayout)
152                    .ok());
153 }
154 
155 struct ExpandedLayoutAndChannelOrderTestCase {
156   ChannelAudioLayerConfig::ExpandedLoudspeakerLayout expanded_layout;
157   std::vector<ChannelLabel::Label> ordered_labels;
158 };
159 
160 using LookupEarChannelOrderFromScalableLoudspeakerLayoutTest =
161     ::testing::TestWithParam<ExpandedLayoutAndChannelOrderTestCase>;
TEST_P(LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,HoldsExpectedValue)162 TEST_P(LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
163        HoldsExpectedValue) {
164   EXPECT_THAT(ChannelLabel::LookupEarChannelOrderFromScalableLoudspeakerLayout(
165                   kLayoutExpanded, GetParam().expanded_layout),
166               IsOkAndHolds(GetParam().ordered_labels));
167 }
168 
169 INSTANTIATE_TEST_SUITE_P(
170     ExpandedLayoutLFE, LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
171     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
172         {{kExpandedLayoutLFE,
173           {kOmitted, kOmitted, kOmitted, kLFE, kOmitted, kOmitted, kOmitted,
174            kOmitted, kOmitted, kOmitted, kOmitted, kOmitted}}}));
175 
176 INSTANTIATE_TEST_SUITE_P(
177     kExpandedLayoutStereoS,
178     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
179     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
180         {{kExpandedLayoutStereoS,
181           {kOmitted, kOmitted, kOmitted, kOmitted, kLs5, kRs5, kOmitted,
182            kOmitted, kOmitted, kOmitted}}}));
183 
184 INSTANTIATE_TEST_SUITE_P(
185     ExpandedLayoutStereoSS,
186     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
187     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
188         {{kExpandedLayoutStereoSS,
189           {kOmitted, kOmitted, kOmitted, kOmitted, kLss7, kRss7, kOmitted,
190            kOmitted, kOmitted, kOmitted, kOmitted, kOmitted}}}));
191 
192 INSTANTIATE_TEST_SUITE_P(
193     ExpandedLayoutStereoRS,
194     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
195     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
196         {{kExpandedLayoutStereoRS,
197           {kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kLrs7,
198            kRrs7, kOmitted, kOmitted, kOmitted, kOmitted}}}));
199 
200 INSTANTIATE_TEST_SUITE_P(
201     ExpandedLayoutStereoTF,
202     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
203     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
204         {{kExpandedLayoutStereoTF,
205           {kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
206            kOmitted, kLtf4, kRtf4, kOmitted, kOmitted}}}));
207 
208 INSTANTIATE_TEST_SUITE_P(
209     ExpandedLayoutStereoTB,
210     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
211     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
212         {{kExpandedLayoutStereoTB,
213           {kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
214            kOmitted, kOmitted, kOmitted, kLtb4, kRtb4}}}));
215 
216 INSTANTIATE_TEST_SUITE_P(
217     ExpandedLayoutStereoTop4Ch,
218     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
219     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
220         {{kExpandedLayoutTop4Ch,
221           {kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
222            kOmitted, kLtf4, kRtf4, kLtb4, kRtb4}}}));
223 
224 INSTANTIATE_TEST_SUITE_P(
225     ExpandedLayoutStereo9_1_6Ch,
226     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
227     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
228         {{kExpandedLayout9_1_6_ch,
229           {kFL, kFR, kFC, kLFE, kBL, kBR, kFLc, kFRc, kSiL, kSiR, kTpFL, kTpFR,
230            kTpBL, kTpBR, kTpSiL, kTpSiR}}}));
231 
232 INSTANTIATE_TEST_SUITE_P(
233     ExpandedLayoutStereoF,
234     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
235     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
236         {{kExpandedLayoutStereoF,
237           {kFL, kFR, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
238            kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
239            kOmitted}}}));
240 
241 INSTANTIATE_TEST_SUITE_P(
242     ExpandedLayoutStereoSi,
243     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
244     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
245         {{kExpandedLayoutStereoSi,
246           {kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
247            kOmitted, kSiL, kSiR, kOmitted, kOmitted, kOmitted, kOmitted,
248            kOmitted, kOmitted}}}));
249 
250 INSTANTIATE_TEST_SUITE_P(
251     ExpandedLayoutStereoTpSi,
252     LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
253     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
254         {{kExpandedLayoutStereoTpSi,
255           {kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
256            kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
257            kTpSiL, kTpSiR}}}));
258 
259 INSTANTIATE_TEST_SUITE_P(
260     ExpandedLayoutTp6ch, LookupEarChannelOrderFromScalableLoudspeakerLayoutTest,
261     ::testing::ValuesIn<ExpandedLayoutAndChannelOrderTestCase>(
262         {{kExpandedLayoutTop6Ch,
263           {kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted, kOmitted,
264            kOmitted, kOmitted, kOmitted, kTpFL, kTpFR, kTpBL, kTpBR, kTpSiL,
265            kTpSiR}}}));
266 
TEST(LookupLabelsToReconstructFromScalableLoudspeakerLayout,SucceedsForChannelBasedLayout)267 TEST(LookupLabelsToReconstructFromScalableLoudspeakerLayout,
268      SucceedsForChannelBasedLayout) {
269   EXPECT_THAT(
270       ChannelLabel::LookupLabelsToReconstructFromScalableLoudspeakerLayout(
271           kLayoutMono, kNoExpandedLayout),
272       IsOk());
273 }
274 
TEST(LookupLabelsToReconstructFromScalableLoudspeakerLayout,FailsForReservedLayouts10Through14)275 TEST(LookupLabelsToReconstructFromScalableLoudspeakerLayout,
276      FailsForReservedLayouts10Through14) {
277   EXPECT_FALSE(
278       ChannelLabel::LookupLabelsToReconstructFromScalableLoudspeakerLayout(
279           kLayoutReserved10, kNoExpandedLayout)
280           .ok());
281   EXPECT_FALSE(
282       ChannelLabel::LookupLabelsToReconstructFromScalableLoudspeakerLayout(
283           kLayoutReserved11, kNoExpandedLayout)
284           .ok());
285   EXPECT_FALSE(
286       ChannelLabel::LookupLabelsToReconstructFromScalableLoudspeakerLayout(
287           kLayoutReserved12, kNoExpandedLayout)
288           .ok());
289   EXPECT_FALSE(
290       ChannelLabel::LookupLabelsToReconstructFromScalableLoudspeakerLayout(
291           kLayoutReserved13, kNoExpandedLayout)
292           .ok());
293   EXPECT_FALSE(
294       ChannelLabel::LookupLabelsToReconstructFromScalableLoudspeakerLayout(
295           kLayoutReserved14, kNoExpandedLayout)
296           .ok());
297 }
298 
TEST(LookupLabelsToReconstructFromScalableLoudspeakerLayout,InvalidWhenExpandedLayoutIsInconsistent)299 TEST(LookupLabelsToReconstructFromScalableLoudspeakerLayout,
300      InvalidWhenExpandedLayoutIsInconsistent) {
301   EXPECT_FALSE(
302       ChannelLabel::LookupLabelsToReconstructFromScalableLoudspeakerLayout(
303           ChannelAudioLayerConfig::kLayoutExpanded, kNoExpandedLayout)
304           .ok());
305 }
306 
307 using LookupLabelsToReconstructFromScalableLoudspeakerLayout =
308     ::testing::TestWithParam<
309         ChannelAudioLayerConfig::ExpandedLoudspeakerLayout>;
TEST_P(LookupLabelsToReconstructFromScalableLoudspeakerLayout,ReturnsEmptySet)310 TEST_P(LookupLabelsToReconstructFromScalableLoudspeakerLayout,
311        ReturnsEmptySet) {
312   EXPECT_THAT(
313       ChannelLabel::LookupLabelsToReconstructFromScalableLoudspeakerLayout(
314           kLayoutExpanded, GetParam()),
315       IsOkAndHolds(IsEmpty()));
316 }
317 
318 INSTANTIATE_TEST_SUITE_P(
319     BaseEnhancedProfileExpandedLayoutsReturnEmptySet,
320     LookupLabelsToReconstructFromScalableLoudspeakerLayout,
321     ::testing::ValuesIn<ChannelAudioLayerConfig::ExpandedLoudspeakerLayout>(
322         {kExpandedLayoutLFE, kExpandedLayoutStereoS, kExpandedLayoutStereoSS,
323          kExpandedLayoutStereoRS, kExpandedLayoutStereoTF,
324          kExpandedLayoutStereoTB, kExpandedLayoutTop4Ch, kExpandedLayout3_0_ch,
325          kExpandedLayout9_1_6_ch, kExpandedLayoutStereoF,
326          kExpandedLayoutStereoSi, kExpandedLayoutStereoTpSi,
327          kExpandedLayoutTop6Ch}));
328 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForL3)329 TEST(GetDemixedChannelLabelForReconGain, SucceedsForL3) {
330   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayout3_1_2_ch,
331                                                                kReconGainFlagL),
332               IsOkAndHolds(kDemixedL3));
333 }
334 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForL5)335 TEST(GetDemixedChannelLabelForReconGain, SucceedsForL5) {
336   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayout5_1_ch,
337                                                                kReconGainFlagL),
338               IsOkAndHolds(kDemixedL5));
339 }
340 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForL7)341 TEST(GetDemixedChannelLabelForReconGain, SucceedsForL7) {
342   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayout7_1_2_ch,
343                                                                kReconGainFlagL),
344               IsOkAndHolds(kDemixedL7));
345 }
346 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForR2)347 TEST(GetDemixedChannelLabelForReconGain, SucceedsForR2) {
348   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayoutStereo,
349                                                                kReconGainFlagR),
350               IsOkAndHolds(kDemixedR2));
351 }
352 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForR3)353 TEST(GetDemixedChannelLabelForReconGain, SucceedsForR3) {
354   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayout3_1_2_ch,
355                                                                kReconGainFlagR),
356               IsOkAndHolds(kDemixedR3));
357 }
358 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForR5)359 TEST(GetDemixedChannelLabelForReconGain, SucceedsForR5) {
360   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayout5_1_ch,
361                                                                kReconGainFlagR),
362               IsOkAndHolds(kDemixedR5));
363 }
364 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForR7)365 TEST(GetDemixedChannelLabelForReconGain, SucceedsForR7) {
366   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayout7_1_2_ch,
367                                                                kReconGainFlagR),
368               IsOkAndHolds(kDemixedR7));
369 }
370 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForLs5)371 TEST(GetDemixedChannelLabelForReconGain, SucceedsForLs5) {
372   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(
373                   kLayout5_1_ch, kReconGainFlagLss),
374               IsOkAndHolds(kDemixedLs5));
375 }
376 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForRs5)377 TEST(GetDemixedChannelLabelForReconGain, SucceedsForRs5) {
378   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(
379                   kLayout5_1_ch, kReconGainFlagRss),
380               IsOkAndHolds(kDemixedRs5));
381 }
382 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForLtf2)383 TEST(GetDemixedChannelLabelForReconGain, SucceedsForLtf2) {
384   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(
385                   kLayout5_1_ch, kReconGainFlagLtf),
386               IsOkAndHolds(kDemixedLtf2));
387 }
388 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForRtf2)389 TEST(GetDemixedChannelLabelForReconGain, SucceedsForRtf2) {
390   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(
391                   kLayout5_1_ch, kReconGainFlagRtf),
392               IsOkAndHolds(kDemixedRtf2));
393 }
394 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForLrs7)395 TEST(GetDemixedChannelLabelForReconGain, SucceedsForLrs7) {
396   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(
397                   kLayout7_1_2_ch, kReconGainFlagLrs),
398               IsOkAndHolds(kDemixedLrs7));
399 }
400 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForRrs7)401 TEST(GetDemixedChannelLabelForReconGain, SucceedsForRrs7) {
402   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(
403                   kLayout7_1_2_ch, kReconGainFlagRrs),
404               IsOkAndHolds(kDemixedRrs7));
405 }
406 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForLtb4)407 TEST(GetDemixedChannelLabelForReconGain, SucceedsForLtb4) {
408   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(
409                   kLayout5_1_4_ch, kReconGainFlagLtb),
410               IsOkAndHolds(kDemixedLtb4));
411 }
412 
TEST(GetDemixedChannelLabelForReconGain,SucceedsForRtb4)413 TEST(GetDemixedChannelLabelForReconGain, SucceedsForRtb4) {
414   EXPECT_THAT(ChannelLabel::GetDemixedChannelLabelForReconGain(
415                   kLayout5_1_4_ch, kReconGainFlagRtb),
416               IsOkAndHolds(kDemixedRtb4));
417 }
418 
TEST(GetDemixedChannelLabelForReconGain,FailsForReconGainFlagC)419 TEST(GetDemixedChannelLabelForReconGain, FailsForReconGainFlagC) {
420   EXPECT_FALSE(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayoutStereo,
421                                                                 kReconGainFlagC)
422                    .ok());
423 }
424 
TEST(GetDemixedChannelLabelForReconGain,FailsForReconGainFlagLfe)425 TEST(GetDemixedChannelLabelForReconGain, FailsForReconGainFlagLfe) {
426   EXPECT_FALSE(ChannelLabel::GetDemixedChannelLabelForReconGain(
427                    kLayout5_1_ch, kReconGainFlagLfe)
428                    .ok());
429 }
430 
TEST(GetDemixedChannelLabelForReconGain,FailsForReconGainFlagLWithoutAppropriateLayout)431 TEST(GetDemixedChannelLabelForReconGain,
432      FailsForReconGainFlagLWithoutAppropriateLayout) {
433   EXPECT_FALSE(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayoutStereo,
434                                                                 kReconGainFlagL)
435                    .ok());
436 }
437 
TEST(GetDemixedChannelLabelForReconGain,FailsForReconGainFlagRWithoutAppropriateLayout)438 TEST(GetDemixedChannelLabelForReconGain,
439      FailsForReconGainFlagRWithoutAppropriateLayout) {
440   EXPECT_FALSE(ChannelLabel::GetDemixedChannelLabelForReconGain(kLayoutMono,
441                                                                 kReconGainFlagR)
442                    .ok());
443 }
444 
445 }  // namespace
446 }  // namespace iamf_tools
447