Skip to content

Commit d295206

Browse files
Googlerjwcullen
authored andcommitted
Add DualCart8ParamDefinition.
This CL introduces the `DualCart8ParamDefinition` class, which inherits from `ParamDefinition`. It includes methods for reading, writing, and validating the parameters associated with dual Cartesian coordinates, each represented by 8-bit signed integers. Unit tests are added to verify the functionality of reading, writing, and creating parameter data. PiperOrigin-RevId: 844447646
1 parent 414f0d9 commit d295206

File tree

5 files changed

+285
-0
lines changed

5 files changed

+285
-0
lines changed

iamf/obu/param_definitions/BUILD

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,18 @@ cc_library(
6262
"@abseil-cpp//absl/status",
6363
],
6464
)
65+
66+
cc_library(
67+
name = "dual_cart8_param_definition",
68+
srcs = ["dual_cart8_param_definition.cc"],
69+
hdrs = ["dual_cart8_param_definition.h"],
70+
deps = [
71+
"//iamf/common:read_bit_buffer",
72+
"//iamf/common:write_bit_buffer",
73+
"//iamf/common/utils:macros",
74+
"//iamf/obu:dual_cart8_parameter_data",
75+
"//iamf/obu:param_definitions",
76+
"@abseil-cpp//absl/log:absl_log",
77+
"@abseil-cpp//absl/status",
78+
],
79+
)
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_cart8_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_cart8_parameter_data.h"
22+
#include "iamf/obu/param_definitions.h"
23+
24+
namespace iamf_tools {
25+
26+
absl::Status DualCart8ParamDefinition::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.WriteSigned8(default_first_x_));
33+
RETURN_IF_NOT_OK(wb.WriteSigned8(default_first_y_));
34+
RETURN_IF_NOT_OK(wb.WriteSigned8(default_first_z_));
35+
RETURN_IF_NOT_OK(wb.WriteSigned8(default_second_x_));
36+
RETURN_IF_NOT_OK(wb.WriteSigned8(default_second_y_));
37+
RETURN_IF_NOT_OK(wb.WriteSigned8(default_second_z_));
38+
39+
return absl::OkStatus();
40+
}
41+
42+
absl::Status DualCart8ParamDefinition::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.ReadSigned8(default_first_x_));
48+
RETURN_IF_NOT_OK(rb.ReadSigned8(default_first_y_));
49+
RETURN_IF_NOT_OK(rb.ReadSigned8(default_first_z_));
50+
RETURN_IF_NOT_OK(rb.ReadSigned8(default_second_x_));
51+
RETURN_IF_NOT_OK(rb.ReadSigned8(default_second_y_));
52+
RETURN_IF_NOT_OK(rb.ReadSigned8(default_second_z_));
53+
return absl::OkStatus();
54+
}
55+
56+
std::unique_ptr<ParameterData> DualCart8ParamDefinition::CreateParameterData()
57+
const {
58+
return std::make_unique<DualCart8ParameterData>();
59+
}
60+
61+
void DualCart8ParamDefinition::Print() const {
62+
ABSL_LOG(INFO) << "DualCart8ParamDefinition:";
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: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
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_CART8_PARAM_DEFINITION_H_
14+
#define OBU_PARAM_DEFINITIONS_DUAL_CART8_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 DualCart8ParamDefinition : public ParamDefinition {
28+
public:
29+
/*!\brief Default constructor.
30+
*/
31+
DualCart8ParamDefinition() : ParamDefinition(kParameterDefinitionDualCart8) {}
32+
33+
/*!\brief Default destructor.
34+
*/
35+
~DualCart8ParamDefinition() override = default;
36+
37+
friend bool operator==(const DualCart8ParamDefinition& lhs,
38+
const DualCart8ParamDefinition& 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 `DualCart8ParameterData`.
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+
int8_t default_first_x_;
67+
int8_t default_first_y_;
68+
int8_t default_first_z_;
69+
int8_t default_second_x_;
70+
int8_t default_second_y_;
71+
int8_t default_second_z_;
72+
};
73+
74+
} // namespace iamf_tools
75+
76+
#endif // OBU_PARAM_DEFINITIONS_DUAL_CART8_PARAM_DEFINITION_H_

