Skip to content

Commit 7658dc3

Browse files
Googlerjwcullen
authored andcommitted
Add support for DualCart8ParamDefinition in proto to OBU conversion.
Updates the BUILD file to include the DualCart8ParamDefinition. Implements `CreateDualCart8ParamDefinition` to convert the proto representation to the OBU struct. Integrates the conversion into `CreateRenderingConfigParamDefinition` for Mix Presentation OBUs. Adds a unit test to ensure correct conversion of DualCart8ParamDefinition. PiperOrigin-RevId: 844448818
1 parent 96b37cd commit 7658dc3

File tree

4 files changed

+98
-0
lines changed

4 files changed

+98
-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_cart8_param_definition",
164165
"//iamf/obu/param_definitions:dual_polar_param_definition",
165166
"//iamf/obu/param_definitions:polar_param_definition",
166167
"@abseil-cpp//absl/base:no_destructor",

iamf/cli/proto_conversion/proto_to_obu/mix_presentation_generator.cc

Lines changed: 34 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_cart8_param_definition.h"
4243
#include "iamf/obu/param_definitions/dual_polar_param_definition.h"
4344
#include "iamf/obu/param_definitions/polar_param_definition.h"
4445
#include "iamf/obu/types.h"
@@ -183,6 +184,32 @@ DualPolarParamDefinition CreateDualPolarParamDefinition(
183184
return param_definition;
184185
}
185186

