Skip to content

Commit f7e7089

Browse files
Googlerjwcullen
authored andcommitted
Add Cart16ParamDefinition class and tests.
Introduces `Cart16ParamDefinition` to handle parameter definitions for Cartesian coordinates using 16-bit signed integers. Implements methods to read, write, and validate the default x, y, and z values. Adds unit tests for reading, writing, and creating parameter data. PiperOrigin-RevId: 843815945
1 parent f4ab502 commit f7e7089

File tree

5 files changed

+266
-0
lines changed

5 files changed

+266
-0
lines changed

iamf/obu/param_definitions/BUILD

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,18 @@ cc_library(
4747
"@abseil-cpp//absl/status",
4848
],
4949
)
50+
51+
cc_library(
52+
name = "cart16_param_definition",
53+
srcs = ["cart16_param_definition.cc"],
54+
hdrs = ["cart16_param_definition.h"],
55+
deps = [
56+
"//iamf/common:read_bit_buffer",
57+
"//iamf/common:write_bit_buffer",
58+
"//iamf/common/utils:macros",
59+
"//iamf/obu:cart8_parameter_data",
60+
"//iamf/obu:param_definitions",
61+
"@abseil-cpp//absl/log:absl_log",
62+
"@abseil-cpp//absl/status",
63+
],
64+
)
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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/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/cart8_parameter_data.h"
22+
#include "iamf/obu/param_definitions.h"
23+
24+
namespace iamf_tools {
25+
26+
absl::Status Cart16ParamDefinition::ValidateAndWrite(WriteBitBuffer& wb) const {
27+
// The common part.
28+
RETURN_IF_NOT_OK(ParamDefinition::ValidateAndWrite(wb));
29+
30+
// The sub-class specific part.
31+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_x_));
32+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_y_));
33+
RETURN_IF_NOT_OK(wb.WriteSigned16(default_z_));
34+
35+
return absl::OkStatus();
36+
}
37+
38+
absl::Status Cart16ParamDefinition::ReadAndValidate(ReadBitBuffer& rb) {
39+
// The common part.
40+
RETURN_IF_NOT_OK(ParamDefinition::ReadAndValidate(rb));
41+
42+
// The sub-class specific part.
43+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_x_));
44+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_y_));
45+
RETURN_IF_NOT_OK(rb.ReadSigned16(default_z_));
46+
return absl::OkStatus();
47+
}
48+
49+
std::unique_ptr<ParameterData> Cart16ParamDefinition::CreateParameterData()
50+
const {
51+
return std::make_unique<Cart8ParameterData>();
52+
}
53+
54+
void Cart16ParamDefinition::Print() const {
55+
ABSL_LOG(INFO) << "Cart16ParamDefinition:";
56+
ParamDefinition::Print();
57+
ABSL_LOG(INFO) << " default_x: " << default_x_;
58+
ABSL_LOG(INFO) << " default_y: " << default_y_;
59+
ABSL_LOG(INFO) << " default_z: " << default_z_;
60+
}
61+
62+
} // namespace iamf_tools
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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_CART16_PARAM_DEFINITION_H_
14+
#define OBU_PARAM_DEFINITIONS_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 Cart16ParamDefinition : public ParamDefinition {
28+
public:
29+
/*!\brief Default constructor.
30+
*/
31+
Cart16ParamDefinition() : ParamDefinition(kParameterDefinitionCart16) {}
32+
33+
/*!\brief Default destructor.
34+
*/
35+
~Cart16ParamDefinition() override = default;
36+
37+
friend bool operator==(const Cart16ParamDefinition& lhs,
38+
const Cart16ParamDefinition& rhs) = default;
39+
40+
/*!\brief Validates and writes to a buffer.
41+
*
42+
* \param wb Buffer to write to.
43+
* \return `absl::OkStatus()` if successful. A specific status on failure.
44+
*/
45+
absl::Status ValidateAndWrite(WriteBitBuffer& wb) const override;
46+
47+
/*!\brief Reads from a buffer and validates the resulting output.
48+
*
49+
* \param rb Buffer to read from.
50+
* \return `absl::OkStatus()` if successful. A specific status on failure.
51+
*/
52+
absl::Status ReadAndValidate(ReadBitBuffer& rb) override;
53+
54+
/*!\brief Creates a parameter data.
55+
*
56+
* The created instance will be of type `Cart16ParameterData`.
57+
*
58+
* \return Unique pointer to the created parameter data.
59+
*/
60+
std::unique_ptr<ParameterData> CreateParameterData() const override;
61+
62+
/*!\brief Prints the parameter definition.
63+
*/
64+
void Print() const override;
65+
66+
int16_t default_x_;
67+
int16_t default_y_;
68+
int16_t default_z_;
69+
};
70+
71+
} // namespace iamf_tools
72+
73+
#endif // OBU_PARAM_DEFINITIONS_CART16_PARAM_DEFINITION_H_

