1 /*
2 * Copyright (c) 2023, 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/encoder_main_lib.h"
13
14 #include <cstdint>
15 #include <filesystem>
16 #include <string>
17
18 // [internal] Placeholder for get runfiles header.
19 #include "absl/log/log.h"
20 #include "absl/status/status.h"
21 #include "absl/status/status_matchers.h"
22 #include "absl/strings/string_view.h"
23 #include "gmock/gmock.h"
24 #include "gtest/gtest.h"
25 #include "iamf/cli/proto/codec_config.pb.h"
26 #include "iamf/cli/proto/ia_sequence_header.pb.h"
27 #include "iamf/cli/proto/test_vector_metadata.pb.h"
28 #include "iamf/cli/proto/user_metadata.pb.h"
29 #include "iamf/cli/tests/cli_test_utils.h"
30 #include "src/google/protobuf/text_format.h"
31
32 namespace iamf_tools {
33 namespace {
34
35 using ::absl_testing::IsOk;
36 constexpr absl::string_view kIgnoredOutputPath = "";
37
AddIaSequenceHeader(iamf_tools_cli_proto::UserMetadata & user_metadata)38 void AddIaSequenceHeader(iamf_tools_cli_proto::UserMetadata& user_metadata) {
39 ASSERT_TRUE(google::protobuf::TextFormat::ParseFromString(
40 R"pb(
41 primary_profile: PROFILE_VERSION_SIMPLE
42 additional_profile: PROFILE_VERSION_SIMPLE
43 )pb",
44 user_metadata.add_ia_sequence_header_metadata()));
45 }
46
AddCodecConfig(iamf_tools_cli_proto::UserMetadata & user_metadata)47 void AddCodecConfig(iamf_tools_cli_proto::UserMetadata& user_metadata) {
48 ASSERT_TRUE(google::protobuf::TextFormat::ParseFromString(
49 R"pb(
50 codec_config_id: 200
51 codec_config {
52 codec_id: CODEC_ID_LPCM
53 num_samples_per_frame: 64
54 audio_roll_distance: 0
55 decoder_config_lpcm {
56 sample_format_flags: LPCM_LITTLE_ENDIAN
57 sample_size: 16
58 sample_rate: 48000
59 }
60 }
61 )pb",
62 user_metadata.add_codec_config_metadata()));
63 }
64
TEST(EncoderMainLibTest,EmptyUserMetadataTestMainFails)65 TEST(EncoderMainLibTest, EmptyUserMetadataTestMainFails) {
66 EXPECT_FALSE(TestMain(iamf_tools_cli_proto::UserMetadata(), "", "").ok());
67 }
68
TEST(EncoderMainLibTest,IaSequenceHeaderOnly)69 TEST(EncoderMainLibTest, IaSequenceHeaderOnly) {
70 // Populate the user metadata with only an IA Sequence Header, leaving
71 // everything else empty. This will fail if
72 // `partition_mix_gain_parameter_blocks` is left true (the default value).
73 iamf_tools_cli_proto::UserMetadata user_metadata;
74 AddIaSequenceHeader(user_metadata);
75 EXPECT_FALSE(
76 TestMain(user_metadata, "", std::string(kIgnoredOutputPath)).ok());
77
78 // After setting `partition_mix_gain_parameter_blocks` to false, `TestMain()`
79 // will succeed.
80 user_metadata.mutable_test_vector_metadata()
81 ->set_partition_mix_gain_parameter_blocks(false);
82 EXPECT_THAT(TestMain(user_metadata, "", std::string(kIgnoredOutputPath)),
83 IsOk());
84 }
85
TEST(EncoderMainLibTest,IaSequenceHeaderAndCodecConfigSucceeds)86 TEST(EncoderMainLibTest, IaSequenceHeaderAndCodecConfigSucceeds) {
87 // Populate the user metadata with an IA Sequence Header AND a Codec Config,
88 // leaving everything else empty. This will succeed.
89 iamf_tools_cli_proto::UserMetadata user_metadata;
90 AddIaSequenceHeader(user_metadata);
91 AddCodecConfig(user_metadata);
92 EXPECT_THAT(TestMain(user_metadata, "", std::string(kIgnoredOutputPath)),
93 IsOk());
94 }
95
TEST(EncoderMainLibTest,ConfigureOutputWavFileBitDepthOverrideSucceeds)96 TEST(EncoderMainLibTest, ConfigureOutputWavFileBitDepthOverrideSucceeds) {
97 // Initialize prerequisites.
98 iamf_tools_cli_proto::UserMetadata user_metadata;
99 AddIaSequenceHeader(user_metadata);
100 user_metadata.mutable_test_vector_metadata()
101 ->set_partition_mix_gain_parameter_blocks(false);
102
103 // Configure a reasonable bit-depth to output to.
104 user_metadata.mutable_test_vector_metadata()
105 ->set_output_wav_file_bit_depth_override(16);
106
107 EXPECT_THAT(TestMain(user_metadata, "", std::string(kIgnoredOutputPath)),
108 IsOk());
109 }
110
TEST(EncoderMainLibTest,ConfigureOutputWavFileBitDepthOverrideHighSucceeds)111 TEST(EncoderMainLibTest, ConfigureOutputWavFileBitDepthOverrideHighSucceeds) {
112 // Initialize prerequisites.
113 iamf_tools_cli_proto::UserMetadata user_metadata;
114 AddIaSequenceHeader(user_metadata);
115 user_metadata.mutable_test_vector_metadata()
116 ->set_partition_mix_gain_parameter_blocks(false);
117
118 const uint32_t kBitDepthTooHigh = 256;
119 user_metadata.mutable_test_vector_metadata()
120 ->set_output_wav_file_bit_depth_override(kBitDepthTooHigh);
121
122 // If wav writing was enabled then the configuration would be clamped to a
123 // 32-bit file.
124 EXPECT_THAT(TestMain(user_metadata, "", std::string(kIgnoredOutputPath)),
125 IsOk());
126 }
127
TEST(EncoderMainLibTest,SettingPrefixOutputsFile)128 TEST(EncoderMainLibTest, SettingPrefixOutputsFile) {
129 iamf_tools_cli_proto::UserMetadata user_metadata;
130 AddIaSequenceHeader(user_metadata);
131 user_metadata.mutable_test_vector_metadata()
132 ->set_partition_mix_gain_parameter_blocks(false);
133
134 // Setting a filename prefix makes the function output a .iamf file.
135 user_metadata.mutable_test_vector_metadata()->set_file_name_prefix("empty");
136
137 const auto output_iamf_directory = GetAndCreateOutputDirectory("");
138
139 EXPECT_THAT(TestMain(user_metadata, "", output_iamf_directory), IsOk());
140
141 EXPECT_TRUE(std::filesystem::exists(
142 std::filesystem::path(output_iamf_directory) / "empty.iamf"));
143 }
144
TEST(EncoderMainLibTest,CreatesAndWritesToOutputIamfDirectory)145 TEST(EncoderMainLibTest, CreatesAndWritesToOutputIamfDirectory) {
146 iamf_tools_cli_proto::UserMetadata user_metadata;
147 AddIaSequenceHeader(user_metadata);
148 user_metadata.mutable_test_vector_metadata()
149 ->set_partition_mix_gain_parameter_blocks(false);
150
151 // Setting a filename prefix makes the function output a .iamf file.
152 user_metadata.mutable_test_vector_metadata()->set_file_name_prefix("empty");
153
154 // Create a clean output directory.
155 const auto test_directory_root = GetAndCreateOutputDirectory("");
156
157 // The encoder will create and write the file based on a (nested)
158 // `output_iamf_directory` argument.
159 const auto output_iamf_directory =
160 test_directory_root / std::filesystem::path("EncoderMainLibTest") /
161 std::filesystem::path("CreatesAndWritesToOutputIamfDirectory");
162
163 EXPECT_THAT(TestMain(user_metadata, "", output_iamf_directory.string()),
164 IsOk());
165
166 EXPECT_TRUE(std::filesystem::exists(output_iamf_directory / "empty.iamf"));
167 }
168
169 using TestVector = ::testing::TestWithParam<absl::string_view>;
170
171 // Validate the "is_valid" field in a test vector textproto file is consistent
172 // with the return value of `iamf_tools::TestMain()`.
TEST_P(TestVector,ValidateTestSuite)173 TEST_P(TestVector, ValidateTestSuite) {
174 // Get the location of test wav files.
175 const auto textproto_filename = GetParam();
176 static const auto input_wav_dir =
177 std::filesystem::current_path() / std::string("iamf/cli/testdata");
178
179 // Get the textproto to test.
180 const auto user_metadata_filename = std::filesystem::current_path() /
181 std::string("iamf/cli/testdata") /
182 textproto_filename;
183 iamf_tools_cli_proto::UserMetadata user_metadata;
184 ParseUserMetadataAssertSuccess(user_metadata_filename.string(),
185 user_metadata);
186
187 // Call encoder. Clear `file_name_prefix`; we only care about the status and
188 // not the output files.
189 user_metadata.mutable_test_vector_metadata()->clear_file_name_prefix();
190 LOG(INFO) << "Testing with " << textproto_filename;
191 const absl::Status result =
192 iamf_tools::TestMain(user_metadata, input_wav_dir.string().c_str(),
193 std::string(kIgnoredOutputPath));
194
195 // Check if the result matches the expected value in the protos.
196 if (user_metadata.test_vector_metadata().is_valid()) {
197 EXPECT_THAT(result, IsOk()) << "File= " << textproto_filename;
198 } else {
199 EXPECT_FALSE(result.ok()) << " File= " << textproto_filename;
200 }
201 }
202
203 // ---- Test Set 0 -----
204 INSTANTIATE_TEST_SUITE_P(InvalidTooLowTrim, TestVector,
205 testing::Values("test_000000_3.textproto"));
206
207 INSTANTIATE_TEST_SUITE_P(NopParamBlock, TestVector,
208 testing::Values("test_000002.textproto"));
209
210 INSTANTIATE_TEST_SUITE_P(NoTrimRequired, TestVector,
211 testing::Values("test_000005.textproto"));
212
213 INSTANTIATE_TEST_SUITE_P(UserRequestedTemporalDelimiters, TestVector,
214 testing::Values("test_000006.textproto"));
215
216 INSTANTIATE_TEST_SUITE_P(InvalidIASequenceHeaderIACode, TestVector,
217 testing::Values("test_000007.textproto"));
218
219 INSTANTIATE_TEST_SUITE_P(UserRequestedTrimAtEnd, TestVector,
220 testing::Values("test_000012.textproto"));
221
222 INSTANTIATE_TEST_SUITE_P(UserRequestedTrimAtStart, TestVector,
223 testing::Values("test_000013.textproto"));
224
225 INSTANTIATE_TEST_SUITE_P(OpusInvalidPreskip, TestVector,
226 testing::Values("test_000014.textproto"));
227
228 INSTANTIATE_TEST_SUITE_P(InvalidDanglingFromDescriptorParameterBlock,
229 TestVector, testing::Values("test_000015.textproto"));
230
231 INSTANTIATE_TEST_SUITE_P(InvalidParameterBlockNotFullCoveringEnd, TestVector,
232 testing::Values("test_000016.textproto"));
233
234 INSTANTIATE_TEST_SUITE_P(FullFrameTrimmedAtEnd, TestVector,
235 testing::Values("test_000017.textproto"));
236
237 INSTANTIATE_TEST_SUITE_P(ExplicitAudioSubstreamID, TestVector,
238 testing::Values("test_000018.textproto"));
239
240 INSTANTIATE_TEST_SUITE_P(ParameterBlockStream, TestVector,
241 testing::Values("test_000019.textproto"));
242
243 // Batch 3:
244 INSTANTIATE_TEST_SUITE_P(Opus20ms, TestVector,
245 testing::Values("test_000020.textproto"));
246
247 INSTANTIATE_TEST_SUITE_P(Opus40ms, TestVector,
248 testing::Values("test_000021.textproto"));
249
250 INSTANTIATE_TEST_SUITE_P(OpusInvalidRollDistance, TestVector,
251 testing::Values("test_000022.textproto"));
252
253 INSTANTIATE_TEST_SUITE_P(Opus5ms, TestVector,
254 testing::Values("test_000023.textproto"));
255
256 INSTANTIATE_TEST_SUITE_P(Opus60ms, TestVector,
257 testing::Values("test_000024.textproto"));
258
259 INSTANTIATE_TEST_SUITE_P(OpusInvalidVersion, TestVector,
260 testing::Values("test_000025.textproto"));
261
262 INSTANTIATE_TEST_SUITE_P(OpusInvalidOutputChannelCount, TestVector,
263 testing::Values("test_000026.textproto"));
264
265 INSTANTIATE_TEST_SUITE_P(OpusInvalidOutputGain, TestVector,
266 testing::Values("test_000027.textproto"));
267
268 INSTANTIATE_TEST_SUITE_P(OpusInvalidMappingFamily, TestVector,
269 testing::Values("test_000028.textproto"));
270
271 INSTANTIATE_TEST_SUITE_P(LPCMLittleEndian16Bit48kHz, TestVector,
272 testing::Values("test_000029.textproto"));
273
274 INSTANTIATE_TEST_SUITE_P(LPCMLittleEndian16Bit44100Hz, TestVector,
275 testing::Values("test_000030.textproto"));
276
277 INSTANTIATE_TEST_SUITE_P(LPCMLittleEndian24Bit48kHz, TestVector,
278 testing::Values("test_000031.textproto"));
279
280 INSTANTIATE_TEST_SUITE_P(Opus24kbps, TestVector,
281 testing::Values("test_000032.textproto"));
282
283 INSTANTIATE_TEST_SUITE_P(Opus96kbps, TestVector,
284 testing::Values("test_000033.textproto"));
285
286 INSTANTIATE_TEST_SUITE_P(OpusVoip, TestVector,
287 testing::Values("test_000034.textproto"));
288
289 INSTANTIATE_TEST_SUITE_P(OpusLowdelay, TestVector,
290 testing::Values("test_000035.textproto"));
291
292 INSTANTIATE_TEST_SUITE_P(LPCMLayout5_1, TestVector,
293 testing::Values("test_000036.textproto"));
294
295 INSTANTIATE_TEST_SUITE_P(Opus20Seconds, TestVector,
296 testing::Values("test_000037.textproto"));
297
298 INSTANTIATE_TEST_SUITE_P(FoaMonoLPCMInvalidOutputChannelCount, TestVector,
299 testing::Values("test_000040.textproto"));
300
301 INSTANTIATE_TEST_SUITE_P(FoaAsToaProjectionLPCM, TestVector,
302 testing::Values("test_000044.textproto"));
303
304 INSTANTIATE_TEST_SUITE_P(FoaProjectionOpusCoupledStereo, TestVector,
305 testing::Values("test_000048.textproto"));
306
307 INSTANTIATE_TEST_SUITE_P(OpusLayout5_1, TestVector,
308 testing::Values("test_000049.textproto"));
309
310 INSTANTIATE_TEST_SUITE_P(OpusFourLayerLayout7_1_4, TestVector,
311 testing::Values("test_000050.textproto"));
312
313 INSTANTIATE_TEST_SUITE_P(OpusThreeLayerLayout7_1_2, TestVector,
314 testing::Values("test_000051.textproto"));
315
316 INSTANTIATE_TEST_SUITE_P(OpusTwoLayerLayout3_1_2, TestVector,
317 testing::Values("test_000052.textproto"));
318
319 INSTANTIATE_TEST_SUITE_P(OpusTwoLayerLayout7_1, TestVector,
320 testing::Values("test_000053.textproto"));
321
322 INSTANTIATE_TEST_SUITE_P(OpusFourLayerLayout5_1_4, TestVector,
323 testing::Values("test_000054.textproto"));
324
325 INSTANTIATE_TEST_SUITE_P(OpusThreeLayerLayout5_1_2, TestVector,
326 testing::Values("test_000055.textproto"));
327
328 INSTANTIATE_TEST_SUITE_P(OpusTwoLayerLayout5_1, TestVector,
329 testing::Values("test_000056.textproto"));
330
331 INSTANTIATE_TEST_SUITE_P(MixTwoStereoAudioElements, TestVector,
332 testing::Values("test_000058.textproto"));
333
334 INSTANTIATE_TEST_SUITE_P(ExplicitReconGain, TestVector,
335 testing::Values("test_000059.textproto"));
336
337 INSTANTIATE_TEST_SUITE_P(TwoLanguageLabels, TestVector,
338 testing::Values("test_000060.textproto"));
339
340 INSTANTIATE_TEST_SUITE_P(ExplicitDemixing, TestVector,
341 testing::Values("test_000061.textproto"));
342
343 INSTANTIATE_TEST_SUITE_P(TwoAnchorElements, TestVector,
344 testing::Values("test_000062.textproto"));
345
346 INSTANTIATE_TEST_SUITE_P(InvalidDuplicateAnchorElements, TestVector,
347 testing::Values("test_000063.textproto"));
348
349 INSTANTIATE_TEST_SUITE_P(ThreeDbDefaultMixGain, TestVector,
350 testing::Values("test_000064.textproto"));
351
352 INSTANTIATE_TEST_SUITE_P(LPCMFOALinearMixGain, TestVector,
353 testing::Values("test_000065.textproto"));
354
355 INSTANTIATE_TEST_SUITE_P(LPCMFOABezierLinearMixGain, TestVector,
356 testing::Values("test_000066.textproto"));
357
358 INSTANTIATE_TEST_SUITE_P(RenderingConfigExtension, TestVector,
359 testing::Values("test_000067.textproto"));
360
361 INSTANTIATE_TEST_SUITE_P(ConstantSubblockDurationEdgeCase, TestVector,
362 testing::Values("test_000068.textproto"));
363
364 INSTANTIATE_TEST_SUITE_P(LPCM5_1_2To3_1_2, TestVector,
365 testing::Values("test_000069.textproto"));
366
367 INSTANTIATE_TEST_SUITE_P(LPCM7_1_4To7_1_2, TestVector,
368 testing::Values("test_000070.textproto"));
369
370 INSTANTIATE_TEST_SUITE_P(MixGainDifferentParamDefinitionModes, TestVector,
371 testing::Values("test_000071.textproto"));
372
373 INSTANTIATE_TEST_SUITE_P(BasicStereoFLAC, TestVector,
374 testing::Values("test_000072.textproto"));
375
376 // TODO(b/360376661): Re-enable this test once the msan issue is fixed.
377 // INSTANTIATE_TEST_SUITE_P(
378 // FLACLayout5_1, TestVector,
379 // testing::Values("test_000073.textproto"));
380
381 INSTANTIATE_TEST_SUITE_P(FoaMonoFLAC, TestVector,
382 testing::Values("test_000074.textproto"));
383
384 INSTANTIATE_TEST_SUITE_P(ToaMonoFLAC, TestVector,
385 testing::Values("test_000075.textproto"));
386
387 INSTANTIATE_TEST_SUITE_P(FrameAlignedAAC, TestVector,
388 testing::Values("test_000076.textproto"));
389
390 INSTANTIATE_TEST_SUITE_P(RedundantIASequenceHeaderAfter, TestVector,
391 testing::Values("test_000078.textproto"));
392
393 INSTANTIATE_TEST_SUITE_P(RedundantIASequenceHeaderBefore, TestVector,
394 testing::Values("test_000079.textproto"));
395
396 INSTANTIATE_TEST_SUITE_P(AppliedDefaultWNonzero, TestVector,
397 testing::Values("test_000080.textproto",
398 "test_000081.textproto"));
399
400 INSTANTIATE_TEST_SUITE_P(IgnoredDefaultWNonzero, TestVector,
401 testing::Values("test_000082.textproto"));
402
403 INSTANTIATE_TEST_SUITE_P(FoaMonoLPCMHeadphonesRenderingMode1, TestVector,
404 testing::Values("test_000083.textproto"));
405
406 INSTANTIATE_TEST_SUITE_P(FLACInvalidRollDistance, TestVector,
407 testing::Values("test_000084.textproto"));
408
409 INSTANTIATE_TEST_SUITE_P(LPCMInvalidRollDistance, TestVector,
410 testing::Values("test_000085.textproto"));
411
412 INSTANTIATE_TEST_SUITE_P(FOAAndTwoLayer_5_1_2, TestVector,
413 testing::Values("test_000086.textproto"));
414
415 INSTANTIATE_TEST_SUITE_P(StereoAndTwoLayer_5_1, TestVector,
416 testing::Values("test_000087.textproto"));
417
418 INSTANTIATE_TEST_SUITE_P(ParamDefinitionMode0ExplicitSubblockDurations,
419 TestVector, testing::Values("test_000088.textproto"));
420
421 INSTANTIATE_TEST_SUITE_P(Scalable7_1_4HeadphonesRenderingMode1, TestVector,
422 testing::Values("test_000089.textproto"));
423
424 INSTANTIATE_TEST_SUITE_P(NonFrameAlignedAAC, TestVector,
425 testing::Values("test_000090.textproto"));
426
427 INSTANTIATE_TEST_SUITE_P(AACInvalidRollDistance, TestVector,
428 testing::Values("test_000091.textproto"));
429
430 INSTANTIATE_TEST_SUITE_P(AACLayout5_1, TestVector,
431 testing::Values("test_000092.textproto"));
432
433 INSTANTIATE_TEST_SUITE_P(FoaMonoAAC, TestVector,
434 testing::Values("test_000093.textproto"));
435
436 INSTANTIATE_TEST_SUITE_P(ToaMonoAAC, TestVector,
437 testing::Values("test_000094.textproto"));
438
439 INSTANTIATE_TEST_SUITE_P(Scalable7_1_4LPCMBinauralLayout, TestVector,
440 testing::Values("test_000095.textproto"));
441
442 INSTANTIATE_TEST_SUITE_P(ToaMonoLPCMBinauralLayout, TestVector,
443 testing::Values("test_000096.textproto"));
444
445 INSTANTIATE_TEST_SUITE_P(LPCMLittleEndian32Bit16kHz, TestVector,
446 testing::Values("test_000097.textproto"));
447
448 INSTANTIATE_TEST_SUITE_P(Opus32BitInput, TestVector,
449 testing::Values("test_000098.textproto"));
450
451 // ---- Test Set 1 -----
452
453 INSTANTIATE_TEST_SUITE_P(ZoaMonoLPCM, TestVector,
454 testing::Values("test_000100.textproto"));
455
456 INSTANTIATE_TEST_SUITE_P(FoaMonoLPCMHeadphonesRenderingMode0, TestVector,
457 testing::Values("test_000038.textproto",
458 "test_000101.textproto"));
459
460 INSTANTIATE_TEST_SUITE_P(SoaMonoLPCM, TestVector,
461 testing::Values("test_000102.textproto"));
462
463 INSTANTIATE_TEST_SUITE_P(ToaMonoLPCM, TestVector,
464 testing::Values("test_000039.textproto",
465 "test_000103.textproto"));
466
467 INSTANTIATE_TEST_SUITE_P(ZoaProjectionLPCM, TestVector,
468 testing::Values("test_000104.textproto"));
469
470 INSTANTIATE_TEST_SUITE_P(FoaProjectionLPCM, TestVector,
471 testing::Values("test_000042.textproto",
472 "test_000105.textproto"));
473
474 INSTANTIATE_TEST_SUITE_P(SoaProjectionLPCM, TestVector,
475 testing::Values("test_000106.textproto"));
476
477 INSTANTIATE_TEST_SUITE_P(ToaProjectionLPCM, TestVector,
478 testing::Values("test_000043.textproto",
479 "test_000107.textproto"));
480 INSTANTIATE_TEST_SUITE_P(ZoaMonoOpus, TestVector,
481 testing::Values("test_000108.textproto"));
482
483 INSTANTIATE_TEST_SUITE_P(FoaMonoOpus, TestVector,
484 testing::Values("test_000045.textproto",
485 "test_000109.textproto"));
486
487 INSTANTIATE_TEST_SUITE_P(SoaMonoOpus, TestVector,
488 testing::Values("test_000110.textproto"));
489
490 INSTANTIATE_TEST_SUITE_P(ToaMonoOpus, TestVector,
491 testing::Values("test_000046.textproto",
492 "test_000111.textproto"));
493
494 INSTANTIATE_TEST_SUITE_P(ZoaProjectionOpus, TestVector,
495 testing::Values("test_000112.textproto"));
496
497 INSTANTIATE_TEST_SUITE_P(FoaProjectionOpus, TestVector,
498 testing::Values("test_000113.textproto"));
499
500 INSTANTIATE_TEST_SUITE_P(SoaProjectionOpus, TestVector,
501 testing::Values("test_000114.textproto"));
502
503 INSTANTIATE_TEST_SUITE_P(ToaProjectionOpus, TestVector,
504 testing::Values("test_000115.textproto"));
505
506 INSTANTIATE_TEST_SUITE_P(ReservedDescriptorAndTemporalUnitObus, TestVector,
507 testing::Values("test_000116.textproto"));
508
509 INSTANTIATE_TEST_SUITE_P(ObuExtensionFlag, TestVector,
510 testing::Values("test_000117.textproto"));
511
512 INSTANTIATE_TEST_SUITE_P(
513 SimpleMixWithOneAudioElementAndBaseMixWithTwoAudioElements, TestVector,
514 testing::Values("test_000118.textproto"));
515
516 INSTANTIATE_TEST_SUITE_P(InvalidCodecIdForSimpleProfile, TestVector,
517 testing::Values("test_000119.textproto"));
518
519 INSTANTIATE_TEST_SUITE_P(InvalidAudioElementTypeForSimpleProfile, TestVector,
520 testing::Values("test_000120.textproto"));
521
522 INSTANTIATE_TEST_SUITE_P(ReservedParameterTypeForSimpleProfile, TestVector,
523 testing::Values("test_000121.textproto"));
524
525 INSTANTIATE_TEST_SUITE_P(ReservedLoudspeakerLayoutAsFirstLayerForSimpleProfile,
526 TestVector, testing::Values("test_000122.textproto"));
527
528 INSTANTIATE_TEST_SUITE_P(
529 BaseMixWithTwelveChannelsAndBaseEnhancedMixWithTwentyEightChannels,
530 TestVector, testing::Values("test_000123.textproto"));
531
532 INSTANTIATE_TEST_SUITE_P(TwoSubmixes, TestVector,
533 testing::Values("test_000124.textproto"));
534
535 INSTANTIATE_TEST_SUITE_P(ReservedHeadphonesRenderingModeForSimpleProfile,
536 TestVector, testing::Values("test_000125.textproto"));
537
538 INSTANTIATE_TEST_SUITE_P(ReservedLayoutTypeForSimpleProfile, TestVector,
539 testing::Values("test_000126.textproto"));
540
541 INSTANTIATE_TEST_SUITE_P(InvalidTwoAudioElementsForSimpleProfile, TestVector,
542 testing::Values("test_000127.textproto"));
543
544 INSTANTIATE_TEST_SUITE_P(InvalidThreeAudioElementsForBaseProfile, TestVector,
545 testing::Values("test_000128.textproto"));
546
547 INSTANTIATE_TEST_SUITE_P(ReservedLoudspeakerLayoutAsSecondLayerForSimpleProfile,
548 TestVector, testing::Values("test_000129.textproto"));
549
550 INSTANTIATE_TEST_SUITE_P(ReservedAmbisonicsModeForSimpleProfile, TestVector,
551 testing::Values("test_000130.textproto"));
552
553 INSTANTIATE_TEST_SUITE_P(
554 ReservedLoudnessLayoutForSimpleProfileWhichIsDefinedInBaseEnahncedProfile,
555 TestVector, testing::Values("test_000131.textproto"));
556
557 INSTANTIATE_TEST_SUITE_P(
558 SimpleMixWithTwoChannelsAndBaseEnhancedMixWithTwentySevenChannels,
559 TestVector, testing::Values("test_000132.textproto"));
560
561 INSTANTIATE_TEST_SUITE_P(ParameterBlocksLongerDurationThanAudioFrames,
562 TestVector, testing::Values("test_000133.textproto"));
563
564 INSTANTIATE_TEST_SUITE_P(ExtensionsInIaSequenceHeader, TestVector,
565 testing::Values("test_000134.textproto"));
566
567 INSTANTIATE_TEST_SUITE_P(MultipleFramesTrimmedAtEnd, TestVector,
568 testing::Values("test_000135.textproto"));
569
570 INSTANTIATE_TEST_SUITE_P(InvalidInconsistentParamDefinitions, TestVector,
571 testing::Values("test_000136.textproto"));
572
573 // ---- Test Set 2 -----
574
575 INSTANTIATE_TEST_SUITE_P(BasicMonoLPCM, TestVector,
576 testing::Values("test_000200.textproto"));
577
578 INSTANTIATE_TEST_SUITE_P(BasicStereoLPCM, TestVector,
579 testing::Values("test_000003.textproto",
580 "test_000201.textproto"));
581
582 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer3_1_2, TestVector,
583 testing::Values("test_000202.textproto"));
584
585 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer5_1_0, TestVector,
586 testing::Values("test_000203.textproto"));
587
588 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer5_1_2, TestVector,
589 testing::Values("test_000204.textproto"));
590
591 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer5_1_4, TestVector,
592 testing::Values("test_000205.textproto"));
593
594 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer7_1_0, TestVector,
595 testing::Values("test_000206.textproto"));
596
597 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer7_1_2, TestVector,
598 testing::Values("test_000207.textproto"));
599
600 // `test_000208` and `test_000211` are functionally identical.
601 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer7_1_4, TestVector,
602 testing::Values("test_000208.textproto",
603 "test_000211.textproto"));
604
605 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer7_1_4DemixingParamDefinition, TestVector,
606 testing::Values("test_000209.textproto"));
607
608 INSTANTIATE_TEST_SUITE_P(LPCMOneLayer7_1_4DemixingParameterBlocks, TestVector,
609 testing::Values("test_000210.textproto"));
610
611 INSTANTIATE_TEST_SUITE_P(BasicMonoOpus, TestVector,
612 testing::Values("test_000212.textproto"));
613
614 INSTANTIATE_TEST_SUITE_P(BasicStereoOpus, TestVector,
615 testing::Values("test_000213.textproto"));
616
617 INSTANTIATE_TEST_SUITE_P(OpusOneLayer3_1_2, TestVector,
618 testing::Values("test_000214.textproto"));
619
620 INSTANTIATE_TEST_SUITE_P(OpusOneLayer5_1_0, TestVector,
621 testing::Values("test_000215.textproto"));
622
623 INSTANTIATE_TEST_SUITE_P(OpusOneLayer5_1_2, TestVector,
624 testing::Values("test_000216.textproto"));
625
626 INSTANTIATE_TEST_SUITE_P(OpusOneLayer5_1_4, TestVector,
627 testing::Values("test_000217.textproto"));
628
629 INSTANTIATE_TEST_SUITE_P(OpusOneLayer7_1_0, TestVector,
630 testing::Values("test_000218.textproto"));
631
632 INSTANTIATE_TEST_SUITE_P(OpusOneLayer7_1_2, TestVector,
633 testing::Values("test_000219.textproto"));
634
635 // `test_000220` and `test_000223` are functionally identical.
636 INSTANTIATE_TEST_SUITE_P(OpusOneLayer7_1_4, TestVector,
637 testing::Values("test_000220.textproto",
638 "test_000223.textproto"));
639
640 INSTANTIATE_TEST_SUITE_P(OpusOneLayer7_1_4DemixingParamDefinition, TestVector,
641 testing::Values("test_000221.textproto"));
642
643 INSTANTIATE_TEST_SUITE_P(OpusOneLayer7_1_4DemixingParameterBlocks, TestVector,
644 testing::Values("test_000222.textproto"));
645
646 INSTANTIATE_TEST_SUITE_P(LPCMTwoLayer5_1_2, TestVector,
647 testing::Values("test_000224.textproto"));
648
649 INSTANTIATE_TEST_SUITE_P(LPCMThreeLayer7_1_4, TestVector,
650 testing::Values("test_000225.textproto"));
651
652 INSTANTIATE_TEST_SUITE_P(LPCMTwoLayer7_1_4, TestVector,
653 testing::Values("test_000226.textproto"));
654
655 INSTANTIATE_TEST_SUITE_P(OpusTwoLayer5_1_2ReconGain, TestVector,
656 testing::Values("test_000227.textproto"));
657
658 INSTANTIATE_TEST_SUITE_P(OpusThreeLayer7_1_4ReconGain, TestVector,
659 testing::Values("test_000228.textproto"));
660
661 INSTANTIATE_TEST_SUITE_P(OpusTwoLayer7_1_4ReconGain, TestVector,
662 testing::Values("test_000229.textproto"));
663
664 INSTANTIATE_TEST_SUITE_P(OpusThreeLayer5_1ReconGain, TestVector,
665 testing::Values("test_000230.textproto"));
666
667 INSTANTIATE_TEST_SUITE_P(LPCMBigEndian32Bit48kHz, TestVector,
668 testing::Values("test_000231.textproto"));
669
670 // ---- Test Set 3 -----
671
672 INSTANTIATE_TEST_SUITE_P(LPCMFOAStereoMix, TestVector,
673 testing::Values("test_000300.textproto"));
674
675 INSTANTIATE_TEST_SUITE_P(LPCMSOAStereoMix, TestVector,
676 testing::Values("test_000301.textproto"));
677
678 INSTANTIATE_TEST_SUITE_P(LPCMTOAStereoMix, TestVector,
679 testing::Values("test_000302.textproto"));
680
681 INSTANTIATE_TEST_SUITE_P(OpusFOAStereoMix, TestVector,
682 testing::Values("test_000303.textproto"));
683
684 INSTANTIATE_TEST_SUITE_P(OpusSOAStereoMix, TestVector,
685 testing::Values("test_000304.textproto"));
686
687 INSTANTIATE_TEST_SUITE_P(OpusTOAStereoMix, TestVector,
688 testing::Values("test_000305.textproto"));
689
690 // ---- Test Set 4 -----
691
692 INSTANTIATE_TEST_SUITE_P(LPCMStereoStereoMix, TestVector,
693 testing::Values("test_000400.textproto"));
694
695 INSTANTIATE_TEST_SUITE_P(LPCMStereo3_1_2Mix, TestVector,
696 testing::Values("test_000401.textproto"));
697
698 INSTANTIATE_TEST_SUITE_P(LPCMStereo5_1Mix, TestVector,
699 testing::Values("test_000402.textproto"));
700
701 INSTANTIATE_TEST_SUITE_P(OpusStereoStereoMix, TestVector,
702 testing::Values("test_000403.textproto"));
703
704 INSTANTIATE_TEST_SUITE_P(OpusStereo3_1_2Mix, TestVector,
705 testing::Values("test_000404.textproto"));
706
707 INSTANTIATE_TEST_SUITE_P(OpusStereo5_1Mix, TestVector,
708 testing::Values("test_000405.textproto"));
709
710 INSTANTIATE_TEST_SUITE_P(LPCMStereoLinearMixGain, TestVector,
711 testing::Values("test_000406.textproto"));
712
713 INSTANTIATE_TEST_SUITE_P(LPCMStereoStereoMixBezierGain, TestVector,
714 testing::Values("test_000407.textproto"));
715
716 INSTANTIATE_TEST_SUITE_P(LPCMStereoStereoMixTwoSubblocks, TestVector,
717 testing::Values("test_000408.textproto"));
718
719 INSTANTIATE_TEST_SUITE_P(TwoMixPresentations, TestVector,
720 testing::Values("test_000409.textproto"));
721
722 // ---- Test Set 5 -----
723
724 INSTANTIATE_TEST_SUITE_P(FoaMonoMixedOrder, TestVector,
725 testing::Values("test_000500.textproto"));
726
727 INSTANTIATE_TEST_SUITE_P(ReservedDescriptorObu, TestVector,
728 testing::Values("test_000501.textproto"));
729
730 INSTANTIATE_TEST_SUITE_P(InvalidNumSubMixes, TestVector,
731 testing::Values("test_000502.textproto"));
732
733 INSTANTIATE_TEST_SUITE_P(LayoutExtension, TestVector,
734 testing::Values("test_000503.textproto"));
735
736 // ---- Test Set 6 -----
737
738 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6And3_0Ch, TestVector,
739 testing::Values("test_000600.textproto"));
740
741 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndTop4Ch, TestVector,
742 testing::Values("test_000601.textproto"));
743
744 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndTop6Ch, TestVector,
745 testing::Values("test_000602.textproto"));
746
747 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndLFE, TestVector,
748 testing::Values("test_000603.textproto"));
749
750 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndStereoS, TestVector,
751 testing::Values("test_000604.textproto"));
752
753 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndStereoSS, TestVector,
754 testing::Values("test_000605.textproto"));
755
756 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndStereoRS, TestVector,
757 testing::Values("test_000606.textproto"));
758
759 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndStereoTF, TestVector,
760 testing::Values("test_000607.textproto"));
761
762 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndStereoTB, TestVector,
763 testing::Values("test_000608.textproto"));
764
765 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayout9_1_6AndStereoF, TestVector,
766 testing::Values("test_000609.textproto"));
767
768 INSTANTIATE_TEST_SUITE_P(MixOfZerothOrderAmbisonicsAndTop4Ch, TestVector,
769 testing::Values("test_000610.textproto"));
770
771 INSTANTIATE_TEST_SUITE_P(MixOfFirstOrderAmbisonicsAndStereoF, TestVector,
772 testing::Values("test_000611.textproto"));
773
774 INSTANTIATE_TEST_SUITE_P(MixOfSecondOrderAmbisonicsAndStereoSi, TestVector,
775 testing::Values("test_000612.textproto"));
776
777 INSTANTIATE_TEST_SUITE_P(MixOfThirdOrderAmbisonicsAndStereoTpSi, TestVector,
778 testing::Values("test_000613.textproto"));
779
780 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAnd3_0Ch, TestVector,
781 testing::Values("test_000614.textproto"));
782
783 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndTop4Ch, TestVector,
784 testing::Values("test_000615.textproto"));
785
786 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndTop6Ch, TestVector,
787 testing::Values("test_000616.textproto"));
788
789 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndLFE, TestVector,
790 testing::Values("test_000617.textproto"));
791
792 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndStereoS, TestVector,
793 testing::Values("test_000618.textproto"));
794
795 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndStereoSS, TestVector,
796 testing::Values("test_000619.textproto"));
797
798 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndStereoRS, TestVector,
799 testing::Values("test_000620.textproto"));
800
801 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndStereoTF, TestVector,
802 testing::Values("test_000621.textproto"));
803
804 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndStereoTB, TestVector,
805 testing::Values("test_000622.textproto"));
806
807 INSTANTIATE_TEST_SUITE_P(MixOfFourthOrderAmbisonicsAndStereoF, TestVector,
808 testing::Values("test_000623.textproto"));
809
810 INSTANTIATE_TEST_SUITE_P(MixOf7_1_4And3_0Ch, TestVector,
811 testing::Values("test_000624.textproto"));
812
813 INSTANTIATE_TEST_SUITE_P(MixOf7_1_4AndTop4Ch, TestVector,
814 testing::Values("test_000625.textproto"));
815
816 INSTANTIATE_TEST_SUITE_P(MixOf7_1_4AndLFE, TestVector,
817 testing::Values("test_000626.textproto"));
818
819 INSTANTIATE_TEST_SUITE_P(MixOf7_1_4AndStereoSS, TestVector,
820 testing::Values("test_000627.textproto"));
821
822 INSTANTIATE_TEST_SUITE_P(MixOf7_1_4AndStereoRS, TestVector,
823 testing::Values("test_000628.textproto"));
824
825 INSTANTIATE_TEST_SUITE_P(MixOf7_1_4AndStereoTF, TestVector,
826 testing::Values("test_000629.textproto"));
827
828 INSTANTIATE_TEST_SUITE_P(MixOf7_1_4AndStereoTB, TestVector,
829 testing::Values("test_000630.textproto"));
830
831 INSTANTIATE_TEST_SUITE_P(MixOf5_1_4AndStereoS, TestVector,
832 testing::Values("test_000631.textproto"));
833
834 INSTANTIATE_TEST_SUITE_P(MixOfThirdOrderAmbisonicsAndLFE, TestVector,
835 testing::Values("test_000632.textproto"));
836
837 INSTANTIATE_TEST_SUITE_P(MixOfThirdOrderAmbisonicsAndTop6Ch, TestVector,
838 testing::Values("test_000633.textproto"));
839
840 // ---- Test Set 7 -----
841
842 INSTANTIATE_TEST_SUITE_P(MixOfThreeAudioElementsWithTwentyEightChannels,
843 TestVector, testing::Values("test_000700.textproto"));
844
845 INSTANTIATE_TEST_SUITE_P(MixOfThreeAudioElements, TestVector,
846 testing::Values("test_000701.textproto"));
847
848 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayoutsToCompose7_1_4, TestVector,
849 testing::Values("test_000702.textproto"));
850
851 INSTANTIATE_TEST_SUITE_P(MixOfExpandedLayoutsToCompose9_1_6, TestVector,
852 testing::Values("test_000703.textproto"));
853
854 INSTANTIATE_TEST_SUITE_P(OneMixPresentationWithContentLanguageTag, TestVector,
855 testing::Values("test_000704.textproto"));
856
857 INSTANTIATE_TEST_SUITE_P(
858 SeveralMixPresentationsWithContentLanguageTagChannelBased, TestVector,
859 testing::Values("test_000705.textproto"));
860
861 INSTANTIATE_TEST_SUITE_P(
862 SeveralMixPresentationsWithContentLanguageTagAmbisonicsBased, TestVector,
863 testing::Values("test_000706.textproto"));
864
865 INSTANTIATE_TEST_SUITE_P(MixOfTwentyEightAudioElements, TestVector,
866 testing::Values("test_000707.textproto"));
867
868 INSTANTIATE_TEST_SUITE_P(MixOf7_1_4AndThirdOrderAmbisonics, TestVector,
869 testing::Values("test_000708.textproto"));
870
871 INSTANTIATE_TEST_SUITE_P(InvalidWithProfile255, TestVector,
872 testing::Values("test_000709.textproto"));
873
874 INSTANTIATE_TEST_SUITE_P(InvalidWithMoreThanTwentyEightAudioElements,
875 TestVector, testing::Values("test_000710.textproto"));
876
877 INSTANTIATE_TEST_SUITE_P(InvalidWithMoreThanTwentyEightChannels, TestVector,
878 testing::Values("test_000711.textproto"));
879
880 INSTANTIATE_TEST_SUITE_P(BaseEnhancedProfileWithTemporalUnitObus, TestVector,
881 testing::Values("test_000712.textproto"));
882
883 // TODO(b/308385831): Add more tests.
884
885 } // namespace
886 } // namespace iamf_tools
887