Skip to content

Commit 0d623ce

Browse files
Googlerjwcullen
authored andcommitted
Add support for Cart16ParamDefinition in MixPresentationGenerator.
Implements `CreateCart16ParamDefinition` to convert from the proto representation to the OBU struct. Integrates Cart16ParamDefinition into the `CreateRenderingConfigParamDefinition` function. Adds a unit test to ensure correct conversion of Cart16ParamDefinition within a RenderingConfig. PiperOrigin-RevId: 843818261
1 parent 19963a0 commit 0d623ce

File tree

4 files changed

+83
-0
lines changed

4 files changed

+83
-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
@@ -159,6 +159,7 @@ cc_library(
159159
"//iamf/obu:mix_presentation",
160160
"//iamf/obu:param_definitions",
161161
"//iamf/obu:types",
162+
"//iamf/obu/param_definitions:cart16_param_definition",
162163
"//iamf/obu/param_definitions:cart8_param_definition",
163164
"//iamf/obu/param_definitions:dual_polar_param_definition",
164165
"//iamf/obu/param_definitions:polar_param_definition",

iamf/cli/proto_conversion/proto_to_obu/mix_presentation_generator.cc

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "iamf/common/utils/validation_utils.h"
3838
#include "iamf/obu/mix_presentation.h"
3939
#include "iamf/obu/param_definitions.h"
40+
#include "iamf/obu/param_definitions/cart16_param_definition.h"
4041
#include "iamf/obu/param_definitions/cart8_param_definition.h"
4142
#include "iamf/obu/param_definitions/dual_polar_param_definition.h"
4243
#include "iamf/obu/param_definitions/polar_param_definition.h"
@@ -134,6 +135,25 @@ Cart8ParamDefinition CreateCart8ParamDefinition(
134135
return param_definition;
135136
}
136137

138+
Cart16ParamDefinition CreateCart16ParamDefinition(
139+
const iamf_tools_cli_proto::Cart16ParamDefinition& input_param_definition) {
140+
Cart16ParamDefinition param_definition;
141+
param_definition.parameter_id_ =
142+
input_param_definition.param_definition().parameter_id();
143+
param_definition.parameter_rate_ =
144+
input_param_definition.param_definition().parameter_rate();
145+
param_definition.param_definition_mode_ =
146+
input_param_definition.param_definition().param_definition_mode();
147+
param_definition.duration_ =
148+
input_param_definition.param_definition().duration();
149+
param_definition.constant_subblock_duration_ =
150+
input_param_definition.param_definition().constant_subblock_duration();
151+
param_definition.default_x_ = input_param_definition.default_x();
152+
param_definition.default_y_ = input_param_definition.default_y();
153+
param_definition.default_z_ = input_param_definition.default_z();
154+
return param_definition;
155+
}
156+
137157
DualPolarParamDefinition CreateDualPolarParamDefinition(
138158
const iamf_tools_cli_proto::DualPolarParamDefinition&
139159
input_param_definition) {
@@ -182,6 +202,12 @@ CreateRenderingConfigParamDefinition(
182202
CreateCart8ParamDefinition(
183203
input_rendering_config_param_definition.cart8_param_definition()),
184204
/*param_definition_bytes=*/{});
205+
case PARAM_DEFINITION_TYPE_CART_16:
206+
return RenderingConfigParamDefinition::Create(
207+
ParamDefinition::ParameterDefinitionType::kParameterDefinitionCart16,
208+
CreateCart16ParamDefinition(input_rendering_config_param_definition
209+
.cart16_param_definition()),
210+
/*param_definition_bytes=*/{});
185211
case PARAM_DEFINITION_TYPE_DUAL_POLAR:
186212
return RenderingConfigParamDefinition::Create(
187213
ParamDefinition::ParameterDefinitionType::

iamf/cli/proto_conversion/proto_to_obu/tests/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ cc_test(
160160
"//iamf/obu:mix_presentation",
161161
"//iamf/obu:param_definitions",
162162
"//iamf/obu:types",
163+
"//iamf/obu/param_definitions:cart16_param_definition",
163164
"//iamf/obu/param_definitions:cart8_param_definition",
164165
"//iamf/obu/param_definitions:dual_polar_param_definition",
165166
"//iamf/obu/param_definitions:polar_param_definition",

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "iamf/cli/tests/cli_test_utils.h"
3131
#include "iamf/obu/mix_presentation.h"
3232
#include "iamf/obu/param_definitions.h"
33+
#include "iamf/obu/param_definitions/cart16_param_definition.h"
3334
#include "iamf/obu/param_definitions/cart8_param_definition.h"
3435
#include "iamf/obu/param_definitions/dual_polar_param_definition.h"
3536
#include "iamf/obu/param_definitions/polar_param_definition.h"
@@ -326,6 +327,60 @@ TEST(Generate, CopiesRenderingConfigWithCart8ParamDefinition) {
326327
.value());
327328
}
328329

330+
TEST(Generate, CopiesRenderingConfigWithCart16ParamDefinition) {
331+
MixPresentationObuMetadatas mix_presentation_metadata;
332+
FillMixPresentationMetadata(mix_presentation_metadata.Add());
333+
auto& first_rendering_config = *mix_presentation_metadata.at(0)
334+
.mutable_sub_mixes(0)
335+
->mutable_audio_elements(0)
336+
->mutable_rendering_config();
337+
first_rendering_config.set_headphones_rendering_mode(
338+
HEADPHONES_RENDERING_MODE_RESERVED_3);
339+
using iamf_tools_cli_proto::PARAM_DEFINITION_TYPE_CART_16;
340+
auto& cart16_param_definition =
341+
*first_rendering_config.add_rendering_config_param_definitions();
342+
cart16_param_definition.set_param_definition_type(
343+
PARAM_DEFINITION_TYPE_CART_16);
344+
auto& cart16_param_definition_proto =
345+
*cart16_param_definition.mutable_cart16_param_definition();
346+
cart16_param_definition_proto.mutable_param_definition()->set_parameter_id(1);
347+
cart16_param_definition_proto.mutable_param_definition()->set_parameter_rate(
348+
16000);
349+
cart16_param_definition_proto.mutable_param_definition()
350+
->set_param_definition_mode(1);
351+
cart16_param_definition_proto.mutable_param_definition()->set_duration(1);
352+
cart16_param_definition_proto.mutable_param_definition()
353+
->set_constant_subblock_duration(true);
354+
cart16_param_definition_proto.set_default_x(1);
355+
cart16_param_definition_proto.set_default_y(2);
356+
cart16_param_definition_proto.set_default_z(3);
357+
358+
Cart16ParamDefinition expected_cart16_param_definition;
359+
expected_cart16_param_definition.parameter_id_ = 1;
360+
expected_cart16_param_definition.parameter_rate_ = 16000;
361+
expected_cart16_param_definition.param_definition_mode_ = 1;
362+
expected_cart16_param_definition.duration_ = 1;
363+
expected_cart16_param_definition.constant_subblock_duration_ = true;
364+
expected_cart16_param_definition.default_x_ = 1;
365+
expected_cart16_param_definition.default_y_ = 2;
366+
expected_cart16_param_definition.default_z_ = 3;
367+
368+
MixPresentationGenerator generator(mix_presentation_metadata);
369+
std::list<MixPresentationObu> generated_obus;
370+
EXPECT_THAT(generator.Generate(kAppendBuildInformationTag, generated_obus),
371+
IsOk());
372+
const auto& generated_rendering_config =
373+
generated_obus.front().sub_mixes_[0].audio_elements[0].rendering_config;
374+
EXPECT_THAT(generated_rendering_config.rendering_config_param_definitions,
375+
testing::SizeIs(1));
376+
EXPECT_THAT(
377+
generated_rendering_config.rendering_config_param_definitions[0],
378+
RenderingConfigParamDefinition::Create(
379+
ParamDefinition::ParameterDefinitionType::kParameterDefinitionCart16,
380+
expected_cart16_param_definition, {})
381+
.value());
382+
}
383+
329384
TEST(Generate, CopiesRenderingConfigWithDualPolarParamDefinition) {
330385
MixPresentationObuMetadatas mix_presentation_metadata;
331386
FillMixPresentationMetadata(mix_presentation_metadata.Add());

0 commit comments

Comments
 (0)