Skip to content

Commit 9f6f808

Browse files
Googlerjwcullen
authored andcommitted
Add DualCart16ParamDefinition class.
This CL introduces the `DualCart16ParamDefinition` class, which is a subclass of `ParamDefinition`. It is used to define parameters of type `kParameterDefinitionDualCart16`. The class includes default values for two sets of 3D Cartesian coordinates (x, y, z), each stored as `int16_t`. It provides methods to validate and write, read and validate, create associated parameter data, and print the definition. PiperOrigin-RevId: 844486539
1 parent e542e76 commit 9f6f808

File tree

5 files changed

+294
-0
lines changed

5 files changed

+294
-0
lines changed

iamf/obu/param_definitions/BUILD

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,18 @@ cc_library(
7777
"@abseil-cpp//absl/status",
7878
],
7979
)
80+
81+
cc_library(
82+
name = "dual_cart16_param_definition",
83+
srcs = ["dual_cart16_param_definition.cc"],
84+
hdrs = ["dual_cart16_param_definition.h"],
85+
deps = [
86+
"//iamf/common:read_bit_buffer",
87+
"//iamf/common:write_bit_buffer",
88+
"//iamf/common/utils:macros",
89+
"//iamf/obu:dual_cart16_parameter_data",
90+
"//iamf/obu:param_definitions",
91+
"@abseil-cpp//absl/log:absl_log",
92+
"@abseil-cpp//absl/status",
93+
],
94+
)
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* Copyright (c) 2025, 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/obu/param_definitions/dual_cart16_param_definition.h"
13+
14+
#include <memory>
15+
16+
#include "absl/log/absl_log.h"
17+
#include "absl/status/status.h"
18+
#include "iamf/common/read_bit_buffer.h"
19+
#include "iamf/common/utils/macros.h"
20+
#include "iamf/common/write_bit_buffer.h"
21+
#include "iamf/obu/dual_cart16_parameter_data.h"
22+
#include "iamf/obu/param_definitions.h"
23+
24+
namespace iamf_tools {
25+
26+
absl::Status DualCart16ParamDefinition::ValidateAndWrite(
27+
WriteBitBuffer& wb) const {
28+
// The common part.
29+
RETURN_IF_NOT_OK(ParamDefinition::ValidateAndWrite(wb));
30+
31+
// The sub-class specific part.
32+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_first_x_));
33+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_first_y_));
34+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_first_z_));
35+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_second_x_));
36+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_second_y_));
37+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_second_z_));
38+
39+
return absl::OkStatus();
40+
}
41+
42+
absl::Status DualCart16ParamDefinition::ReadAndValidate(ReadBitBuffer& rb) {
43+
// The common part.
44+
RETURN_IF_NOT_OK(ParamDefinition::ReadAndValidate(rb));
45+
46+
// The sub-class specific part.
47+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_first_x_));
48+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_first_y_));
49+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_first_z_));
50+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_second_x_));
51+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_second_y_));
52+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_second_z_));
53+
return absl::OkStatus();
54+
}
55+
56+
std::unique_ptr<ParameterData> DualCart16ParamDefinition::CreateParameterData()
57+
const {
58+
return std::make_unique<DualCart16ParameterData>();
59+
}
60+
61+
void DualCart16ParamDefinition::Print() const {
62+
ABSL_LOG(INFO) << "DualCart16ParamDefinition:";
63+
ParamDefinition::Print();
64+
ABSL_LOG(INFO) << " default_first_x: " << default_first_x_;
65+
ABSL_LOG(INFO) << " default_first_y: " << default_first_y_;
66+
ABSL_LOG(INFO) << " default_first_z: " << default_first_z_;
67+
ABSL_LOG(INFO) << " default_second_x: " << default_second_x_;
68+
ABSL_LOG(INFO) << " default_second_y: " << default_second_y_;
69+
ABSL_LOG(INFO) << " default_second_z: " << default_second_z_;
70+
}
71+
72+
} // namespace iamf_tools
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* Copyright (c) 2025, 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+
13+
#ifndef OBU_PARAM_DEFINITIONS_DUAL_CART16_PARAM_DEFINITION_H_
14+
#define OBU_PARAM_DEFINITIONS_DUAL_CART16_PARAM_DEFINITION_H_
15+
16+
#include <cstdint>
17+
#include <memory>
18+
19+
#include "absl/status/status.h"
20+
#include "iamf/common/read_bit_buffer.h"
21+
#include "iamf/common/write_bit_buffer.h"
22+
#include "iamf/obu/param_definitions.h"
23+
24+
namespace iamf_tools {
25+
26+
/* !\brief Parameter definition for polar info. */
27+
class DualCart16ParamDefinition : public ParamDefinition {
28+
public:
29+
/*!\brief Default constructor.
30+
*/
31+
DualCart16ParamDefinition()
32+
: ParamDefinition(kParameterDefinitionDualCart16) {}
33+
34+
/*!\brief Default destructor.
35+
*/
36+
~DualCart16ParamDefinition() override = default;
37+
38+
friend bool operator==(const DualCart16ParamDefinition& lhs,
39+
const DualCart16ParamDefinition& rhs) = default;
40+
41+
/*!\brief Validates and writes to a buffer.
42+
*
43+
* \param wb Buffer to write to.
44+
* \return `absl::OkStatus()` if successful. A specific status on failure.
45+
*/
46+
absl::Status ValidateAndWrite(WriteBitBuffer& wb) const override;
47+
48+
/*!\brief Reads from a buffer and validates the resulting output.
49+
*
50+
* \param rb Buffer to read from.
51+
* \return `absl::OkStatus()` if successful. A specific status on failure.
52+
*/
53+
absl::Status ReadAndValidate(ReadBitBuffer& rb) override;
54+
55+
/*!\brief Creates a parameter data.
56+
*
57+
* The created instance will be of type `DualCart16ParameterData`.
58+
*
59+
* \return Unique pointer to the created parameter data.
60+
*/
61+
std::unique_ptr<ParameterData> CreateParameterData() const override;
62+
63+
/*!\brief Prints the parameter definition.
64+
*/
65+
void Print() const override;
66+
67+
int16_t default_first_x_;
68+
int16_t default_first_y_;
69+
int16_t default_first_z_;
70+
int16_t default_second_x_;
71+
int16_t default_second_y_;
72+
int16_t default_second_z_;
73+
};
74+
75+
} // namespace iamf_tools
76+
77+
#endif // OBU_PARAM_DEFINITIONS_DUAL_CART16_PARAM_DEFINITION_H_