iamf/obu/param_definitions/tests/BUILD

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,19 @@ cc_test(
4848
"@com_google_googletest//:gtest_main",
4949
],
5050
)
51+
52+
cc_test(
53+
name = "cart16_param_definition_test",
54+
srcs = ["cart16_param_definition_test.cc"],
55+
deps = [
56+
"//iamf/common:read_bit_buffer",
57+
"//iamf/common:write_bit_buffer",
58+
"//iamf/common/utils/tests:test_utils",
59+
"//iamf/obu:cart16_parameter_data",
60+
"//iamf/obu:param_definitions",
61+
"//iamf/obu/param_definitions:cart16_param_definition",
62+
"@abseil-cpp//absl/status:status_matchers",
63+
"@abseil-cpp//absl/types:span",
64+
"@com_google_googletest//:gtest_main",
65+
],
66+
)
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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/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/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(Cart16ParamDefinitionTest, GetType) {
44+
Cart16ParamDefinition param_definition;
45+
EXPECT_EQ(param_definition.GetType(),
46+
ParamDefinition::kParameterDefinitionCart16);
47+
}
48+
49+
TEST(Cart16ParamDefinitionTest, ReadAndValidateSucceeds) {
50+
Cart16ParamDefinition 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_x = 1 (16 bits)
57+
// default_y = 2 (16 bits)
58+
// default_z = 3 (16 bits)
59+
0x00, 0x01, 0x00, 0x02, 0x00, 0x03};
60+
61+
auto rb = MemoryBasedReadBitBuffer::CreateFromSpan(data);
62+
EXPECT_THAT(param_definition.ReadAndValidate(*rb), IsOk());
63+
EXPECT_EQ(param_definition.parameter_id_, 1);
64+
EXPECT_EQ(param_definition.parameter_rate_, 1);
65+
EXPECT_EQ(param_definition.param_definition_mode_, 0);
66+
EXPECT_EQ(param_definition.duration_, 10);
67+
EXPECT_EQ(param_definition.constant_subblock_duration_, 10);
68+
EXPECT_EQ(param_definition.default_x_, 1);
69+
EXPECT_EQ(param_definition.default_y_, 2);
70+
EXPECT_EQ(param_definition.default_z_, 3);
71+
}
72+
73+
TEST(Cart16ParamDefinitionTest, WriteAndValidateSucceeds) {
74+
Cart16ParamDefinition param_definition;
75+
PopulateParamDefinition(&param_definition);
76+
param_definition.default_x_ = 1;
77+
param_definition.default_y_ = 2;
78+
param_definition.default_z_ = 3;
79+
80+
std::vector<uint8_t> expected_data = {1, // parameter_id
81+
1, // parameter_rate
82+
0, // mode
83+
10, // duration
84+
10, // constant_subblock_duration
85+
// default_x = 1 (16 bits)
86+
// default_y = 2 (16 bits)
87+
// default_z = 3 (16 bits)
88+
0x00, 0x01, 0x00, 0x02, 0x00, 0x03};
89+
WriteBitBuffer wb(kBufferSize);
90+
EXPECT_THAT(param_definition.ValidateAndWrite(wb), IsOk());
91+
ValidateWriteResults(wb, expected_data);
92+
}
93+
94+
TEST(Cart16ParamDefinitionTest, CreateParameterDataReturnsNonNull) {
95+
Cart16ParamDefinition param_definition;
96+
EXPECT_NE(param_definition.CreateParameterData(), nullptr);
97+
}
98+
99+
} // namespace
100+
} // namespace iamf_tools

0 commit comments

Comments
 (0)