Skip to content

Commit 6601d5d

Browse files
Googlerjwcullen
authored andcommitted
Add support for DualCart16ParamDefinition in MixPresentationGenerator.
This change adds the necessary code to convert `DualCart16ParamDefinition` from the proto representation to the OBU struct representation within the `MixPresentationGenerator`. A new test case is added to verify the correct conversion of all fields. PiperOrigin-RevId: 844487379
1 parent bdec7e4 commit 6601d5d

File tree

4 files changed

+100
-0
lines changed

4 files changed

+100
-0
lines changed

iamf/cli/proto_conversion/proto_to_obu/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ cc_library(
161161
"//iamf/obu:types",
162162
"//iamf/obu/param_definitions:cart16_param_definition",
163163
"//iamf/obu/param_definitions:cart8_param_definition",
164+
"//iamf/obu/param_definitions:dual_cart16_param_definition",
164165
"//iamf/obu/param_definitions:dual_cart8_param_definition",
165166
"//iamf/obu/param_definitions:dual_polar_param_definition",
166167
"//iamf/obu/param_definitions:polar_param_definition",

iamf/cli/proto_conversion/proto_to_obu/mix_presentation_generator.cc

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include "iamf/obu/param_definitions.h"
4040
#include "iamf/obu/param_definitions/cart16_param_definition.h"
4141
#include "iamf/obu/param_definitions/cart8_param_definition.h"
42+
#include "iamf/obu/param_definitions/dual_cart16_param_definition.h"
4243
#include "iamf/obu/param_definitions/dual_cart8_param_definition.h"
4344
#include "iamf/obu/param_definitions/dual_polar_param_definition.h"
4445
#include "iamf/obu/param_definitions/polar_param_definition.h"
@@ -210,6 +211,32 @@ DualCart8ParamDefinition CreateDualCart8ParamDefinition(
210211
return param_definition;
211212
}
212213

214+
DualCart16ParamDefinition CreateDualCart16ParamDefinition(
215+
const iamf_tools_cli_proto::DualCart16ParamDefinition&
216+
input_param_definition) {
217+
DualCart16ParamDefinition param_definition;
218+
param_definition.parameter_id_ =
219+
input_param_definition.param_definition().parameter_id();
220+
param_definition.parameter_rate_ =
221+
input_param_definition.param_definition().parameter_rate();
222+
param_definition.param_definition_mode_ =
223+
input_param_definition.param_definition().param_definition_mode();
224+
param_definition.duration_ =
225+
input_param_definition.param_definition().duration();
226+
param_definition.constant_subblock_duration_ =
227+
input_param_definition.param_definition().constant_subblock_duration();
228+
param_definition.default_first_x_ = input_param_definition.default_first_x();
229+
param_definition.default_first_y_ = input_param_definition.default_first_y();
230+
param_definition.default_first_z_ = input_param_definition.default_first_z();
231+
param_definition.default_second_x_ =
232+
input_param_definition.default_second_x();
233+
param_definition.default_second_y_ =
234+
input_param_definition.default_second_y();
235+
param_definition.default_second_z_ =
236+
input_param_definition.default_second_z();
237+
return param_definition;
238+
}
239+
213240
absl::StatusOr<RenderingConfigParamDefinition>
214241
CreateRenderingConfigParamDefinition(
215242
const iamf_tools_cli_proto::RenderingConfigParamDefinition&
@@ -249,6 +276,14 @@ CreateRenderingConfigParamDefinition(
249276
CreateDualCart8ParamDefinition(input_rendering_config_param_definition
250277
.dual_cart8_param_definition()),
251278
/*param_definition_bytes=*/{});
279+
case PARAM_DEFINITION_TYPE_DUAL_CART_16:
280+
return RenderingConfigParamDefinition::Create(
281+
ParamDefinition::ParameterDefinitionType::
282+
kParameterDefinitionDualCart16,
283+
CreateDualCart16ParamDefinition(
284+
input_rendering_config_param_definition
285+
.dual_cart16_param_definition()),
286+
/*param_definition_bytes=*/{});
252287
default:
253288
return absl::InvalidArgumentError(absl::StrCat(
254289
"Unknown param_definition_type= ",

iamf/cli/proto_conversion/proto_to_obu/tests/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ cc_test(
162162
"//iamf/obu:types",
163163
"//iamf/obu/param_definitions:cart16_param_definition",
164164
"//iamf/obu/param_definitions:cart8_param_definition",
165+
"//iamf/obu/param_definitions:dual_cart16_param_definition",
165166
"//iamf/obu/param_definitions:dual_cart8_param_definition",
166167
"//iamf/obu/param_definitions:dual_polar_param_definition",
167168
"//iamf/obu/param_definitions:polar_param_definition",

iamf/cli/proto_conversion/proto_to_obu/tests/mix_presentation_generator_test.cc

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "iamf/obu/param_definitions.h"
3333
#include "iamf/obu/param_definitions/cart16_param_definition.h"
3434
#include "iamf/obu/param_definitions/cart8_param_definition.h"
35+
#include "iamf/obu/param_definitions/dual_cart16_param_definition.h"
3536
#include "iamf/obu/param_definitions/dual_cart8_param_definition.h"
3637
#include "iamf/obu/param_definitions/dual_polar_param_definition.h"
3738
#include "iamf/obu/param_definitions/polar_param_definition.h"
@@ -504,6 +505,68 @@ TEST(Generate, CopiesRenderingConfigWithDualCart8ParamDefinition) {
504505
.value());
505506
}
506507

508+
TEST(Generate, CopiesRenderingConfigWithDualCart16ParamDefinition) {
509+
MixPresentationObuMetadatas mix_presentation_metadata;
510+
FillMixPresentationMetadata(mix_presentation_metadata.Add());
511+
auto& first_rendering_config = *mix_presentation_metadata.at(0)
512+
.mutable_sub_mixes(0)
513+
->mutable_audio_elements(0)
514+
->mutable_rendering_config();
515+
first_rendering_config.set_headphones_rendering_mode(
516+
HEADPHONES_RENDERING_MODE_RESERVED_3);
517+
using iamf_tools_cli_proto::PARAM_DEFINITION_TYPE_DUAL_CART_16;
518+
auto& dual_cart16_param_definition =
519+
*first_rendering_config.add_rendering_config_param_definitions();
520+
dual_cart16_param_definition.set_param_definition_type(
521+
PARAM_DEFINITION_TYPE_DUAL_CART_16);
522+
auto& dual_cart16_param_definition_proto =
523+
*dual_cart16_param_definition.mutable_dual_cart16_param_definition();
524+
dual_cart16_param_definition_proto.mutable_param_definition()
525+
->set_parameter_id(1);
526+
dual_cart16_param_definition_proto.mutable_param_definition()
527+
->set_parameter_rate(16000);
528+
dual_cart16_param_definition_proto.mutable_param_definition()
529+
->set_param_definition_mode(1);
530+
dual_cart16_param_definition_proto.mutable_param_definition()->set_duration(
531+
1);
532+
dual_cart16_param_definition_proto.mutable_param_definition()
533+
->set_constant_subblock_duration(true);
534+
dual_cart16_param_definition_proto.set_default_first_x(1);
535+
dual_cart16_param_definition_proto.set_default_first_y(2);
536+
dual_cart16_param_definition_proto.set_default_first_z(3);
537+
dual_cart16_param_definition_proto.set_default_second_x(4);
538+
dual_cart16_param_definition_proto.set_default_second_y(5);
539+
dual_cart16_param_definition_proto.set_default_second_z(6);
540+
541+
DualCart16ParamDefinition expected_dual_cart16_param_definition;
542+
expected_dual_cart16_param_definition.parameter_id_ = 1;
543+
expected_dual_cart16_param_definition.parameter_rate_ = 16000;
544+
expected_dual_cart16_param_definition.param_definition_mode_ = 1;
545+
expected_dual_cart16_param_definition.duration_ = 1;
546+
expected_dual_cart16_param_definition.constant_subblock_duration_ = true;
547+
expected_dual_cart16_param_definition.default_first_x_ = 1;
548+
expected_dual_cart16_param_definition.default_first_y_ = 2;
549+
expected_dual_cart16_param_definition.default_first_z_ = 3;
550+
expected_dual_cart16_param_definition.default_second_x_ = 4;
551+
expected_dual_cart16_param_definition.default_second_y_ = 5;
552+
expected_dual_cart16_param_definition.default_second_z_ = 6;
553+
554+
MixPresentationGenerator generator(mix_presentation_metadata);
555+
std::list<MixPresentationObu> generated_obus;
556+
EXPECT_THAT(generator.Generate(kAppendBuildInformationTag, generated_obus),
557+
IsOk());
558+
const auto& generated_rendering_config =
559+
generated_obus.front().sub_mixes_[0].audio_elements[0].rendering_config;
560+
EXPECT_THAT(generated_rendering_config.rendering_config_param_definitions,
561+
testing::SizeIs(1));
562+
EXPECT_THAT(generated_rendering_config.rendering_config_param_definitions[0],
563+
RenderingConfigParamDefinition::Create(
564+
ParamDefinition::ParameterDefinitionType::
565+
kParameterDefinitionDualCart16,
566+
expected_dual_cart16_param_definition, {})
567+
.value());
568+
}
569+
507570
TEST(Generate, CopiesRenderingConfigExtension) {
508571
MixPresentationObuMetadatas mix_presentation_metadata;
509572
FillMixPresentationMetadata(mix_presentation_metadata.Add());

0 commit comments

Comments
 (0)