iamf/obu/param_definitions/tests/BUILD

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,19 @@ cc_test(
6464
"@com_google_googletest//:gtest_main",
6565
],
6666
)
67+
68+
cc_test(
69+
name = "dual_cart8_param_definition_test",
70+
srcs = ["dual_cart8_param_definition_test.cc"],
71+
deps = [
72+
"//iamf/common:read_bit_buffer",
73+
"//iamf/common:write_bit_buffer",
74+
"//iamf/common/utils/tests:test_utils",
75+
"//iamf/obu:dual_cart8_parameter_data",
76+
"//iamf/obu:param_definitions",
77+
"//iamf/obu/param_definitions:dual_cart8_param_definition",
78+
"@abseil-cpp//absl/status:status_matchers",
79+
"@abseil-cpp//absl/types:span",
80+
"@com_google_googletest//:gtest_main",
81+
],
82+
)
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
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_cart8_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_cart8_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(DualCart8ParamDefinitionTest, GetType) {
44+
DualCart8ParamDefinition param_definition;
45+
EXPECT_EQ(param_definition.GetType(),
46+
ParamDefinition::kParameterDefinitionDualCart8);
47+
}
48+
49+
TEST(DualCart8ParamDefinitionTest, ReadAndValidateSucceeds) {
50+
DualCart8ParamDefinition 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 (8 bits)
57+
// default_first_y = 2 (8 bits)
58+
// default_first_z = 3 (8 bits)
59+
// default_second_x = 4 (8 bits)
60+
// default_second_y = 5 (8 bits)
61+
// default_second_z = 6 (8 bits)
62+
0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
63+
64+
auto rb = MemoryBasedReadBitBuffer::CreateFromSpan(data);
65+
EXPECT_THAT(param_definition.ReadAndValidate(*rb), IsOk());
66+
EXPECT_EQ(param_definition.parameter_id_, 1);
67+
EXPECT_EQ(param_definition.parameter_rate_, 1);
68+
EXPECT_EQ(param_definition.param_definition_mode_, 0);
69+
EXPECT_EQ(param_definition.duration_, 10);
70+
EXPECT_EQ(param_definition.constant_subblock_duration_, 10);
71+
EXPECT_EQ(param_definition.default_first_x_, 1);
72+
EXPECT_EQ(param_definition.default_first_y_, 2);
73+
EXPECT_EQ(param_definition.default_first_z_, 3);
74+
EXPECT_EQ(param_definition.default_second_x_, 4);
75+
EXPECT_EQ(param_definition.default_second_y_, 5);
76+
EXPECT_EQ(param_definition.default_second_z_, 6);
77+
}
78+
79+
TEST(DualCart8ParamDefinitionTest, WriteAndValidateSucceeds) {
80+
DualCart8ParamDefinition param_definition;
81+
PopulateParamDefinition(&param_definition);
82+
param_definition.default_first_x_ = 1;
83+
param_definition.default_first_y_ = 2;
84+
param_definition.default_first_z_ = 3;
85+
param_definition.default_second_x_ = 4;
86+
param_definition.default_second_y_ = 5;
87+
param_definition.default_second_z_ = 6;
88+
89+
std::vector<uint8_t> expected_data = {1, // parameter_id
90+
1, // parameter_rate
91+
0, // mode
92+
10, // duration
93+
10, // constant_subblock_duration
94+
0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
95+
WriteBitBuffer wb(kBufferSize);
96+
EXPECT_THAT(param_definition.ValidateAndWrite(wb), IsOk());
97+
ValidateWriteResults(wb, expected_data);
98+
}
99+
100+
TEST(DualCart8ParamDefinitionTest, CreateParameterDataReturnsNonNull) {
101+
DualCart8ParamDefinition param_definition;
102+
EXPECT_NE(param_definition.CreateParameterData(), nullptr);
103+
}
104+
105+
} // namespace
106+
} // namespace iamf_tools

0 commit comments

Comments
 (0)