187+
DualCart8ParamDefinition CreateDualCart8ParamDefinition(
188+
const iamf_tools_cli_proto::DualCart8ParamDefinition&
189+
input_param_definition) {
190+
DualCart8ParamDefinition param_definition;
191+
param_definition.parameter_id_ =
192+
input_param_definition.param_definition().parameter_id();
193+
param_definition.parameter_rate_ =
194+
input_param_definition.param_definition().parameter_rate();
195+
param_definition.param_definition_mode_ =
196+
input_param_definition.param_definition().param_definition_mode();
197+
param_definition.duration_ =
198+
input_param_definition.param_definition().duration();
199+
param_definition.constant_subblock_duration_ =
200+
input_param_definition.param_definition().constant_subblock_duration();
201+
param_definition.default_first_x_ = input_param_definition.default_first_x();
202+
param_definition.default_first_y_ = input_param_definition.default_first_y();
203+
param_definition.default_first_z_ = input_param_definition.default_first_z();
204+
param_definition.default_second_x_ =
205+
input_param_definition.default_second_x();
206+
param_definition.default_second_y_ =
207+
input_param_definition.default_second_y();
208+
param_definition.default_second_z_ =
209+
input_param_definition.default_second_z();
210+
return param_definition;
211+
}
212+
186213
absl::StatusOr<RenderingConfigParamDefinition>
187214
CreateRenderingConfigParamDefinition(
188215
const iamf_tools_cli_proto::RenderingConfigParamDefinition&
@@ -215,6 +242,13 @@ CreateRenderingConfigParamDefinition(
215242
CreateDualPolarParamDefinition(input_rendering_config_param_definition
216243
.dual_polar_param_definition()),
217244
/*param_definition_bytes=*/{});
245+
case PARAM_DEFINITION_TYPE_DUAL_CART_8:
246+
return RenderingConfigParamDefinition::Create(
247+
ParamDefinition::ParameterDefinitionType::
248+
kParameterDefinitionDualCart8,
249+
CreateDualCart8ParamDefinition(input_rendering_config_param_definition
250+
.dual_cart8_param_definition()),
251+
/*param_definition_bytes=*/{});
218252
default:
219253
return absl::InvalidArgumentError(absl::StrCat(
220254
"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_cart8_param_definition",
165166
"//iamf/obu/param_definitions:dual_polar_param_definition",
166167
"//iamf/obu/param_definitions:polar_param_definition",
167168
"@abseil-cpp//absl/status:status_matchers",

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

Lines changed: 62 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_cart8_param_definition.h"
3536
#include "iamf/obu/param_definitions/dual_polar_param_definition.h"
3637
#include "iamf/obu/param_definitions/polar_param_definition.h"
3738
#include "iamf/obu/types.h"
@@ -442,6 +443,67 @@ TEST(Generate, CopiesRenderingConfigWithDualPolarParamDefinition) {
442443
.value());
443444
}
444445

446+
TEST(Generate, CopiesRenderingConfigWithDualCart8ParamDefinition) {
447+
MixPresentationObuMetadatas mix_presentation_metadata;
448+
FillMixPresentationMetadata(mix_presentation_metadata.Add());
449+
auto& first_rendering_config = *mix_presentation_metadata.at(0)
450+
.mutable_sub_mixes(0)
451+
->mutable_audio_elements(0)
452+
->mutable_rendering_config();
453+
first_rendering_config.set_headphones_rendering_mode(
454+
HEADPHONES_RENDERING_MODE_RESERVED_3);
455+
using iamf_tools_cli_proto::PARAM_DEFINITION_TYPE_DUAL_CART_8;
456+
auto& dual_cart8_param_definition =
457+
*first_rendering_config.add_rendering_config_param_definitions();
458+
dual_cart8_param_definition.set_param_definition_type(
459+
PARAM_DEFINITION_TYPE_DUAL_CART_8);
460+
auto& dual_cart8_param_definition_proto =
461+
*dual_cart8_param_definition.mutable_dual_cart8_param_definition();
462+
dual_cart8_param_definition_proto.mutable_param_definition()
463+
->set_parameter_id(1);
464+
dual_cart8_param_definition_proto.mutable_param_definition()
465+
->set_parameter_rate(16000);
466+
dual_cart8_param_definition_proto.mutable_param_definition()
467+
->set_param_definition_mode(1);
468+
dual_cart8_param_definition_proto.mutable_param_definition()->set_duration(1);
469+
dual_cart8_param_definition_proto.mutable_param_definition()
470+
->set_constant_subblock_duration(true);
471+
dual_cart8_param_definition_proto.set_default_first_x(1);
472+
dual_cart8_param_definition_proto.set_default_first_y(2);
473+
dual_cart8_param_definition_proto.set_default_first_z(3);
474+
dual_cart8_param_definition_proto.set_default_second_x(4);
475+
dual_cart8_param_definition_proto.set_default_second_y(5);
476+
dual_cart8_param_definition_proto.set_default_second_z(6);
477+
478+
DualCart8ParamDefinition expected_dual_cart8_param_definition;
479+
expected_dual_cart8_param_definition.parameter_id_ = 1;
480+
expected_dual_cart8_param_definition.parameter_rate_ = 16000;
481+
expected_dual_cart8_param_definition.param_definition_mode_ = 1;
482+
expected_dual_cart8_param_definition.duration_ = 1;
483+
expected_dual_cart8_param_definition.constant_subblock_duration_ = true;
484+
expected_dual_cart8_param_definition.default_first_x_ = 1;
485+
expected_dual_cart8_param_definition.default_first_y_ = 2;
486+
expected_dual_cart8_param_definition.default_first_z_ = 3;
487+
expected_dual_cart8_param_definition.default_second_x_ = 4;
488+
expected_dual_cart8_param_definition.default_second_y_ = 5;
489+
expected_dual_cart8_param_definition.default_second_z_ = 6;
490+
491+
MixPresentationGenerator generator(mix_presentation_metadata);
492+
std::list<MixPresentationObu> generated_obus;
493+
EXPECT_THAT(generator.Generate(kAppendBuildInformationTag, generated_obus),
494+
IsOk());
495+
const auto& generated_rendering_config =
496+
generated_obus.front().sub_mixes_[0].audio_elements[0].rendering_config;
497+
EXPECT_THAT(generated_rendering_config.rendering_config_param_definitions,
498+
testing::SizeIs(1));
499+
EXPECT_THAT(generated_rendering_config.rendering_config_param_definitions[0],
500+
RenderingConfigParamDefinition::Create(
501+
ParamDefinition::ParameterDefinitionType::
502+
kParameterDefinitionDualCart8,
503+
expected_dual_cart8_param_definition, {})
504+
.value());
505+
}
506+
445507
TEST(Generate, CopiesRenderingConfigExtension) {
446508
MixPresentationObuMetadatas mix_presentation_metadata;
447509
FillMixPresentationMetadata(mix_presentation_metadata.Add());

0 commit comments

Comments
 (0)