|
25 | 25 | #include "absl/strings/string_view.h" |
26 | 26 | #include "gmock/gmock.h" |
27 | 27 | #include "gtest/gtest.h" |
| 28 | +#include "iamf/cli/proto/element_gain_offset_config.pb.h" |
28 | 29 | #include "iamf/cli/proto/mix_presentation.pb.h" |
29 | 30 | #include "iamf/cli/proto/param_definitions.pb.h" |
| 31 | +#include "iamf/cli/proto/types.pb.h" |
30 | 32 | #include "iamf/cli/tests/cli_test_utils.h" |
| 33 | +#include "iamf/common/q_format_or_floating_point.h" |
| 34 | +#include "iamf/obu/element_gain_offset_config.h" |
31 | 35 | #include "iamf/obu/mix_presentation.h" |
32 | 36 | #include "iamf/obu/param_definitions/cart16_param_definition.h" |
33 | 37 | #include "iamf/obu/param_definitions/cart8_param_definition.h" |
@@ -1554,5 +1558,96 @@ TEST(CopyUserLayoutExtension, IgnoresDeprecatedInfoTypeSizeField) { |
1554 | 1558 | std::vector<uint8_t>({'a', 'b', 'c'})); |
1555 | 1559 | } |
1556 | 1560 |
|
| 1561 | +TEST(Generate, CopiesRenderingConfigWithElementGainOffsetValueQ78) { |
| 1562 | + MixPresentationObuMetadatas mix_presentation_metadata; |
| 1563 | + auto* first_mix_presentation_metadata = mix_presentation_metadata.Add(); |
| 1564 | + FillMixPresentationMetadata(first_mix_presentation_metadata); |
| 1565 | + first_mix_presentation_metadata->mutable_sub_mixes(0) |
| 1566 | + ->mutable_audio_elements(0) |
| 1567 | + ->mutable_rendering_config() |
| 1568 | + ->mutable_element_gain_offset_config() |
| 1569 | + ->mutable_value_type() |
| 1570 | + ->mutable_element_gain_offset() |
| 1571 | + ->set_q7_dot8(256); |
| 1572 | + |
| 1573 | + MixPresentationGenerator generator(mix_presentation_metadata); |
| 1574 | + std::list<MixPresentationObu> generated_obus; |
| 1575 | + EXPECT_THAT(generator.Generate(kAppendBuildInformationTag, generated_obus), |
| 1576 | + IsOk()); |
| 1577 | + |
| 1578 | + const auto& generated_rendering_config = |
| 1579 | + generated_obus.front().sub_mixes_[0].audio_elements[0].rendering_config; |
| 1580 | + EXPECT_EQ(generated_rendering_config.element_gain_offset_config, |
| 1581 | + ElementGainOffsetConfig::MakeValueType( |
| 1582 | + QFormatOrFloatingPoint::MakeFromQ7_8(256))); |
| 1583 | +} |
| 1584 | + |
| 1585 | +TEST(Generate, CopiesRenderingConfigWithElementGainOffsetValueFloat) { |
| 1586 | + MixPresentationObuMetadatas mix_presentation_metadata; |
| 1587 | + auto* first_mix_presentation_metadata = mix_presentation_metadata.Add(); |
| 1588 | + FillMixPresentationMetadata(first_mix_presentation_metadata); |
| 1589 | + first_mix_presentation_metadata->mutable_sub_mixes(0) |
| 1590 | + ->mutable_audio_elements(0) |
| 1591 | + ->mutable_rendering_config() |
| 1592 | + ->mutable_element_gain_offset_config() |
| 1593 | + ->mutable_value_type() |
| 1594 | + ->mutable_element_gain_offset() |
| 1595 | + ->set_floating_point(1.0); |
| 1596 | + |
| 1597 | + MixPresentationGenerator generator(mix_presentation_metadata); |
| 1598 | + std::list<MixPresentationObu> generated_obus; |
| 1599 | + EXPECT_THAT(generator.Generate(kAppendBuildInformationTag, generated_obus), |
| 1600 | + IsOk()); |
| 1601 | + |
| 1602 | + const auto& generated_rendering_config = |
| 1603 | + generated_obus.front().sub_mixes_[0].audio_elements[0].rendering_config; |
| 1604 | + EXPECT_EQ(generated_rendering_config.element_gain_offset_config, |
| 1605 | + ElementGainOffsetConfig::MakeValueType( |
| 1606 | + *QFormatOrFloatingPoint::CreateFromFloatingPoint(1.0))); |
| 1607 | +} |
| 1608 | + |
| 1609 | +TEST(Generate, CopiesRenderingConfigWithElementGainOffsetRangeQ78) { |
| 1610 | + MixPresentationObuMetadatas mix_presentation_metadata; |
| 1611 | + auto* first_mix_presentation_metadata = mix_presentation_metadata.Add(); |
| 1612 | + FillMixPresentationMetadata(first_mix_presentation_metadata); |
| 1613 | + auto& range_type = *first_mix_presentation_metadata->mutable_sub_mixes(0) |
| 1614 | + ->mutable_audio_elements(0) |
| 1615 | + ->mutable_rendering_config() |
| 1616 | + ->mutable_element_gain_offset_config() |
| 1617 | + ->mutable_range_type(); |
| 1618 | + range_type.mutable_default_element_gain_offset()->set_q7_dot8(256); |
| 1619 | + range_type.mutable_min_element_gain_offset()->set_q7_dot8(0); |
| 1620 | + range_type.mutable_max_element_gain_offset()->set_q7_dot8(512); |
| 1621 | + |
| 1622 | + MixPresentationGenerator generator(mix_presentation_metadata); |
| 1623 | + std::list<MixPresentationObu> generated_obus; |
| 1624 | + EXPECT_THAT(generator.Generate(kAppendBuildInformationTag, generated_obus), |
| 1625 | + IsOk()); |
| 1626 | + |
| 1627 | + const auto& generated_rendering_config = |
| 1628 | + generated_obus.front().sub_mixes_[0].audio_elements[0].rendering_config; |
| 1629 | + EXPECT_EQ(generated_rendering_config.element_gain_offset_config, |
| 1630 | + *ElementGainOffsetConfig::CreateRangeType( |
| 1631 | + QFormatOrFloatingPoint::MakeFromQ7_8(256), |
| 1632 | + QFormatOrFloatingPoint::MakeFromQ7_8(0), |
| 1633 | + QFormatOrFloatingPoint::MakeFromQ7_8(512))); |
| 1634 | +} |
| 1635 | + |
| 1636 | +TEST(Generate, ElementGainOffsetConfigMustHaveValueOrRangeType) { |
| 1637 | + MixPresentationObuMetadatas mix_presentation_metadata; |
| 1638 | + auto* first_mix_presentation_metadata = mix_presentation_metadata.Add(); |
| 1639 | + FillMixPresentationMetadata(first_mix_presentation_metadata); |
| 1640 | + // Create an `element_gain_offset_config` but do not fill in any fields. |
| 1641 | + first_mix_presentation_metadata->mutable_sub_mixes(0) |
| 1642 | + ->mutable_audio_elements(0) |
| 1643 | + ->mutable_rendering_config() |
| 1644 | + ->mutable_element_gain_offset_config(); |
| 1645 | + MixPresentationGenerator generator(mix_presentation_metadata); |
| 1646 | + |
| 1647 | + std::list<MixPresentationObu> generated_obus; |
| 1648 | + EXPECT_THAT(generator.Generate(kAppendBuildInformationTag, generated_obus), |
| 1649 | + Not(IsOk())); |
| 1650 | +} |
| 1651 | + |
1557 | 1652 | } // namespace |
1558 | 1653 | } // namespace iamf_tools |
0 commit comments