From 1e4e4dc8d9df3ad35d95fe846a0942efeaba2e8d Mon Sep 17 00:00:00 2001 From: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> Date: Tue, 28 May 2024 14:56:22 +0900 Subject: [PATCH 01/12] Fix #815, typo correction on static down-mix matrix --- index.bs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/index.bs b/index.bs index 3a6294c9..9edc8b73 100644 --- a/index.bs +++ b/index.bs @@ -2683,8 +2683,10 @@ The 3.1.2ch down-mix matrix for 7.1.4ch is given below, where \(p = 0.707\). \text{Rss} \\ \text{Lrs} \\ \text{Rrs} \\ - \text{Ltf2} \\ - \text{Rtf2} \\ + \text{Ltf4} \\ + \text{Rtf4} \\ + \text{Ltb} \\ + \text{Rtb} \\ \text{LFE} \end{bmatrix} \] From ab288022650cb2e2c55d8300c7ed7a845df159f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=A9=EC=84=B1=ED=9D=AC/=EC=B0=A8=EC=84=B8=EB=8C=80=20?= =?UTF-8?q?Display=20Lab=28SR=29/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Tue, 28 May 2024 15:07:27 +0900 Subject: [PATCH 02/12] Fix #816, delete unused image file --- images/Recon_Gain_Flags.png | Bin 46903 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/Recon_Gain_Flags.png diff --git a/images/Recon_Gain_Flags.png b/images/Recon_Gain_Flags.png deleted file mode 100644 index 041f0198af1d28b72098c7c06d558fb1d4305116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46903 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 From 0b254fcfb0727d9c01a0eb5f801c074808f8b180 Mon Sep 17 00:00:00 2001 From: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> Date: Tue, 28 May 2024 15:59:27 +0900 Subject: [PATCH 03/12] Fix #817, leb128() is limited to 8 bytes. --- index.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.bs b/index.bs index 3a6294c9..61615762 100644 --- a/index.bs +++ b/index.bs @@ -2702,7 +2702,7 @@ All syntax elements conform to the [=Syntactic Description Language=] specified leb128() indicates the type of an unsigned integer. To encode the following unsigned integer syntaxName, it first represents the integer in binary with an N-bit representation, where N is a multiple of 7. Then break the integer up into groups of 7 bits. Output one encoded byte for each 7 bits group, from least significant to most significant group. Each byte will have the group in its 7 least significant bits. Set the most significant bit on each byte except the last byte. - syntaxName is an unsigned integer which is encoded by leb128(). The size of the unsigned integer to be encoded is limited to 32 bits. In other words, the value returned from the leb128() parsing process is less than or equal to \(2^{32} - 1\). + syntaxName is an unsigned integer which is encoded by leb128(). The size of the unsigned integer to be encoded is limited to 32 bits. In other words, the value returned from the leb128() parsing process is less than or equal to \(2^{32} - 1\). After encoding by leb128(), its size is limited to 8 bytes. NOTE: There are multiple ways of encoding the same value depending on how many leading zero bits are encoded. There is no requirement that this syntax descriptor uses the most compressed representation. This can be useful for encoder implementations by allowing a fixed amount of space to be filled in later when the value becomes known. From 4f58927b2ef195b3495903c6618e1eae85eea0e7 Mon Sep 17 00:00:00 2001 From: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> Date: Tue, 28 May 2024 17:16:46 +0900 Subject: [PATCH 04/12] Missed maximum --- index.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.bs b/index.bs index 61615762..edd52f3a 100644 --- a/index.bs +++ b/index.bs @@ -2702,7 +2702,7 @@ All syntax elements conform to the [=Syntactic Description Language=] specified leb128() indicates the type of an unsigned integer. To encode the following unsigned integer syntaxName, it first represents the integer in binary with an N-bit representation, where N is a multiple of 7. Then break the integer up into groups of 7 bits. Output one encoded byte for each 7 bits group, from least significant to most significant group. Each byte will have the group in its 7 least significant bits. Set the most significant bit on each byte except the last byte. - syntaxName is an unsigned integer which is encoded by leb128(). The size of the unsigned integer to be encoded is limited to 32 bits. In other words, the value returned from the leb128() parsing process is less than or equal to \(2^{32} - 1\). After encoding by leb128(), its size is limited to 8 bytes. + syntaxName is an unsigned integer which is encoded by leb128(). The size of the unsigned integer to be encoded is limited to 32 bits. In other words, the value returned from the leb128() parsing process is less than or equal to \(2^{32} - 1\). After encoding by leb128(), its maximum size is limited to 8 bytes. NOTE: There are multiple ways of encoding the same value depending on how many leading zero bits are encoded. There is no requirement that this syntax descriptor uses the most compressed representation. This can be useful for encoder implementations by allowing a fixed amount of space to be filled in later when the value becomes known. From ac66f311549bc07c54a86627ccb6e16d587cb97c Mon Sep 17 00:00:00 2001 From: Felicia Lim Date: Tue, 28 May 2024 11:02:08 -0700 Subject: [PATCH 05/12] Clarify text indicating the input layout to use for rendering Fix #807: Selection of layout to use for pass-through rendering is ambiguous --- index.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.bs b/index.bs index 3a6294c9..85d3bd30 100644 --- a/index.bs +++ b/index.bs @@ -2364,7 +2364,7 @@ This section defines the renderer to use, given a channel-based [=Audio Element= - The input layout (x.y.z) of the IA renderer is set as follows: - If [=num_layers=] = 1, use the [=loudspeaker_layout=] of the [=Audio Element=]. - - Else, if there is an [=Audio Element=] with a [=loudspeaker_layout=] that matches the playback layout, use it. + - Else, if the [=Audio Element=] has a [=loudspeaker_layout=] that matches the playback layout, use that matching [=loudspeaker_layout=]. - Else, use the next highest available layout from all available [=loudspeaker_layout=]s. - The output layout of the IA renderer is set to the playback layout (X.Y.Z). - The IA renderer is selected according to the following rules: From a56796b22a051f5a406208dd22ef4e627e06f0a0 Mon Sep 17 00:00:00 2001 From: Felicia Lim Date: Tue, 28 May 2024 11:21:25 -0700 Subject: [PATCH 06/12] Reword restriction on obu_size Fix #806: Clarify the obu_size restriction holds if not encoded with padded leb128 bytes --- index.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.bs b/index.bs index 3a6294c9..2822f39e 100644 --- a/index.bs +++ b/index.bs @@ -1827,7 +1827,7 @@ NOTE: [[#profiles-simple|Simple Profile]] or [[#profiles-base|Base Profile]] req NOTE: In this section and subsections, the meaning of a unique OBU is that it is still unique if it only varies by the [=obu_redundant_copy=] flag. Common restrictions on the [=IA Sequence=] for all profiles specified in this version of the specification: -- The maximum size of an OBU (an [=OBU Header=] followed by the OBU payload) SHALL be limited to \(2\text{MB}\) (i.e., \(2^{21}\) bytes). It implies that the maximum value of the [=obu_size=] field SHALL be limited to \(2^{21} - 4\). +- The maximum size of an OBU (an [=OBU Header=] followed by the OBU payload) SHALL be limited to \(2\text{MB}\) (i.e., \(2^{21}\) bytes). It implies that the maximum value of the [=obu_size=] field SHALL be limited to \(2^{21} - 4\), in the case where [=obu_size=] is encoded using the most compressed leb128() representation. - There SHALL be only one unique set of [=Descriptors=] in an [=IA Sequence=]. If the [=Descriptors=] are repeated in the middle of the [=IA Sequence=], all the OBUs in that set of [=Descriptors=] SHALL be marked as redundant (i.e., [=obu_redundant_copy=] = 1). - When a set of [=Descriptors=] is placed in the middle of the [=IA Sequence=], it SHALL NOT be placed in the middle of a [=Temporal Unit=]. In other words, if [=Descriptors=] are placed mid-sequence, they SHALL be present only after the last OBU of a [=Temporal Unit=] and before the first OBU of the next [=Temporal Unit=]. - There SHALL be only one unique [=Codec Config OBU=]. From 331a1ccced48019393dbb1adee9be40033a54837 Mon Sep 17 00:00:00 2001 From: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> Date: Tue, 18 Jun 2024 08:22:43 +0900 Subject: [PATCH 07/12] Fix #819, Base-Enhanced Profile (#828) * Fix #819, Base-Enhanced Profile * Implement reviewer's suggesetion * Implement reviewer's suggesetion * Implement reviewer's suggesetion * Implement reviewer's suggesetion * Implement reviewer's suggesetion * Fix preview error * Implement reviewer's comments * More clarified meaning of 28 channels --- index.bs | 54 +++++++++++++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/index.bs b/index.bs index 1e87dedd..7f67bed8 100644 --- a/index.bs +++ b/index.bs @@ -560,11 +560,12 @@ NOTE: When IA OBUs are delivered over a protocol that does not provide explicit The mappings below are applied for both [=primary_profile=] and [=additional_profile=]. - 0: Simple Profile - 1: Base Profile -- 2~255: Reserved +- 2: Base-Enhanced Profile +- 3~255: Reserved additional_profile indicates an additional profile that this [=IA Sequence=] complies with. If an [=IA Sequence=] only complies with the [=primary_profile=], this field SHALL be set to the same value as [=primary_profile=]. -NOTE: If a future version defines a new profile, e.g., HypotheticalProfile, that is backward compatible with the [[#profiles-base|Base Profile]], for example by defining new OBUs that would be ignored by the Base-compatible parser, an IA writer can decide to set the [=primary_profile=] to "Base Profile" while setting the [=additional_profile=] to "HypotheticalProfile". This way an old processor will know it can parse and produce an acceptable rendering, while a new processor still knows it can produce a better result because it will not ignore the additional features. +NOTE: If a future version defines a new profile, e.g., HypotheticalProfile, that is backward compatible with the [[#profiles-base-enhanced|Base-Enhanced Profile]], for example by defining new OBUs that would be ignored by the Base-Enhanced-compatible parser, an IA writer can decide to set the [=primary_profile=] to "Base-Enhanced Profile" while setting the [=additional_profile=] to "HypotheticalProfile". This way an old processor will know it can parse and produce an acceptable rendering, while a new processor still knows it can produce a better result because it will not ignore the additional features. ## Codec Config OBU Syntax and Semantics ## {#obu-codecconfig} @@ -1186,7 +1187,7 @@ class MixPresentationOBU() { num_audio_elements specifies the number of [=Audio Element=]s that are used in each sub-mix of this [=Mix Presentation=] to generate the final output audio signal for playback. It SHALL NOT be set to 0. There SHALL be no duplicate values of [=audio_element_obu/audio_element_id=] within one [=Mix Presentation=]. -audio_element_id indicates the identifier for an [=Audio Element=] which this [=Mix Presentation=] refers to. +audio_element_id indicates the identifier for an [=Audio Element=] which this [=Mix Presentation=] refers to. Parsers SHOULD ignore the [=Mix Presentation OBU=] with an [=Audio Element=] that they don't recognize. mix_presentation_element_annotations is an instance of the [=MixPresentationElementAnnotations()=] class, which provides informational metadata that the playback system MAY use to display information to the user. It is not used in the rendering or mixing process to generate the final output audio signal. @@ -1818,11 +1819,11 @@ NOTE: In this version of the specification, profiles impose constraints on how m IA decoders SHALL be able to parse all OBUs explicitly listed for this version of the specification. They can still encounter [=Reserved OBU=]s that they SHOULD skip. This allows future versions of the specification to define new profiles that can be backward compatible with old profiles. -In this context, for a given [=IA Sequence=] with [=primary_profile=] or [=additional_profile=] set to [[#profiles-simple|Simple Profile]] or [[#profiles-base|Base Profile]], a [=Reserved OBU=] SHALL be regarded as either a part of a set of [=Descriptors=] or a part of a [=Temporal Unit=] with the following restrictions: +In this context, for a given [=IA Sequence=] with [=primary_profile=] or [=additional_profile=] set to [[#profiles-simple|Simple Profile]], [[#profiles-base|Base Profile]], or [[#profiles-base-enhanced|Base-Enhanced Profile]], a [=Reserved OBU=] SHALL be regarded as either a part of a set of [=Descriptors=] or a part of a [=Temporal Unit=] with the following restrictions: - The [=Reserved OBU=] SHALL not be present between [=Mix Presentation OBU=]s. - A [=Mix Presentation OBU=] SHALL be the final OBU of [=Descriptors=]. -NOTE: [[#profiles-simple|Simple Profile]] or [[#profiles-base|Base Profile]] requires a [=Temporal Delimiter OBU=] to be the first OBU of a [=Temporal Unit=] if the OBU is present. This restriction can be used to identify which [=Temporal Unit=] a [=Reserved OBU=] is a part of. +NOTE: All profiles require a [=Temporal Delimiter OBU=] to be the first OBU of a [=Temporal Unit=] if the OBU is present. This restriction can be used to identify which [=Temporal Unit=] a [=Reserved OBU=] is a part of. NOTE: In this section and subsections, the meaning of a unique OBU is that it is still unique if it only varies by the [=obu_redundant_copy=] flag. @@ -1839,50 +1840,45 @@ Common restrictions on the [=IA Sequence=] for all profiles specified in this ve - There SHALL be no redundant [=Parameter Block OBU=]s. - [=Parameter Block OBU=]s SHALL come first and SHALL be followed by [=Audio Frame OBU=]s. - [=num_sub_mixes=] SHOULD be set to 1. [=Mix Presentation OBU=]s with [=num_sub_mixes=] > 1 SHOULD be ignored. -- [=num_audio_elements=] SHOULD be set to 1 or 2. [=Mix Presentation OBU=]s with [=num_audio_elements=] > 2 SHOULD be ignored. +- [=num_audio_elements=] SHOULD be set to at most 28. [=Mix Presentation OBU=]s with [=num_audio_elements=] > 28 SHOULD be ignored. NOTE: This behavior is to allow future versions of this specification to define new profiles that support a number of audio elements and/or a number of sub-mixes greater than those recommended in this profile, while still permitting streams compliant with these new profiles to be processed by parsers compliant with the profiles defined in this version of the specification. - When [=num_layers=] = 1, [=DemixingParamDefinition()=] for demixing MAY be present in the [=Audio Element OBU=] and IA decoders MAY use [=demixing_info_parameter_data=] or [=default_demixing_info_parameter_data=] for (dynamic) down-mixing. - The limit on the number of channels, which profiles MAY define, applies to the sum of channels across all [=Audio Element=]s in a [=Mix Presentation=] before mixing. - There MAY be [=Temporal Delimiter OBU=]s present. If present, the first OBU of every [=Temporal Unit=] SHALL be the [=Temporal Delimiter OBU=]. +- There SHALL be at least one [=Mix Presentation OBU=] that complies with the conformance points of the [=primary_profile=] set in the [=IA Sequence=]. ## IA Simple Profile ## {#profiles-simple} This section specifies the conformance points of the simple profile. -When the [=primary_profile=] field is set to 0, the following constraints apply to the [=IA Sequence=]: -- There SHALL be only one unique [=Audio Element OBU=]. +The simple profile complies with that of IAMF specification v1.0.0-errata. -Capabilities of the IA parser, decoder, and processor: -- They SHALL be able to parse an [=IA Sequence=] with [=primary_profile=] = 0. -- They SHALL be able to handle up to 16 channels. -- They SHALL be able to reconstruct one [=Audio Element=]. -- They MAY use [=demixing_info_parameter_data=] or [=default_demixing_info_parameter_data=] to do down-mixing. ## IA Base Profile ## {#profiles-base} This section specifies the conformance points of the base profile. -When the [=primary_profile=] field is set to 1, the following constraints apply to the [=IA Sequence=]: -- There SHALL be at most two unique [=Audio Element OBU=]s. - - There SHALL be at most one Channel-based [=Audio Element=] having [=num_layers=] > 1 at any one time. - - There SHALL be at most one Scene-based [=Audio Element=] at any one time. - - In other words, only the following combinations of two [=Audio Element=]s are allowed. - - Channel-based [=Audio Element=] having [=num_layers=] = 1 + Channel-based [=Audio Element=] having [=num_layers=] = 1. - - Channel-based [=Audio Element=] having [=num_layers=] = 1 + Channel-based [=Audio Element=] having [=num_layers=] > 1. - - Scene-based [=Audio Element=] + Channel-based [=Audio Element=] having [=num_layers=] = 1. - - Scene-based [=Audio Element=] + Channel-based [=Audio Element=] having [=num_layers=] > 1. +The base profile complies with that of IAMF specification v1.0.0-errata. -Capabilities of the IA parser, decoder, and processor: -- They SHALL be able to support the capabilities of the [[#profiles-simple|Simple Profile]]. -- They SHALL be able to parse an [=IA Sequence=] with [=primary_profile=] = 1. -- They SHALL be able to handle up to 18 channels. - - One example is a mix with 3rd-order Ambisonics (16 channels) + non-diegetic stereo (2 channels). -- They SHALL be able to reconstruct two [=Audio Element=]s. -- They SHALL be able to mix two [=Audio Element=]s. +## IA Base-Enhanced Profile ## {#profiles-base-enhanced} + +This section specifies the conformance points of the base-enhanced profile. + +When the [=primary_profile=] field is set to 2, the following constraints apply to the [=IA Sequence=]: +- There SHALL be at least one [=Mix Presentation OBU=] for at most 28 [=Audio Element=]s that parsers, which comply with the base-enhanced profile, recognize. + +Capabilities of the IA parser, decoder, and processor: +- They SHALL be able to support the capabilities of the [[#profiles-base|Base Profile]]. +- They SHALL be able to parse an [=IA Sequence=] with [=primary_profile=] = 2. +- They SHALL be able to handle up to 28 channels. + - The 28 channels limit applies to the sum of channels across all [=Audio Element=]s in a [=Mix Presentation=] before mixing. + - One example is a mix with 3rd-order Ambisonics (16 channels) + 7.1.4ch (12 channels). +- They SHALL be able to reconstruct 28 [=Audio Element=]s. +- They SHALL be able to mix 28 [=Audio Element=]s. # Standalone IAMF Representation # {#standalone} From 1feceaf1618bccb754a07f57121495de2fd8dd37 Mon Sep 17 00:00:00 2001 From: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> Date: Tue, 18 Jun 2024 08:24:06 +0900 Subject: [PATCH 08/12] Fix #821, updated version of Expanded Loudspeaker Layout (#831) * Fix #821, updated version of Expanded Loudspeaker Layout * Follow reviewer's suggestion Co-authored-by: Felicia Lim * Follow reviewer's suggestion Co-authored-by: Felicia Lim * Follow reviewer's suggestion Co-authored-by: Felicia Lim * Follow reviewer's suggestion Co-authored-by: Felicia Lim * Follow reviewer's suggestion * Fix incorrect sentence --------- Co-authored-by: Felicia Lim --- index.bs | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/index.bs b/index.bs index 7f67bed8..e425b0a3 100644 --- a/index.bs +++ b/index.bs @@ -889,6 +889,8 @@ class ChannelAudioLayerConfig(i) { unsigned int (2) reserved; signed int (16) output_gain(i); } + if (i == 1 && [=loudspeaker_layout=] == 15) + unsigned int (8) expanded_loudspeaker_layout; } ``` @@ -902,11 +904,11 @@ class ChannelAudioLayerConfig(i) { loudspeaker_layout indicates the channel layout to be reconstructed from the precedent [=Channel Group=]s and current [=Channel Group=]. If parsers do not recognize a [=loudspeaker_layout=] for a particular layer, they SHOULD skip the [=channel_audio_layer_config=] for that layer and all subsequent layers. -In this version of the specification, [=loudspeaker_layout=] indicates one of the 10 channel layouts listed below. +In this version of the specification, [=loudspeaker_layout=] indicates one of the channel layouts listed below. - + @@ -939,8 +941,12 @@ In this version of the specification, [=loudspeaker_layout=] indicates one of th - + + + + +
loudspeaker_layoutChannel LayoutLoudspeaker Location OrderingReferenceloudspeaker_layoutChannel LayoutLoudspeaker Location OrderingReference
0000MonoC1001BinauralL/R
othersReserved1010 ~ 1110Reserved
1111Expanded channel layoutsLoudspeaker configurations defined in the [=expanded_loudspeaker_layout=] field
Where C: Center, L: Left, R: Right, Ls: Left Surround, Lss: Left Side Surround, Rs: Right Surround, Rss: Right Side Surround, Lrs: Left Rear Surround, Rrs: Right Rear Surround, Ltf: Left Top Front, Rtf: Right Top Front, Ltr: Left Top Rear, Rtr: Right Top Rear, Ltb: Left Top Back, Rtb: Right Top Back, LFE: Low-Frequency Effects @@ -953,6 +959,8 @@ For a given input [=3D audio signal=] with [=audio_element_type=] = CHANNEL_BASE NOTE: This specification allows down-mixing mechanisms (e.g., as specified in [[#iamfgeneration-scalablechannelaudio-downmixmechanism]]) to drop the height channel if the output layout has no height channels. An example is down-mixing from 7.1.4ch to Mono, Stereo, 5.1ch or 7.1ch. Therefore, given an input [=3D audio signal=] with height channels, an encoder may generate a set of scalable audio channel groups with layouts that do not have height channels. +For a given input [=3D audio signal=] with an expanded channel layout defined in [=expanded_loudspeaker_layout=], [=num_layers=] SHALL be set to 1 (i.e., it is a non-scalable channel audio element). It is RECOMMENDED to use such an [=Audio Element=] as an auxiliary [=Audio Element=] to be mixed with a primary [=Audio Element=] (e.g., TOA or 7.1.4ch) within a [=Mix Presentation=]. If parsers encounter a [=loudspeaker_layout=] = 15 for any layer other than the first layer, they SHOULD skip the [=channel_audio_layer_config=] for that layer and all subsequent layers. + output_gain_is_present_flag indicates if the output_gain information fields for the [=Channel Group=] are present. - 0: No output_gain information fields for the [=Channel Group=] are present. - 1: output_gain information fields for the [=Channel Group=] are present. In this case, [=output_gain_flags=] and [=output_gain=] fields are present. @@ -973,7 +981,6 @@ The order of the [=Audio Substream=]s in each [=Channel Group=] is specified in output_gain_flags indicates the channels which [=output_gain=] is applied to. If a bit is set to 1, [=output_gain=] SHALL be applied to the channel. Otherwise, [=output_gain=] SHALL NOT be applied to the channel. -
 Bit position : Channel Name
     b5(MSB)  : Left channel (L1, L2, L3)
@@ -987,6 +994,44 @@ Bit position : Channel Name
 
 output_gain indicates the gain value to be applied to the mixed channels which are indicated by [=output_gain_flags=], where each mixed channel is generated by down-mixing two or more input channels. It is computed as \(20 \times \log_{10}(f)\), where \(f\) is the factor by which to scale the mixed channels. It is stored as a 16-bit, signed, two’s complement fixed-point value with 8 fractional bits (i.e., Q7.8)([[Q-Format]]).
 
+expanded_loudspeaker_layout indicates the expanded channel layout to be reconstructed from the [=Channel Group=]. This field SHALL only be present when [=num_layers=] = 1 and [=loudspeaker_layout=] is set to 15. Parsers SHOULD ignore [=Audio Element OBU=]s with an [=expanded_loudspeaker_layout=] that they do not recognize.
+
+In this version of the specification, [=expanded_loudspeaker_layout=] indicates one of the expanded channel layouts listed below.
+
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+
expanded_loudspeaker_layoutExpanded Channel LayoutLoudspeaker Location OrderingReference
0LFELFEThe low-frequency effects subset (LFE) of 7.1.4ch
1Stereo-SLs/RsThe surround subset (Ls/Rs) of 5.1.4ch
2Stereo-SSLss/RssThe side surround subset (Lss/Rss) of 7.1.4ch
3Stereo-RSLrs/RrsThe rear surround subset (Lrs/Rrs) of 7.1.4ch
4Stereo-TFLtf/RtfThe top front subset (Ltf/Rtf) of 7.1.4ch
5Stereo-TBLtb/RtbThe top back subset (Ltb/Rtb) of 7.1.4ch
6Top-4.0chLtf/Rtf/Ltb/RtbThe top 4 channels (Ltf/Rtf/Ltb/Rtb) of 7.1.4ch
73.0chL/C/RThe front 3 channels (L/C/R) of 7.1.4ch
8 ~ 255Reserved
+ ### Scalable Channel Group and Layout ### {#scalalechannelaudio-channelgroupandlayout} When an [=Audio Element=] is composed of \(G(r)\) number of [=Audio Substream=]s, its scalable channel audio representation is layered into \(r\) [=num_layers=] of [=Channel Group=]s. @@ -2359,7 +2404,11 @@ In this section, for a given x.y.z layout, the next highest layout x'.y'.z' mean This section defines the renderer to use, given a channel-based [=Audio Element=] and a loudspeaker playback layout. - The input layout (x.y.z) of the IA renderer is set as follows: - - If [=num_layers=] = 1, use the [=loudspeaker_layout=] of the [=Audio Element=]. + - If [=num_layers=] = 1, + - If [=loudspeaker_layout=] < 10, use the [=loudspeaker_layout=] of the [=Audio Element=]. + - Else if [=loudspeaker_layout=] = 15, + - If [=expanded_loudspeaker_layout=] = 1, use 5.1.4ch with empty channels everywhere other than the corresponding loudspeaker locations. + - Else, use 7.1.4ch with empty channels everywhere other than the corresponding loudspeaker locations. - Else, if the [=Audio Element=] has a [=loudspeaker_layout=] that matches the playback layout, use that matching [=loudspeaker_layout=]. - Else, use the next highest available layout from all available [=loudspeaker_layout=]s. - The output layout of the IA renderer is set to the playback layout (X.Y.Z). From 843be0e933424aadaa2cdb06e248e153a070800d Mon Sep 17 00:00:00 2001 From: Felicia Lim Date: Mon, 17 Jun 2024 16:26:18 -0700 Subject: [PATCH 09/12] Specify CENC (#827) * Specify CENC Fix 820 * Apply suggestions from code review Co-authored-by: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> * Clarify full sample encryption shall be used * Reduce protection schemes to cenc and cbcs * Update index.bs --------- Co-authored-by: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> --- index.bs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/index.bs b/index.bs index e425b0a3..7a2e55bd 100644 --- a/index.bs +++ b/index.bs @@ -118,6 +118,9 @@ url: https://www.iso.org/standard/77752.html#; spec: MP4-PCM; type: dfn; text: format_flags text: PCM_sample_size +url: https://www.iso.org/standard/84637.html#; spec: CENC; type: dfn; + text: cenc + text: cbcs
@@ -253,6 +256,12 @@ url: https://www.iso.org/standard/77752.html#; spec: MP4-PCM; type: dfn;
 		"status": "Standard",
 		"publisher": "IETF",
 		"href": "https://tools.ietf.org/html/rfc8486"
+	},
+	"CENC": {
+		"title": "Information technology — MPEG systems technologies - Part 7: Common encryption in ISO base media file format files",
+		"status" : "Standard",
+		"publisher" : "ISO/IEC",
+		"href" : "https://www.iso.org/standard/68042.html"
 	}
 }
 
@@ -1979,7 +1988,7 @@ NOTE: In a typical case, the OBUs in the first [=Descriptors=] of an [=IA Sequen A file conformant to this specification satisfies the following: - It SHALL conform to the normative requirements of [[!ISO-BMFF]]. - It SHALL have the iamf brand among the compatible brands array of the FileTypeBox. -- It SHALL contain at least one track using an [=IASampleEntry=]. +- It SHALL contain at least one track using an [=IASampleEntry=], possibly transformed by encryption as specified in [[#commonencryption]]. - It SHOULD indicate a structural ISOBMFF brand among the compatible brands' array of the FileTypeBox, such as 'iso6'. - It MAY indicate other brands not specified in this specification provided that the associated requirements do not conflict with those given in this specification. @@ -2099,6 +2108,12 @@ NOTE: Per the restriction of the profiles carried in an [=IA Track=], all [=Audi NOTE: In typical cases, when a track contains a single [=IA Sequence=], trimming can only happen at the beginning or the end of the [=IA Sequence=]. Therefore, the edit list can describe the start and end trimming with a single edit entry. A track storing consecutive [=IA Sequence=]s may need multiple edits in the edit list. +## Common Encryption ## {#commonencryption} + +[=IA Track=]s MAY be protected. If protected, they SHALL conform to [[!CENC]] and SHALL be protected using the [=cenc=] or [=cbcs=] protection schemes. + +When the protection scheme [=cenc=] is used, an [=IA Track=] SHALL be protected using full sample encryption. When the protection scheme [=cbcs=] is used, an [=IA Track=] SHALL be protected using whole-block full sample encryption. + ## Codecs Parameter String ## {#codecsparameter} DASH and other applications require defined values for the 'codecs' parameter specified in [[!RFC-6381]] for ISO Media tracks. The codecs parameter string for [=codec_id=] SHALL be: From 4d76b54f906891e3ac9358c9460a8dd22f80c517 Mon Sep 17 00:00:00 2001 From: Felicia Lim Date: Mon, 1 Jul 2024 16:05:30 -0700 Subject: [PATCH 10/12] MixPresentationTags syntax and semantics (#832) * MixPresentationTags syntax and semantics * Update index.bs Co-authored-by: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> * Fix typo Co-authored-by: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> * Fix typo Co-authored-by: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> * Clarify that there should not be >1 instances of `tag_name` = "content_language" * Drop mix_presentation_tags_extension_size/bytes * clarify MixPresentationTags are optional Co-authored-by: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> --------- Co-authored-by: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> --- index.bs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/index.bs b/index.bs index 7a2e55bd..f3730218 100644 --- a/index.bs +++ b/index.bs @@ -185,6 +185,12 @@ url: https://www.iso.org/standard/84637.html#; spec: CENC; type: dfn; "publisher": "IETF", "href": "https://www.rfc-editor.org/info/bcp47" }, + "ISO-639-2-Codes": { + "title": "ISO 639-2 Codes for the Representation of Names of Languages", + "status": "Standard", + "publisher": "ISO", + "href": "https://www.loc.gov/standards/iso639-2/php/code_list.php" + }, "FLAC": { "title": "Free Lossless Audio Codec", "status": "Best Practice", @@ -1216,14 +1222,16 @@ class MixPresentationOBU() { ElementMixConfig element_mix_config; } OutputMixConfig output_mix_config; - + leb128() num_layouts; for (j = 0; j < num_layouts; j++) { Layout loudness_layout; LoudnessInfo loudness; } } -} + + MixPresentationTags mix_presentation_tags; +} ``` Semantics @@ -1269,6 +1277,10 @@ If a sub-mix in a [=Mix Presentation OBU=] includes only one single scalable cha - The highest [=loudness_layout=] specified in one sub-mix is the layout that was used for authoring the sub-mix. The exception is when the [=Audio Element=] is a zero-order Ambisonics or Mono channel. - The highest [=loudness_layout=] for a zero-order Ambisonics or Mono channel [=Audio Element=] is Stereo. + +mix_presentation_tags is an instance of the [=MixPresentationTags()=] class, which provides informational metadata about a Mix Presentation, in addition to [=mix_presentation_annotations=]. + +The [=MixPresentationTags()=] class MAY or MAY NOT be present in a [=Mix Presentation OBU=]. If the [=obu_size=] of a [=Mix Presentation OBU=] is greater than the size up to the end of [=num_sub_mixes=] loop, the [=MixPresentationTags()=] SHALL be present in the [=Mix Presentation OBU=]. For a given [=IA Sequence=] with multiple [=Mix Presentation OBU=]s, the [=MixPresentationTags()=] MAY be present in some [=Mix Presentation OBU=]s and MAY NOT be present in the other [=Mix Presentation OBU=]s. ### Mix Presentation Annotations Syntax and Semantics ### {#obu-mixpresentation-annotation} @@ -1507,6 +1519,45 @@ NOTE: [[!ITU-1770-4]] adopts the convention of using the dBov unit for dBFS, whe info_type_bytes represents reserved bytes for future use when new marks of [=info_type=] are defined. Parsers that don't understand these bytes SHOULD ignore them. +### Mix Presentation Tags Syntax and Semantics ### {#obu-mixpresentation-tags} + +The MixPresentationTags() class provides informational metadata about a [=Mix Presentation=]. This section specifies the syntax structure of the [=MixPresentationTags()=] class. + +Syntax +``` +class MixPresentationTags() { + unsigned int (8) num_tags; + for (int i = 0; i < num_tags; i++) { + string tag_name; + string tag_value; + } +} +``` + +Semantics + +num_tags indicates the number of name-value pairs present in this [=Mix Presentation=], where each pair represents a single tag. + +tag_name is the label describing a [=Mix Presentation=] tag. Parsers that don't understand a [=tag_name=] SHOULD ignore it and its corresponding [=tag_value=]. + +This specification supports the following [=tag_name=]s: + +
+tag_name            : Description
+content_language    : Language of the audio content in this Mix Presentation.
+
+ +- There SHALL be at most one instance of [=tag_name=] = "content_language" within one [=Mix Presentation=]. If there are two or more instances of [=tag_name=] = "content_language", parsers SHOULD use the [=tag_value=] corresponding to the first instance, and MAY ignore the remaining instances. + +tag_value is the value of a [=Mix Presentation=] tag. + +- If the corresponding [=tag_name=] = "content_language", the following applies to this [=tag_value=]. + - It indicates the language of the audio content in the associated [=Audio Element=]s within this [=Mix Presentation=]. + - It SHALL conform to [[!ISO-639-2-Codes]]. + - If a [=Mix Presentation=] contains [=Audio Element=]s with different language content, its corresponding [=tag_value=] SHOULD use one of the following [[!ISO-639-2-Codes]] language codes: und or mul. + +NOTE: The language indicated by [=tag_name=] = "content_language" is different from [=language_label=]. The former indicates the language of the audio content in the associated [=Audio Element=]s, while the latter indicates the language of the [=Mix Presentation=] annotations. + ## Parameter Block OBU Syntax and Semantics ## {#obu-parameterblock} The Parameter Block OBU provides the parameter values in [=Parameter Substream=]s and information on how they are animated over the indicated duration. This section specifies the payload format of the [=Parameter Block OBU=]. From d79b5775b6d3366ede4892a6ce67e78e743c1f5b Mon Sep 17 00:00:00 2001 From: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> Date: Tue, 2 Jul 2024 08:07:09 +0900 Subject: [PATCH 11/12] To implement new layouts related to 9.1.6ch (#834) * To implement new layouts related to 9.1.6ch * To reflect reviewer's comment. Co-authored-by: Felicia Lim * To reflect reviewer's comment. Co-authored-by: Felicia Lim * To add layout for 9.1.6ch loudness * To reflect reviewer's comment. * Top-4.0ch to Top-4ch * To add Top-6ch of 9.1.6ch * To add coping LFE1 of 22.2ch to LFE2 of 22.2ch after first rendering an input audio to 22.2ch * to describe down-mixing from 22.2ch to 3.1.2ch * Clarify layout for loudness when using expanded channel layouts --------- Co-authored-by: Felicia Lim --- index.bs | 143 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 122 insertions(+), 21 deletions(-) diff --git a/index.bs b/index.bs index f3730218..430efafa 100644 --- a/index.bs +++ b/index.bs @@ -938,7 +938,7 @@ In this version of the specification, [=loudspeaker_layout=] indicates one of th 00115.1.2chL/C/R/Ls/Rs/Ltf/Rtf/LFE[=Loudspeaker configuration for Sound System C (2+5+0)=] of [[!ITU-2051-3]] - 01005.1.4chL/C/R/Ls/Rs/Ltf/Rtf/Ltr/Rtr/LFE[=Loudspeaker configuration for Sound System D (4+5+0)=] of [[!ITU-2051-3]] + 01005.1.4chL/C/R/Ls/Rs/Ltf/Rtf/Ltr/Rtr/LFE[=Loudspeaker configuration for Sound System D (4+5+0)=] of [[!ITU-2051-3]] 01017.1chL/C/R/Lss/Rss/Lrs/Rrs/LFE[=Loudspeaker configuration for Sound System I (0+7+0)=] of [[!ITU-2051-3]] @@ -974,8 +974,6 @@ For a given input [=3D audio signal=] with [=audio_element_type=] = CHANNEL_BASE NOTE: This specification allows down-mixing mechanisms (e.g., as specified in [[#iamfgeneration-scalablechannelaudio-downmixmechanism]]) to drop the height channel if the output layout has no height channels. An example is down-mixing from 7.1.4ch to Mono, Stereo, 5.1ch or 7.1ch. Therefore, given an input [=3D audio signal=] with height channels, an encoder may generate a set of scalable audio channel groups with layouts that do not have height channels. -For a given input [=3D audio signal=] with an expanded channel layout defined in [=expanded_loudspeaker_layout=], [=num_layers=] SHALL be set to 1 (i.e., it is a non-scalable channel audio element). It is RECOMMENDED to use such an [=Audio Element=] as an auxiliary [=Audio Element=] to be mixed with a primary [=Audio Element=] (e.g., TOA or 7.1.4ch) within a [=Mix Presentation=]. If parsers encounter a [=loudspeaker_layout=] = 15 for any layer other than the first layer, they SHOULD skip the [=channel_audio_layer_config=] for that layer and all subsequent layers. - output_gain_is_present_flag indicates if the output_gain information fields for the [=Channel Group=] are present. - 0: No output_gain information fields for the [=Channel Group=] are present. - 1: output_gain information fields for the [=Channel Group=] are present. In this case, [=output_gain_flags=] and [=output_gain=] fields are present. @@ -989,8 +987,8 @@ For a given input [=3D audio signal=] with an expanded channel layout defined in coupled_substream_count specifies the number of referenced [=Audio Substream=]s, each of which is coded as coupled stereo channels. Each pair of [=Coupled stereo channels|coupled stereo channels=] in the same [=Channel Group=] SHALL be coded in stereo mode to generate one single coded [=Audio Substream=], also referred to as a coupled substream. Each [=Non-coupled channels|non-coupled channel=] in the same [=Channel Group=] SHALL be coded in mono mode to generate one single coded [=Audio Substream=], also known as a non-coupled substream. -- Coupled stereo channels: L/R, Ls/Rs, Lss/Rss, Lrs/Rrs, Ltf/Rtf, Ltb/Rtb -- Non-coupled channels: C, LFE, L +- Coupled stereo channels: L/R, Ls/Rs, Lss/Rss, Lrs/Rrs, Ltf/Rtf, Ltb/Rtb, FLc/FRc, FL/FR, SiL/SiR, BL/BR, TpFL/TpFR, TpSiL/TpSiR, TpBL/TpBR +- Non-coupled channels: C, LFE, L, FC, LFE1 The order of the [=Audio Substream=]s in each [=Channel Group=] is specified in [[#scalablechannelaudio-orderingofaudiosubstreamidentifiers]]. @@ -1018,35 +1016,58 @@ In this version of the specification, [=expanded_loudspeaker_layout=] indicates expanded_loudspeaker_layoutExpanded Channel LayoutLoudspeaker Location OrderingReference - 0LFELFEThe low-frequency effects subset (LFE) of 7.1.4ch + 0LFELFEThe low-frequency effects subset (LFE) of [=7.1.4ch=] + + + 1Stereo-SLs/RsThe surround subset (Ls/Rs) of [=5.1.4ch=] + + + 2Stereo-SSLss/RssThe side surround subset (Lss/Rss) of [=7.1.4ch=] + + + 3Stereo-RSLrs/RrsThe rear surround subset (Lrs/Rrs) of [=7.1.4ch=] - 1Stereo-SLs/RsThe surround subset (Ls/Rs) of 5.1.4ch + 4Stereo-TFLtf/RtfThe top front subset (Ltf/Rtf) of [=7.1.4ch=] - 2Stereo-SSLss/RssThe side surround subset (Lss/Rss) of 7.1.4ch + 5Stereo-TBLtb/RtbThe top back subset (Ltb/Rtb) of [=7.1.4ch=] - 3Stereo-RSLrs/RrsThe rear surround subset (Lrs/Rrs) of 7.1.4ch + 6Top-4chLtf/Rtf/Ltb/RtbThe top 4 channels (Ltf/Rtf/Ltb/Rtb) of [=7.1.4ch=] - 4Stereo-TFLtf/RtfThe top front subset (Ltf/Rtf) of 7.1.4ch + 73.0chL/C/RThe front 3 channels (L/C/R) of [=7.1.4ch=] - 5Stereo-TBLtb/RtbThe top back subset (Ltb/Rtb) of 7.1.4ch + 89.1.6ch[=Loudspeaker location ordering of 9.1.6ch=]The subset of [=Loudspeaker configuration for Sound System H (9+10+3)=] of [[!ITU-2051-3]] - 6Top-4.0chLtf/Rtf/Ltb/RtbThe top 4 channels (Ltf/Rtf/Ltb/Rtb) of 7.1.4ch + 9Stereo-FFL/FRThe front subset (FL/FR) of [=9.1.6ch=] - 73.0chL/C/RThe front 3 channels (L/C/R) of 7.1.4ch + 10Stereo-SiSiL/SiRThe side subset (SiL/SiR) of [=9.1.6ch=] - 8 ~ 255Reserved + 11Stereo-TpSiTpSiL/TpSiRThe top side subset (TpSiL/TpSiR) of [=9.1.6ch=] + + + 12Top-6chTpFL/TpFR/TpSiL/TpSiR/TpBL/TpBRThe top 6 channels (TpFL/TpFR/TpSiL/TpSiR/TpBL/TpBR) of [=9.1.6ch=] + + + 13 ~ 255Reserved +Loudspeaker location ordering of 9.1.6ch: FLc/FC/FRc/FL/FR/SiL/SiR/BL/BR/TpFL/TpFR/TpSiL/TpSiR/TpBL/TpBR/LFE1 + +Where FLc: Front Left Centre, FC: Front Centre, FRc: Front Right Centre, FL: Front Left, FR: Front Right, SiL: Side Left, SiR: Side Right, BL: Back Left, BR: Back Right, TpFL: Top Front Left, TpFR: Top Front Right, TpSiL: Top Side Left, TpSiR: Top Side Right, TpBL: Top Back Left, TpBR: Top Back Right, LFE1: Low-Frequency Effects-1 + +For a given input [=3D audio signal=] with an expanded channel layout defined in [=expanded_loudspeaker_layout=], [=num_layers=] SHALL be set to 1 (i.e., it is a non-scalable channel audio element). Except [=9.1.6ch=] [=Audio Element=], it is RECOMMENDED to use such an [=Audio Element=] as an auxiliary [=Audio Element=] to be mixed with a primary [=Audio Element=] (e.g., TOA or 7.1.4ch) within a [=Mix Presentation=]. If parsers encounter a [=loudspeaker_layout=] = 15 for any layer other than the first layer, they SHOULD skip the [=channel_audio_layer_config=] for that layer and all subsequent layers. + +The following channel layouts may be indicated using an existing [=loudspeaker_layout=] or [=expanded_loudspeaker_layout=]. The stereo pair FLc/FRc is indicated using Stereo (L/R), the stereo pair BL/BR is indicated using Stereo-RS (Lrs/Rrs), the stereo pair TpFL/TpFR is indicated using Stereo-TF (Ltf/Rtf), the stereo pair TpBL/TpBR is indicated using Stereo-TB (Ltb/Rtb), and FLc/FC/FRc is indicated using 3.0ch (L/C/R). + ### Scalable Channel Group and Layout ### {#scalalechannelaudio-channelgroupandlayout} When an [=Audio Element=] is composed of \(G(r)\) number of [=Audio Substream=]s, its scalable channel audio representation is layered into \(r\) [=num_layers=] of [=Channel Group=]s. @@ -1127,7 +1148,7 @@ The order of the [=Audio Substream=]s in each [=Channel Group=] (i.e., the seman - The [=coupled substream=]s for the surround channels come first and are followed by the [=coupled substream=]s for the top channels. - The [=coupled substream=]s for the front channels come first and are followed by the [=coupled substream=]s for the side, rear and back channels. - The [=coupled substream=]s for the side channels come first and are followed by the [=coupled substream=]s for the rear channels. -- The Center channel comes first and is followed by the LFE channel, and then the L channel. +- The Center (or Front Centre) channel comes first and is followed by the LFE (or LFE1) channel, and then the L channel. ### Ambisonics Config Syntax and Semantics ### {#syntax-ambisonics-config} @@ -1265,7 +1286,7 @@ class MixPresentationOBU() { loudness is an instance of the [=LoudnessInfo()=] class, which provides the loudness information for this sub-mix's [=Rendered Mix Presentation=], measured on the layout provided by [=loudness_layout=]. -The layout specified in [=loudness_layout=] SHOULD NOT be higher than the highest layout among the layouts provided by the [=Audio Element=]s. In other words, rendering from an [=Audio Element=] with the highest layout to the [=loudness_layout=] SHOULD NOT require an up-mix. The exception is when the [=Audio Element=] is a zero-order Ambisonics or Mono channel; they MAY be rendered to Stereo. In this exception case, the [=loudness_layout=] for a zero-order Ambisonics or Mono channel [=Audio Element=] SHOULD NOT be higher than Stereo. +The layout specified in [=loudness_layout=] SHOULD NOT be higher than the highest layout among the layouts provided by the [=Audio Element=]s. In other words, rendering from an [=Audio Element=] with the highest layout to the [=loudness_layout=] SHOULD NOT require an up-mix. In the case of a CHANNEL_BASED [=Audio Element=] with an expanded channel layout (i.e., [=loudspeaker_layout=] = 15), the [=Audio Element=] is considered to be providing the reference layout that it is a subset of. The exception is when the [=Audio Element=] is a zero-order Ambisonics or Mono channel; they MAY be rendered to Stereo. In this exception case, the [=loudness_layout=] for a zero-order Ambisonics or Mono channel [=Audio Element=] SHOULD NOT be higher than Stereo. Each sub-mix SHALL include [=loudness=] for Stereo (i.e., a [=loudness_layout=] with the [=sound_system=] field = [=Loudspeaker configuration for Sound System A (0+2+0)=]). - If a sub-mix's [=Rendered Mix Presentation=] is Mono, its [=loudness=] for Stereo SHOULD be measured on the Stereo signal generated using the equations: @@ -1429,7 +1450,7 @@ layout_type : Layout type - A value of 3 indicates that the layout is binaural. -sound_system specifies one of the sound systems A to J as specified in [[!ITU-2051-3]], 7.1.2ch or 3.1.2ch. +sound_system specifies one of the sound systems A to J as specified in [[!ITU-2051-3]], 7.1.2ch, 3.1.2ch, Mono, or 9.1.6ch. - 0: It indicates [=Loudspeaker configuration for Sound System A (0+2+0)=] - 1: It indicates [=Loudspeaker configuration for Sound System B (0+5+0)=] @@ -1444,7 +1465,8 @@ layout_type : Layout type - 10: It indicates the same loudspeaker configuration as [=loudspeaker_layout=] = 0110 (i.e., 7.1.2ch) - 11: It indicates the same loudspeaker configuration as [=loudspeaker_layout=] = 1000 (i.e., 3.1.2ch) - 12: It indicates Mono - - 13 ~ 15: Reserved + - 13: It indicates the same loudspeaker configuration as [=expanded_loudspeaker_layout=] = 8 (i.e., 9.1.6ch) + - 14 ~ 15: Reserved When a value for [=layout_type=] or [=sound_system=] is not supported, parsers SHOULD ignore this [=Layout()=] and any associated [=LoudnessInfo()=]. @@ -2469,12 +2491,15 @@ In this section, for a given x.y.z layout, the next highest layout x'.y'.z' mean This section defines the renderer to use, given a channel-based [=Audio Element=] and a loudspeaker playback layout. +22.2ch represents the [=Loudspeaker configuration for Sound System H (9+10+3)=]. + - The input layout (x.y.z) of the IA renderer is set as follows: - If [=num_layers=] = 1, - If [=loudspeaker_layout=] < 10, use the [=loudspeaker_layout=] of the [=Audio Element=]. - Else if [=loudspeaker_layout=] = 15, - If [=expanded_loudspeaker_layout=] = 1, use 5.1.4ch with empty channels everywhere other than the corresponding loudspeaker locations. - - Else, use 7.1.4ch with empty channels everywhere other than the corresponding loudspeaker locations. + - Else if [=expanded_loudspeaker_layout=] < 8, use 7.1.4ch with empty channels everywhere other than the corresponding loudspeaker locations. + - Else, use [=22.2ch=] with empty channels everywhere other than the corresponding loudspeaker locations except LFE2. LFE2 of [=22.2ch=] is copied from LFE1. - Else, if the [=Audio Element=] has a [=loudspeaker_layout=] that matches the playback layout, use that matching [=loudspeaker_layout=]. - Else, use the next highest available layout from all available [=loudspeaker_layout=]s. - The output layout of the IA renderer is set to the playback layout (X.Y.Z). @@ -2489,13 +2514,18 @@ This section defines the renderer to use, given a channel-based [=Audio Element= ##### Rendering Without Demixing Info ##### {#processing-mixpresentation-rendering-m2l-withoutdemixinfo} - If the playback layout is neither 3.1.2ch nor 7.1.2ch, - If the playback layout complies with the loudspeaker layouts supported by [[!ITU-2051-3]], the EAR Direct Speakers renderer ([[ITU-2127-0]]) can be used, for example. + - Else if the playback layout is 9.1.6ch, + - If the input layout is [=22.2ch=], the down-mix matrix specified in [[#processing-downmixmatrix-static]] can be used, for example. + - Else, the EAR Direct Speakers renderer ([[ITU-2127-0]]) can be used, for example, to first render the input audio to [=22.2ch=], followed by copying LFE1 to LFE2 and followed by down-mixing from [=22.2ch=] to [=9.1.6ch=] by using the down-mix matrix specified in [[#processing-downmixmatrix-static]]. - Else, an implementation-specific renderer can be used, for example. - Else if the playback layout is 7.1.2ch, - The EAR Direct Speakers renderer ([[ITU-2127-0]]) can be used, for example, to first render the input audio to 7.1.4ch, followed by down-mixing from 7.1.4ch to 7.1.2ch. The height channels of 7.1.4ch are down-mixed to the height channels of 7.1.2ch as follows: \[ \text{Ltf2} = \text{Ltf4} + 0.707 \times \text{Ltb} \] \[ \text{Rtf2} = \text{Rtf4} + 0.707 \times \text{Rtb} \] - Else if the playback layout is 3.1.2ch, - - If the input layout has height channels, the static down-mix matrices specified in [[#processing-downmixmatrix-static]] are used. + - If the input layout has height channels, + - If the input layout is [=22.2ch=], the EAR Direct Speakers renderer ([[ITU-2127-0]]) can be used, for example, to first render the input audio to 7.1.4ch, followed by down-mixing from 7.1.4ch to 3.1.2ch by using the down-mix matrix specified in [[#processing-downmixmatrix-static]]. + - Else, the static down-mix matrices specified in [[#processing-downmixmatrix-static]] are used. - Else if the surround channels (x) of the input layout > 3, the static down-mix matrices specified in [[#processing-downmixmatrix-static]] after inserting empty height channels into the input audio are used. - Else, empty channels are padded to the input audio relevant to the input layout to make 3.1.2ch. In that case, Mono is regarded as a center channel. @@ -2517,6 +2547,7 @@ This section provides guidelines about the renderer to use, given a scene-based - The output layout of the IA renderer is set to the playback layout. - The IA renderer used can be selected according to the following rules: - If the playback layout complies with the loudspeaker layouts supported by [[!ITU-2051-3]], the EAR HOA renderer ([[ITU-2127-0]]) can be used. + - Else, if the playback layout is 9.1.6ch, the EAR HOA renderer ([[ITU-2127-0]]) can be used, for example, to first render the input audio to [=22.2ch=], followed by down-mixing from [=22.2ch=] to [=9.1.6ch=] by using the down-mix matrix specified in [[#processing-downmixmatrix-static]]. - Else, if there is an implementation-specific renderer, use it. - Else, the EAR HOA renderer can be used to render to the next highest [[!ITU-2051-3]] layout compared to the playback layout, and then down-mix using an implementation-specific renderer or use the static down-mix matrices specified in [[#processing-downmixmatrix-static]] if available. @@ -2654,7 +2685,7 @@ This specification includes preferred dynamic down-mixing matrices generated by ### Static Down-mix Matrix ### {#processing-downmixmatrix-static} -This section provides includes preferred static down-mix matrices to render to 3.1.2ch from 5.1.2ch, 5.1.4ch, 7.1.2ch, and 7.1.4ch. +This section provides includes preferred static down-mix matrices to render to 3.1.2ch from 5.1.2ch, 5.1.4ch, 7.1.2ch, and 7.1.4ch and to 9.1.6ch from 22.2ch. Implementations can use a limiter defined in [[#processing-post-limiter]] to preserve the energy of audio signals instead of using normalization factors. @@ -2802,6 +2833,76 @@ The 3.1.2ch down-mix matrix for 7.1.4ch is given below, where \(p = 0.707\). \end{bmatrix} \] +The 9.1.6ch down-mix matrix for 22.2ch is given below, where \(p = 0.707\) and \(q = 0.5\). This down-mix matrix is generated based on Section 8.1 and Table 16 of [[!ITU-2127-0]]. + +\[ +\begin{bmatrix} + \text{FLc} \\ + \text{FC} \\ + \text{FRc} \\ + \text{FL} \\ + \text{FR} \\ + \text{SiL} \\ + \text{SiR} \\ + \text{BL} \\ + \text{BR} \\ + \text{TpFL} \\ + \text{TpFR} \\ + \text{TpSiL} \\ + \text{TpSiR} \\ + \text{TpBL} \\ + \text{TpBR} \\ + \text{LFE1} +\end{bmatrix} += +\begin{bmatrix} + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 \\ + 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ + 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & p & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & p & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & q & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & q & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & q & p & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & q & p & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & p & 0 & 0 & 0 & 0 & 0 & 0 & 0 & p \\ +\end{bmatrix} +\times +\begin{bmatrix} + \text{FLc} \\ + \text{FC} \\ + \text{FRc} \\ + \text{FL} \\ + \text{FR} \\ + \text{SiL} \\ + \text{SiR} \\ + \text{BL} \\ + \text{BR} \\ + \text{TpFL} \\ + \text{TpFR} \\ + \text{TpSiL} \\ + \text{TpSiR} \\ + \text{TpBL} \\ + \text{TpBR} \\ + \text{LFE1} \\ + \text{BC} \\ + \text{TpFC} \\ + \text{TpC} \\ + \text{TpBC} \\ + \text{BtFL} \\ + \text{BtFC} \\ + \text{BtFR} \\ + \text{LFE2} +\end{bmatrix} +\] + +Where BC: Back Centre, TpFC: Top Front Centre, TpC: Top Centre, TpBC: Top Back Centre, BtFL: Bottom Front Left, BtFC: Bottom Front Centre, BtFR: Bottom Front Right, LFE2: Low-Frequency Effects-2 # Convention # {#convention} From 6752c2a6f561ef2c87b1d0310a775e040f061dde Mon Sep 17 00:00:00 2001 From: sunghee-hwang <97494915+sunghee-hwang@users.noreply.github.com> Date: Tue, 2 Jul 2024 08:10:53 +0900 Subject: [PATCH 12/12] Fix #835, use case for multi-language service (#836) --- index.bs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/index.bs b/index.bs index 430efafa..e5a0df35 100644 --- a/index.bs +++ b/index.bs @@ -282,6 +282,7 @@ Here are some typical IAMF use cases and examples of how to instantiate the mode - UC1: One [=Audio Element=] (e.g., 3.1.2ch or First Order Ambisonics (FOA)) is delivered to a big-screen TV (in a home) or a mobile device through a unicast network. It is rendered to a loudspeaker layout (e.g., 3.1.2ch) or headphones with loudness normalization, and is played back on loudspeakers built into the big-screen TV or headphones connected to the mobile device, respectively. - UC2: Two [=Audio Element=]s (e.g., 5.1.2ch and Stereo) are delivered to a big-screen TV through a unicast network. Both are rendered to the same loudspeaker layout built into the big-screen TV and are mixed. After applying loudness normalization appropriate to the home environment, the [=Rendered Mix Presentation=] is played back on the loudspeakers. - UC3: Two [=Audio Element=]s (e.g., FOA and Non-diegetic Stereo) are delivered to a mobile device through a unicast network. FOA is rendered to Binaural (or Stereo) and Non-diegetic is rendered to Stereo. After mixing them, it is processed with loudness normalization and is played back on headphones through the mobile device. +- UC4: Four [=Audio Element=]s for multi-language service (e.g., 5.1.2ch and 3 different Stereo dialogues, one for English, the second for Spanish, and the third for Korean) are delivered to an end-user device through a unicast network. The end-user (or the device) selects his preferred language so that 5.1.2ch and the Stereo dialogue associated with the language are rendered to the same loudspeaker layout and are mixed. After applying loudness normalization appropriate to its environment, the [=Rendered Mix Presentation=] is played back on the loudspeakers. Example 1: UC1 with [=3D audio signal=] = 3.1.2ch. - Audio Substream: The Left (L) and Right (R) channels are coded as one audio stream, the Left top front (Ltf) and Right top front (Rtf) channels as one audio stream, the Center channel as one audio stream, and the Low-Frequency Effects (LFE) channel as one audio stream. @@ -304,6 +305,17 @@ Example 3: UC3 with two [=3D audio signal=]s = First Order Ambisonics (FOA) and - Parameter Substream 1-2: Contains mixing parameter values that are applied to Audio Element 2 by considering the mobile environment. - Mix Presentation: Provides rendering algorithms for rendering Audio Elements 1 & 2 to popular loudspeaker layouts and headphones, mixing information based on Parameter Substreams 1-1 & 1-2, and loudness information of the [=Rendered Mix Presentation=]. +Example 4: UC4 with four [=3D audio signal=]s = 5.1.2ch and 3 Stereo dialogues for English/Spanish/Korean. +- Audio Substream: The L and R channels are coded as one audio stream, the Left surround (Ls) and Right surround (Rs) channels as one audio stream, the Ltf and Rtf channels as one audio stream, the Center channel as one audio stream, and the LFE channel as one audio stream. +- Audio Element 1 (5.1.2ch): Consists of 5 Audio Substreams which are grouped into one [=Channel Group=]. +- Audio Element 2 (Stereo dialogue for English): Consists of 1 Audio Substream which is grouped into one [=Channel Group=]. +- Audio Element 3 (Stereo dialogue for Spanish): Consists of 1 Audio Substream which is grouped into one [=Channel Group=]. +- Audio Element 4 (Stereo dialogue for Korean): Consists of 1 Audio Substream which is grouped into one [=Channel Group=]. +- Parameter Substream 1-1: Contains mixing parameter values that are applied to Audio Element 1 by considering to be mixed with Audio Element 2, 3, or 4. +- Parameter Substream 1-2: Contains mixing parameter values that are applied to Audio Element 2, 3, or 4 by considering to be mixed with Audio Element 1. +- Mix Presentation 1: Provides rendering algorithms for rendering Audio Elements 1 & 2 to popular loudspeaker layouts and headphones, mixing information based on Parameter Substreams 1-1 & 1-2, content language information (English) for Audio Element 2, and loudness information of the [=Rendered Mix Presentation=]. +- Mix Presentation 2: Provides rendering algorithms for rendering Audio Elements 1 & 3 to popular loudspeaker layouts and headphones, mixing information based on Parameter Substreams 1-1 & 1-2, content language information (Spanish) for Audio Element 3, and loudness information of the [=Rendered Mix Presentation=]. +- Mix Presentation 3: Provides rendering algorithms for rendering Audio Elements 1 & 4 to popular loudspeaker layouts and headphones, mixing information based on Parameter Substreams 1-1 & 1-2, content language information (Korean) for Audio Element 4, and loudness information of the [=Rendered Mix Presentation=]. # Immersive Audio Model # {#iamodel}