diff --git a/index.bs b/index.bs index 04dca1f1..9ef2ca6f 100644 --- a/index.bs +++ b/index.bs @@ -687,7 +687,7 @@ class AudioElementOBU() { else if (param_definition_type == PARAMETER_DEFINITION_RECON_GAIN) { ReconGainParamDefinition recon_gain_info; } - else if (param_definition_type > 3) { + else if (param_definition_type > 4) { leb128() param_definition_size; unsigned int (8 x param_definition_size) param_definition_bytes; } @@ -776,18 +776,22 @@ NOTE: For a given [=audio_element_type=], a future version of the specification 3PARAMETER_DEFINITION_SINGLE_POSITION[=SinglePositionParamDefinition()=] + + 4PARAMETER_DEFINITION_DUAL_POSITION[=DualPositionParamDefinition()=] + - The following types SHALL NOT be present in an [=Audio Element OBU=]: - PARAMETER_DEFINITION_MIX_GAIN - PARAMETER_DEFINITION_SINGLE_POSITION + - PARAMETER_DEFINITION_DUAL_POSITION - The type SHALL NOT be duplicated in one [=Audio Element OBU=]. - When [=codec_id=] = fLaC or ipcm, the type PARAMETER_DEFINITION_RECON_GAIN SHALL NOT be present. - When [=num_layers=] > 1, the type PARAMETER_DEFINITION_RECON_GAIN SHALL be present. - When the [=loudspeaker_layout=] = 15 or the [=loudspeaker_layout=] of the (non-)scalable channel audio (i.e., [=num_layers=] = 1) is less than or equal to 3.1.2ch (i.e., Mono, Stereo, or 3.1.2ch), the type PARAMETER_DEFINITION_DEMIXING SHALL NOT be present. - When the highest [=loudspeaker_layout=] of the scalable channel audio (i.e., [=num_layers=] > 1) is greater than 3.1.2ch, both PARAMETER_DEFINITION_DEMIXING and PARAMETER_DEFINITION_RECON_GAIN types SHALL be present. - When [=num_layers=] = 1 and [=loudspeaker_layout=] is greater than 3.1.2ch (i.e., 5.1.2ch, 5.1.4ch, 7.1.2ch, or 7.1.4ch), the type PARAMETER_DEFINITION_DEMIXING MAY be present. -- An OBU parser SHALL be able to parse [=audio_element_obu/param_definition_type=] = P (where P > 3) and [=param_definition_size=]. The OBU parser SHOULD ignore the bytes indicated by [=param_definition_size=] that it does not recognize. +- An OBU parser SHALL be able to parse [=audio_element_obu/param_definition_type=] = P (where P > 4) and [=param_definition_size=]. The OBU parser SHOULD ignore the bytes indicated by [=param_definition_size=] that it does not recognize. demixing_info is an instance of the [=DemixingParamDefinition()=] class, which provides the parameter definition for the demixing information, which is used to reconstruct a scalable channel audio representation. The corresponding parameter data to be provided in [=Parameter Block OBU=]s with the same [=parameter_block_obu/parameter_id=] is specified in the [=DemixingInfoParameterData()=] class. @@ -1408,6 +1412,8 @@ class RenderingConfig() { leb128() param_definition_type; if (param_definition_type == PARAMETER_DEFINITION_SINGLE_POSITION) { SinglePositionParamDefinition single_position; + } else if (param_definition_type == PARAMETER_DEFINITION_DUAL_POSITION) { + DualPositionParamDefinition dual_position; } else { leb128() rendering_config_params_extension_size; @@ -1439,6 +1445,7 @@ Parsers encountering a reserved value of [=headphones_rendering_mode=] SHALL ign - The type SHALL NOT be duplicated in one [=RenderingConfig()=]. - The PARAMETER_DEFINITION_SINGLE_POSITION type SHALL be present only when the referenced [=Audio Element=] has [=audio_element_type=] = OBJECT_BASED and [=num_objects=] = 1. +- The PARAMETER_DEFINITION_DUAL_POSITION type SHALL be present only when the referenced [=Audio Element=] has [=audio_element_type=] = OBJECT_BASED and [=num_objects=] = 2. - The following types SHALL NOT be present in [=RenderingConfig()=]: - PARAMETER_DEFINITION_MIX_GAIN - PARAMETER_DEFINITION_DEMIXING @@ -1446,6 +1453,8 @@ Parsers encountering a reserved value of [=headphones_rendering_mode=] SHALL ign single_position is an instance of the [=SinglePositionParamDefinition()=] class. It provides the parameter definition for the position that is used when rendering an [=Audio Element=] with one object. The corresponding parameter data to be provided in [=Parameter Block OBU=]s with the same [=parameter_block_obu/parameter_id=] is specified in the [=SinglePositionParameterData()=] class. +dual_position is an instance of the [=DualPositionParamDefinition()=] class. It provides the parameter definition for the position that is used when rendering an [=Audio Element=] with two objects. The corresponding parameter data to be provided in [=Parameter Block OBU=]s with the same [=parameter_block_obu/parameter_id=] is specified in the [=DualPositionParameterData()=] class. + rendering_config_params_extension_size indicates the size in bytes of [=rendering_config_params_extension_bytes=]. rendering_config_params_extension_bytes represents reserved bytes for future use. Parsers that don't understand these bytes SHOULD ignore them. @@ -1485,6 +1494,40 @@ where 0 degrees is horizontally ahead and positive angles are going up, followin default_distance specifies the default distance, when there are no [=Parameter Block OBU=]s with the same [=parameter_block_obu/parameter_id=] provided. The value is expressed as a normalized distance from the origin in the range [0.0, 1.0], where 1.0 is on the surface of the unit sphere. +### Dual Position Parameter Definition Syntax and Semantics ### {#syntax-dual-position-parameter-definition} + +The DualPositionParamDefinition() class provides the parameter definition for two objects' positions. + +This section specifies the syntax structures of the [=DualPositionParamDefinition()=] class. + +Syntax + +``` +class DualPositionParamDefinition() extends ParamDefinition() { + signed int (9) default_first_azimuth; + signed int (8) default_first_elevation; + unsigned int (3) default_first_distance; + + signed int (9) default_second_azimuth; + signed int (8) default_second_elevation; + unsigned int (3) default_second_distance; +} +``` + +Semantics + +default_first_azimuth is the same as [=default_azimuth=] in [=SinglePositionParamDefinition()=] except that this applies to the first object in the referenced [=Audio Substream=]. + +default_first_elevation is the same as [=default_elevation=] in [=SinglePositionParamDefinition()=] except that this applies to the first object in the referenced [=Audio Substream=]. + +default_first_distance is the same as [=default_distance=] in [=SinglePositionParamDefinition()=] except that this applies to the first object in the referenced [=Audio Substream=]. + +default_second_azimuth is the same as [=default_azimuth=] in [=SinglePositionParamDefinition()=] except that this applies to the second object in the referenced [=Audio Substream=]. + +default_second_elevation is the same as [=default_elevation=] in [=SinglePositionParamDefinition()=] except that this applies to the second object in the referenced [=Audio Substream=]. + +default_second_distance is the same as [=default_distance=] in [=SinglePositionParamDefinition()=] except that this applies to the second object in the referenced [=Audio Substream=]. + ### Mix Gain Parameter Definition Syntax and Semantics ### {#syntax-mixgain-parameter-definition} @@ -1714,6 +1757,9 @@ class ParameterBlockOBU() { else if (param_definition_type == PARAMETER_DEFINITION_SINGLE_POSITION) { SinglePositionParameterData single_position_parameter_data; } + else if (param_definition_type == PARAMETER_DEFINITION_DUAL_POSITION) { + DualPositionParameterData dual_position_parameter_data; + } else { leb128() parameter_data_size; unsigned int (8 x parameter_data_size) parameter_data_bytes; @@ -1756,6 +1802,8 @@ The values of [=parameter_block_obu/duration=], [=parameter_block_obu/constant_s single_position_parameter_data is an instance of the [=SinglePositionParameterData()=] class, which provides the parameter values to apply in this parameter block. +dual_position_parameter_data is an instance of the [=DualPositionParameterData()=] class, which provides the parameter values to apply in this parameter block. + parameter_data_size indicates the size in bytes of [=parameter_data_bytes=]. parameter_data_bytes represents reserved bytes for future use when new syntaxes are defined. Parsers that don't understand these bytes SHOULD ignore them. @@ -1954,6 +2002,46 @@ where 0 degrees is horizontally ahead and positive angles are going up, followin +### Dual Position Parameter Data Syntax and Semantics ### {#syntax-dual-position-param} + +The DualPositionParameterData() class provides the position parameter data to be used when rendering an object-based [=Audio Element=] with two objects. This section specifies the syntax structure of the [=DualPositionParameterData()=] class. + +Syntax + +``` +class DualPositionParameterData() { + leb128() dual_position_parameter_data_size; + leb128() animation_type; + + AnimatedParameterData first_azimuth; + AnimatedParameterData first_elevation; + AnimatedParameterData first_distance; + + AnimatedParameterData second_azimuth; + AnimatedParameterData second_elevation; + AnimatedParameterData second_distance; +} +``` + +Semantics + +dual_position_parameter_data_size indicates the size in bytes of [=DualPositionParameterData()=] immediately following this field. Parsers SHOULD ignore bytes past the [=DualPositionParameterData()=] syntax that they recognize. + +animation_type specifies the type of animation applied to the parameter values. Supported values are defined in the [=Animation Types=] table. When an unknown value of [=dual_position_param_data/animation_type=] is used, parsers SHOULD ignore the [=Parameter Block OBU=] that contains this [=dual_position_parameter_data=]. + +first_azimuth is the same as [=azimuth=] in [=SinglePositionParameterData()=] except that this applies to the first object in the referenced [=Audio Substream=]. + +first_elevation is the same as [=elevation=] in [=SinglePositionParameterData()=] except that this applies to the first object in the referenced [=Audio Substream=]. + +first_distance is the same as [=distance=] in [=SinglePositionParameterData()=] except that this applies to the first object in the referenced [=Audio Substream=]. + +second_azimuth is the same as [=azimuth=] in [=SinglePositionParameterData()=] except that this applies to the second object in the referenced [=Audio Substream=]. + +second_elevation is the same as [=elevation=] in [=SinglePositionParameterData()=] except that this applies to the second object in the referenced [=Audio Substream=]. + +second_distance is the same as [=distance=] in [=SinglePositionParameterData()=] except that this applies to the second object in the referenced [=Audio Substream=]. + + ## Audio Frame OBU Syntax and Semantics ## {#obu-audioframe} The Audio Frame OBU provides the coded audio frame for an [=Audio Substream=]. This section specifies the payload format of the [=Audio Frame OBU=].