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