• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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