iamf/obu/param_definitions/tests/BUILD

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,19 @@ cc_test(
8080
"@com_google_googletest//:gtest_main",
8181
],
8282
)
83+
84+
cc_test(
85+
name = "dual_cart16_param_definition_test",
86+
srcs = ["dual_cart16_param_definition_test.cc"],
87+
deps = [
88+
"//iamf/common:read_bit_buffer",
89+
"//iamf/common:write_bit_buffer",
90+
"//iamf/common/utils/tests:test_utils",
91+
"//iamf/obu:dual_cart16_parameter_data",
92+
"//iamf/obu:param_definitions",
93+
"//iamf/obu/param_definitions:dual_cart16_param_definition",
94+
"@abseil-cpp//absl/status:status_matchers",
95+
"@abseil-cpp//absl/types:span",
96+
"@com_google_googletest//:gtest_main",
97+
],
98+
)
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/*
2+
* Copyright (c) 2025, 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/obu/param_definitions/dual_cart16_param_definition.h"
13+
14+
#include <cstdint>
15+
#include <vector>
16+
17+
#include "absl/status/status_matchers.h"
18+
#include "absl/types/span.h"
19+
#include "gmock/gmock.h"
20+
#include "gtest/gtest.h"
21+
#include "iamf/common/read_bit_buffer.h"
22+
#include "iamf/common/utils/tests/test_utils.h"
23+
#include "iamf/common/write_bit_buffer.h"
24+
#include "iamf/obu/dual_cart16_parameter_data.h"
25+
#include "iamf/obu/param_definitions.h"
26+
27+
namespace iamf_tools {
28+
namespace {
29+
30+
using ::absl_testing::IsOk;
31+
32+
constexpr int32_t kBufferSize = 256;
33+
34+
void PopulateParamDefinition(ParamDefinition* param_definition) {
35+
param_definition->parameter_id_ = 1;
36+
param_definition->parameter_rate_ = 1;
37+
param_definition->param_definition_mode_ = 0;
38+
param_definition->duration_ = 10;
39+
param_definition->constant_subblock_duration_ = 10;
40+
param_definition->reserved_ = 0;
41+
}
42+
43+
TEST(DualCart16ParamDefinitionTest, GetType) {
44+
DualCart16ParamDefinition param_definition;
45+
EXPECT_EQ(param_definition.GetType(),
46+
ParamDefinition::kParameterDefinitionDualCart16);
47+
}
48+
49+
TEST(DualCart16ParamDefinitionTest, ReadAndValidateSucceeds) {
50+
DualCart16ParamDefinition param_definition;
51+
std::vector<uint8_t> data = {1, // parameter_id
52+
1, // parameter_rate
53+
0, // mode
54+
10, // duration
55+
10, // constant_subblock_duration
56+
// default_first_x = 1 (16 bits)
57+
// default_first_y = 2 (16 bits)
58+
// default_first_z = 3 (16 bits)
59+
// default_second_x = 4 (16 bits)
60+
// default_second_y = 5 (16 bits)
61+
// default_second_z = 6 (16 bits)
62+
0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04,
63+
0x00, 0x05, 0x00, 0x06};
64+
65+
auto rb = MemoryBasedReadBitBuffer::CreateFromSpan(data);
66+
EXPECT_THAT(param_definition.ReadAndValidate(*rb), IsOk());
67+
EXPECT_EQ(param_definition.parameter_id_, 1);
68+
EXPECT_EQ(param_definition.parameter_rate_, 1);
69+
EXPECT_EQ(param_definition.param_definition_mode_, 0);
70+
EXPECT_EQ(param_definition.duration_, 10);
71+
EXPECT_EQ(param_definition.constant_subblock_duration_, 10);
72+
EXPECT_EQ(param_definition.default_first_x_, 1);
73+
EXPECT_EQ(param_definition.default_first_y_, 2);
74+
EXPECT_EQ(param_definition.default_first_z_, 3);
75+
EXPECT_EQ(param_definition.default_second_x_, 4);
76+
EXPECT_EQ(param_definition.default_second_y_, 5);
77+
EXPECT_EQ(param_definition.default_second_z_, 6);
78+
}
79+
80+
TEST(DualCart16ParamDefinitionTest, WriteAndValidateSucceeds) {
81+
DualCart16ParamDefinition param_definition;
82+
PopulateParamDefinition(&param_definition);
83+
param_definition.default_first_x_ = 1;
84+
param_definition.default_first_y_ = 2;
85+
param_definition.default_first_z_ = 3;
86+
param_definition.default_second_x_ = 4;
87+
param_definition.default_second_y_ = 5;
88+
param_definition.default_second_z_ = 6;
89+
90+
std::vector<uint8_t> expected_data = {1, // parameter_id
91+
1, // parameter_rates
92+
0, // mode
93+
10, // duration
94+
10, // constant_subblock_duration
95+
// default_first_x = 1 (16 bits)
96+
// default_first_y = 2 (16 bits)
97+
// default_first_z = 3 (16 bits)
98+
// default_second_x = 4 (16 bits)
99+
// default_second_y = 5 (16 bits)
100+
// default_second_z = 6 (16 bits)
101+
0x00, 0x01, 0x00, 0x02, 0x00, 0x03,
102+
0x00, 0x04, 0x00, 0x05, 0x00, 0x06};
103+
WriteBitBuffer wb(kBufferSize);
104+
EXPECT_THAT(param_definition.ValidateAndWrite(wb), IsOk());
105+
ValidateWriteResults(wb, expected_data);
106+
}
107+
108+
TEST(DualCart16ParamDefinitionTest, CreateParameterDataReturnsNonNull) {
109+
DualCart16ParamDefinition param_definition;
110+
EXPECT_NE(param_definition.CreateParameterData(), nullptr);
111+
}
112+
113+
} // namespace
114+
} // namespace iamf_tools

0 commit comments

Comments
 (0)