ISO/IEC 23008-3:2019/Amd 1:2019
(Amendment)Information technology — High efficiency coding and media delivery in heterogeneous environments — Part 3: 3D audio — Amendment 1: Audio metadata enhancements
Information technology — High efficiency coding and media delivery in heterogeneous environments — Part 3: 3D audio — Amendment 1: Audio metadata enhancements
Technologies de l'information — Codage à haute efficacité et livraison des medias dans des environnements hétérogènes — Partie 3: Audio 3D — Amendement 1: Améliorations de la prise en charge des métadonnées audio
General Information
Relations
Buy Standard
Standards Content (Sample)
© ISO/IEC 2019 – All rights reserved
ISO/IEC JTC 1/SC 29
Date 2018-08-03
Deleted: FDAM
ISO/IEC 23008-3:2015/Amd 1:2019(E)
ISO/IEC JTC 1/SC 29/WG 11
Secretariat: JISC
Information technology — High efficiency coding and media delivery in
heterogeneous environments — Part 3: 3D audio, AMENDMENT 1: Audio
Metadata Enhancements
---------------------- Page: 1 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
© ISO 2018, Published in Switzerland
All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or
utilized otherwise in any form or by any means, electronic or mechanical, including photocopying,
or posting on the internet or an intranet, without prior written permission. Permission can be
requested from either ISO at the address below or ISO’s member body in the country of the
requester.
ISO copyright office
Ch. de Blandonnet 8 • CP 401
CH‐1214 Vernier, Geneva, Switzerland
Tel. + 41 22 749 01 11
Fax + 41 22 749 09 47
copyright@iso.org
www.iso.org
ii © ISO/IEC 2019 – All rights reserved
---------------------- Page: 2 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
Foreword
ISO (the International Organization for Standardization) and IEC (the International Electrotechnical Deleted: is a
Commission) form the specialized system for worldwide standardization. National bodies that are
Deleted: federation of national
members of ISO or IEC participate in the development of International Standards through technical
standards
committees established by the respective organization to deal with particular fields of technical activity.
Deleted: (
ISO and IEC technical committees collaborate in fields of mutual interest. Other international
Deleted: member bodies). The
organizations, governmental and non‐governmental, in liaison with ISO and IEC, also take part in the
work
work.
Deleted: preparing
Deleted: is normally carried out
The procedures used to develop this document and those intended for its further maintenance are
described in the ISO/IEC Directives, Part 1. In particular the different approval criteria needed for the
Deleted: ISO
different types of ISO documents should be noted. This document was drafted in accordance with the
Deleted: . Each member body
editorial rules of the ISO/IEC Directives, Part 2 (see www.iso.org/directives).
interested in a subject for which a
technical committee has been
Attention is drawn to the possibility that some of the elements of this document may be the subject of
Deleted: has the right to be
patent rights. ISO shall not be held responsible for identifying any or all such patent rights. Details of
represented on that committee.
any patent rights identified during the development of the document will be in the Introduction and/or International
on the ISO list of patent declarations received (see www.iso.org/patents).
Deleted: ISO collaborates closely
with the International
Any trade name used in this document is information given for the convenience of users and does not Electrotechnical Commission (IEC)
on all matters of electrotechnical
constitute an endorsement.
standardization.
For an explanation of the voluntary nature of standards, the meaning of ISO specific terms and Deleted: on
expressions related to conformity assessment, as well as information about ISO's adherence to the
World Trade Organization (WTO) principles in the Technical Barriers to Trade (TBT)
see: www.iso.org/iso/foreword.html.
This document was prepared by Technical Committee ISO/IEC JTC 1, Information technology,
Subcommittee SC 29, Coding of audio, picture, multimedia and hypermedia information.
A list of all parts in the ISO/IEC 23008 series can be found on the ISO website.
Any feedback or questions on this document should be directed to the user’s national standards body. A
complete listing of these bodies can be found at www.iso.org/members.html.
© ISO/IEC 2019 – All rights reserved iii
---------------------- Page: 3 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
Information technology — High efficiency coding and media
delivery in heterogeneous environments — Part 3: 3D audio,
AMENDMENT 1: Audio Metadata Enhancements
5.2.2.1 General configuration syntax
In subclause 5.2.2.1 replace Table 14 with:
Table 14 — Syntax of Signals3d()
Syntax No. of bits Mnemonic
Signals3d()
{
numAudioChannels = 0;
numAudioObjects = 0;
numSAOCTransportChannels = 0;
numHOATransportChannels = 0;
bsNumSignalGroups; 5 uimsbf
for ( grp = 0; grp < bsNumSignalGroups + 1 ; grp++ ) {
signal_groupID[grp] = grp;
differsFromReferenceLayout[grp] = 0;
signalGroupType[grp]; 3 bslbf
bsNumberOfSignals[grp] = escapedValue(5, 8, 16);
if ( SignalGroupType[grp] == SignalGroupTypeChannels ) {
numAudioChannels += bsNumberOfSignals[grp] + 1;
differsFromReferenceLayout[grp]; 1 bslbf
if(differsFromReferenceLayout[grp]) {
audioChannelLayout[grp] = SpeakerConfig3d();
}
else {
audioChannelLayout[grp] = referenceLayout;
}
}
if ( SignalGroupType[grp] == SignalGroupTypeObject ) {
numAudioObjects += bsNumberOfSignals[grp] + 1;
}
if ( SignalGroupType[grp] == SignalGroupTypeSAOC ) {
numSAOCTransportChannels += bsNumberOfSignals[grp] + 1;
© ISO/IEC 2019 – All rights reserved 1
---------------------- Page: 4 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
saocDmxLayoutPresent; 1 bslbf
if ( saocDmxLayoutPresent == 1 ) {
saocDmxChannelLayout = SpeakerConfig3d();
}
}
if ( SignalGroupType[grp] == SignalGroupTypeHOA ) {
numHOATransportChannels += bsNumberOfSignals[grp] + 1;
}
}
}
5.2.2.3 Core decoder configuration
In 5.2.2.3 replace Table 23 with:
Table 23 — Syntax of mpegh3daExtElementConfig()
Syntax No. of bits Mnemonic
mpegh3daExtElementConfig()
{
usacExtElementType = escapedValue(4, 8, 16);
usacExtElementConfigLength = escapedValue(4, 8, 16);
if (usacExtElementDefaultLengthPresent) { 1 uimsbf
usacExtElementDefaultLength = escapedValue(8, 16, 0) + 1;
} else {
usacExtElementDefaultLength = 0;
}
usacExtElementPayloadFrag; 1 uimsbf
switch (usacExtElementType) {
case ID_EXT_ELE_FILL:
/* No configuration element */
break;
case ID_EXT_ELE_MPEGS:
SpatialSpecificConfig();
break;
case ID_EXT_ELE_SAOC:
SAOCSpecificConfig();
break;
case ID_EXT_ELE_AUDIOPREROLL:
/* No configuration element */
2 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 5 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
break;
case ID_EXT_ELE_UNI_DRC:
mpegh3daUniDrcConfig();
break;
case ID_EXT_ELE_OBJ_METADATA:
ObjectMetadataConfig();
break;
case ID_EXT_ELE_SAOC_3D:
SAOC3DSpecificConfig();
break;
case ID_EXT_ELE_HOA:
HOAConfig();
break;
case ID_EXT_ELE_FMT_CNVRTR
/* No configuration element */
break;
case ID_EXT_ELE_MCT:
MCTConfig();
break;
case ID_EXT_ELE_TCC:
TccConfig();
break;
case ID_EXT_ELE_HOA_ENH_LAYER:
HOAEnhConfig();
break;
case ID_EXT_ELE_HREP:
HREPConfig(current_signal_group);
break;
case ID_EXT_ELE_ENHANCED_OBJ_METADATA:
EnhancedObjectMetadataConfig();
break;
case ID_EXT_ELE_PROD_METADATA:
prodMetadataConfig();
break;
a
default:
while (usacExtElementConfigLength‐‐) {
tmp; 8 uimsbf
}
break;
}
© ISO/IEC 2019 – All rights reserved 3
---------------------- Page: 6 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
}
a
The default entry for the usacExtElementType is used for unknown extElementTypes so that legacy decoders can
cope with future extensions.
5.3.4 Core decoder configuration data elements
In 5.3.4 replace Table 75 with:
Table 75 — Value of usacExtElementType
usacExtElementType Value
ID_EXT_ELE_FILL 0
ID_EXT_ELE_MPEGS 1
ID_EXT_ELE_SAOC 2
ID_EXT_ELE_AUDIOPREROLL 3
ID_EXT_ELE_UNI_DRC 4
ID_EXT_ELE_OBJ_METADATA 5
ID_EXT_ELE_SAOC_3D 6
ID_EXT_ELE_HOA 7
ID_EXT_ELE_FMT_CNVRTR 8
ID_EXT_ELE_MCT 9
ID_EXT_ELE_TCC 10
ID_EXT_ELE_HOA_ENH_LAYER 11
ID_EXT_ELE_HREP 12
ID_EXT_ELE_ENHANCED_OBJ_METADATA 13
ID_EXT_ELE_PROD_METADATA 14
/* reserved for ISO use */ 15‐127
/* reserved for use outside of ISO scope */ 128 and higher
NOTE Application‐specific usacExtElementType values are mandated to be in the space reserved for use
outside of ISO scope. These are skipped by a decoder as a minimum of structure is required by the decoder
to skip these extensions.
In 5.3.4 replace Table 76 with:
Table 76 — Interpretation of data blocks for extension payload decoding
usacExtElementType The concatenated usacExtElementSegmentData
represents:
ID_EXT_ELE_FILL Series of fill_byte
ID_EXT_ELE_MPEGS SpatialFrame() as defined in ISO/IEC 23003‐1
ID_EXT_ELE_SAOC SAOCFrame() as defined in ISO/IEC 23003‐2
ID_EXT_ELE_AUDIOPREROLL AudioPreRoll()
ID_EXT_ELE_UNI_DRC uniDrcGain() as defined in ISO/IEC 23003‐4
ID_EXT_ELE_OBJ_METADATA objectMetadataFrame()
ID_EXT_ELE_SAOC_3D Saoc3DFrame()
4 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 7 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
ID_EXT_ELE_HOA HOAFrame()
ID_EXT_ELE_FMT_CNVRTR FormatConverterFrame()
ID_EXT_ELE_MCT MultichannelCodingFrame()
ID_EXT_ELE_TCC TccGroupOfSegments()
ID_EXT_ELE_HOA_ENH_LAYER HOAEnhFrame()
ID_EXT_ELE_HREP HREPFrame(outputFrameLength,
current_signal_group)
ID_EXT_ELE_ENHANCED_OBJ_METADATA EnhancedObjectMetadataFrame()
ID_EXT_ELE_PROD_METADATA prodMetadataFrame()
Deleted: unknown
unknown Unknown data. The data block shall be discarded.
12.2.1 Configuration of HOA elements
In subclause 12.2.1 replace Table 188 with:
Table 188 — Syntax of HOADecoderConfig()
Syntax No. of bits Mnemonic
HOADecoderConfig(numHOATransportChannels)
{
MinAmbHoaOrder = escapedValue(3,5,0) – 1; 3,8 uimsbf
MinNumOfCoeffsForAmbHOA = (MinAmbHoaOrder + 1)^2;
NumOfAdditionalCoders = numHOATransportChannels –
MinNumOfCoeffsForAmbHOA;
NumLayers = 1;
NumHOAChannelsLayer[0] = numHOATransportChannels;
if(SingleLayer == 0){ 1 bslbf
HOALayerChBits = ceil(log2(NumOfAdditionalCoders));
NumHOAChannelsLayer[0] = codedLayerCh + HOALayerChBi uimsbf
ts
MinNumOfCoeffsForAmbHOA;
remainingCh = numHOATransportChannels –
NumHOAChannelsLayer[0];
while (remainingCh>1) {
HOALayerChBits = ceil(log2(remainingCh));
NumHOAChannelsLayer[NumLayers] = HOALayerChBi uimsbf
ts
NumHOAChannelsLayer[NumLayers‐1] +
codedLayerCh + 1;
remainingCh = numHOATransportChannels –
NumHOAChannelsLayer[NumLayers];
NumLayers++;
}
if (remainingCh) {
NumHOAChannelsLayer[NumLayers] =
© ISO/IEC 2019 – All rights reserved 5
---------------------- Page: 8 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
numHOATransportChannels;
NumLayers++;
}
}
CodedSpatialInterpolationTime; 3 uimsbf
SpatialInterpolationMethod; 1 bslbf
CodedVVecLength; 2 uimsbf
MaxGainCorrAmpExp; 3 uimsbf
HOAFrameLengthIndicator; 2 uimsbf
if( MinAmbHoaOrder < HoaOrder ) {
DiffOrderBits = ceil( log2(HoaOrder‐ MinAmbHoaOrder+1))
MaxHoaOrderToBeTransmitted = DiffOrder + DiffOrderBits uimsbf
MinAmbHoaOrder;
}
else {
MaxHoaOrderToBeTransmitted = HoaOrder;
}
MaxNumOfCoeffsToBeTransmitted =
(MaxHoaOrderToBeTransmitted + 1)^2;
MaxNumAddActiveAmbCoeffs =
MaxNumOfCoeffsToBeTransmitted
‐ MinNumOfCoeffsForAmbHOA;
VqConfBits = ceil ( log2( ceil( log2( NumOfHoaCoeffs+1 ))));
NumVVecVqElementsBits; VqConfBits uimsbf
Deleted: ¶
if( MinAmbHoaOrder == 1) {
its
... [1]
UsePhaseShiftDecorr; 1 bslbf
}
if(SingleLayer==1) {
HOADecoderEnhConfig();
}
AmbAsignmBits = ceil( log2( MaxNumAddActiveAmbCoeffs ) );
ActivePredIdsBits = ceil( log2( NumOfHoaCoeffs ) );
i = 1;
while( i * ActivePredIdsBits
+ ceil( log2( i ) ) < NumOfHoaCoeffs ){
i++;
}
NumActivePredIdsBits = ceil( log2( max( 1, i – 1 ) ) );
GainCorrPrevAmpExpBits = ceil( log2( ceil( log2(
6 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 9 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
1.5 * NumOfHoaCoeffs ) )
+ MaxGainCorrAmpExp + 1 ) );
for (i=0; i
AmbCoeffTransitionState[i] = 3;
}
}
NOTE MinAmbHoaOrder = 30 … 37 are reserved. HOAFrameLengthIndicator = 3 is reserved. CodedVVecLength = 3 is
reserved.
14.2.1 Main MHAS syntax elements
In 14.2.1 replace Table 220 with:
Table 220 — Syntax of MHASPacketPayload()
Syntax No. of bits Mnemonic
MHASPacketPayload(MHASPacketType)
{
switch (MHASPacketType) {
case PACTYP_SYNC:
0xA5; /* syncword*/ 8 uimsbf
break;
case PACTYP_MPEGH3DACFG:
mpegh3daConfig();
break;
case PACTYP_MPEGH3DAFRAME:
mpegh3daFrame();
break;
case PACTYP_AUDIOSCENEINFO:
mae_AudioSceneInfo();
break;
case PACTYP_FILLDATA:
for (i=0; i< MHASPacketLength; i++) {
mhas_fill_data_byte(i); 8 bslbf
}
break;
case PACTYP_SYNCGAP:
syncSpacingLength = escapedValue(16,24,24); 16,40,64 uimsbf
break;
case PACTYP_MARKER:
for (i=0; i< MHASPacketLength; i++) {
marker_byte(i); 8 bslbf
}
© ISO/IEC 2019 – All rights reserved 7
---------------------- Page: 10 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
break;
case PACTYP_CRC16:
mhasParity16Data; 16 bslbf
break;
case PACTYP_CRC32:
mhasParity32Data; 32 bslbf
break;
case PACTYP_GLOBAL_CRC16:
global_CRC_type; 2 bslbf
numProtectedPackets; 6 bslbf
mhasParity16Data; 16 bslbf
break;
case PACTYP_ GLOBAL_CRC32:
global_CRC_type; 2 bslbf
numProtectedPackets; 6 bslbf
mhasParity32Data; 32 bslbf
break;
case PACTYP_DESCRIPTOR:
for (i=0; i< MHASPacketLength; i++) {
mhas_descriptor_data_byte(i); 8 bslbf
}
break;
case PACTYP_USERINTERACTION:
mpegh3daElementInteraction();
break;
case PACTYP_LOUDNESS_DRC:
mpegh3daLoudnessDrcInterface();
break;
case PACTYP_BUFFERINFO:
mhas_buffer_fullness_present 1 uimsbf
if (mhas_buffer_fullness_present)
mhas_buffer_fullness = escapedValue(15,24,32); 15,39,71 uimsbf
}
break;
case PACTYP_AUDIOTRUNCATION:
audioTruncationInfo();
break;
case PACTYP_GENDATA:
GenDataPayload();
break;
8 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 11 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
case PACTYP_EARCON:
earconInfo();
break;
case PACTYP_PCMCONFIG:
pcmDataConfig();
break;
case PACTYP_PCMDATA:
pcmDataPayload();
break;
case PACTYP_LOUDNESS:
mpegh3daLoudnessInfoSet();
break;
}
ByteAlign();
}
14.3.1 mpeghAudioStreamPacket()
In 14.3.1 replace Table 223 with:
Table 223 — Value of MHASPacketType
MHASPacketType Value
PACTYP_FILLDATA 0
PACTYP_MPEGH3DACFG 1
PACTYP_MPEGH3DAFRAME 2
PACTYP_AUDIOSCENEINFO 3
/* reserved for ISO use */ 4‐5
PACTYP_SYNC 6
PACTYP_SYNCGAP 7
PACTYP_MARKER 8
PACTYP_CRC16 9
PACTYP_CRC32 10
PACTYP_DESCRIPTOR 11
PACTYP_USERINTERACTION 12
PACTYP_LOUDNESS_DRC 13
PACTYP_BUFFERINFO 14
PACTYP_GLOBAL_CRC16 15
PACTYP_GLOBAL_CRC32 16
PACTYP_AUDIOTRUNCATION 17
PACTYP_GENDATA 18
PACTYP_EARCON 19
© ISO/IEC 2019 – All rights reserved 9
---------------------- Page: 12 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
PACTYP_PCMCONFIG 20
PACTYP_PCMDATA 21
PACTYP_LOUDNESS 22
/* reserved for ISO use */ 23‐127
/* reserved for use outside of ISO scope */ 128‐261
/* reserved for ISO use */ 262‐389
/* reserved for use outside of ISO scope */ 390‐517
NOTE Application‐specific MHASPacketType values are mandated to be in the space reserved for
use outside of ISO scope. These are skipped by a decoder as a minimum of structure is required by
the decoder to skip these extensions.
14.3.2 MHASPacketPayload()
At the end of subclause 14.3.2 add:
earconInfo() Earcon Info structure as defined in 28.2.
pcmDataConfig() PCM data configuration structure as defined in 28.2.
pcmDataPayload() PCM data payload structure as defined in 28.2.
mpegh3daLoudnessInfoSet() Loudness metadata structure as defined in 6.3.1.
14.4 Description of MHASPacketTypes
At the end of subclause 14.4 add:
14.4.15 PACTYP_EARCON
The MHASPacketType PACTYP_EARCON may be used to embed information about the earcons available
in the earconInfo() structure and to feed earcon info data in the form of the earconInfo() structure to
the decoder.
If the earconInfo() structure contains at least one earcon of type PCM (i.e. earconType == 5) the MHAS
stream shall contain at least one MHAS packet of type PACTYP_PCMCONFIG and at least one MHAS
packet of type PACTYP_PCMDATA.
14.4.16 PACTYP_PCMCONFIG
The MHASPacketType PACTYP_PCMCONFIG may be used to carry configuration information for PCM
payload data and to feed the PCM data configuration information in the form of the pcmDataConfig()
structure to the decoder.
If an MHASPacketType PACTYP_PCMCONFIG is present after an MHASPacketType PACTYP_EARCON,
the pcmDataConfig() structure shall be used together with the previous earconInfo() structure. If no
MHASPacketType PACTYP_EARCON is present in the stream the pcmDataConfig() structure shall be
ignored.
14.4.17 PACTYP_PCMDATA
The MHASPacketType PACTYP_PCMDATA may be used to embed PCM payload data corresponding to
the PCM signals defined in the pcmDataConfig() structure and to feed the PCM data in the form of the
pcmDataPayload() structure to the decoder.
If an MHASPacketType PACTYP_ PCMDATA is present after an MHASPacketType PACTYP_ PCMCONFIG,
the pcmDataPayload() structure shall be used together with the previous earconInfo() and
pcmDataConfig() structures. If no MHASPacketType PACTYP_EARCON and MHASPacketType
PACTYP_PCMCONFIG are present in the stream the pcmDataPayload() structure shall be ignored.
10 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 13 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
14.4.18 PACTYP_LOUDNESS
The MHASPacketType PACTYP_LOUDNESS may be used to embed loudness metadata as defined in the
mpegh3daLoudnessInfoSet() structure. If present and supported by a decoder, it shall take precedence
over the in‐stream loudness information conveyed via mpegh3daConfigExtension() as defined in Table
24.
If present, the MHASPacketType PACTYP_LOUDNESS shall follow PACTYP_MPEGH3DACFG for each
random access point and stream access point.
Updated loudness information may be available for instance after editing. The MHASPacketType
PACTYP_LOUDNESS can be used to convey the updated loudness information to the decoder without
requiring an update of the audio stream.
17.10.3.1 General
In subclause 17.10.3.1, extend paragraphs by:
— Enhanced object metadata;
— diffuseness;
— divergence and divergence azimuth range;
— exclusion sector metadata;
— Production Metadata.
17.10.3.2 Syntax of an interface for object-based metadata
In 17.10.3.2 replace Table 265 with:
Table 265 — Syntax of mpegh3da_getObjectAudioAndMetadata()
Syntax No. of bits Mnemonic
mpegh3da_getObjectAudioAndMetadata()
{
/* FRAME CONFIGURATION */
goa_frameLength; 6 uimsbf
goa_audioTruncation; 2 bslbf
if (goa_audioTruncation>0) {
goa_numSamples; 13 uimsbf
} else {
goa_numSamples = goa_frameLength << 6;
}
/* OBJECT METADATA */
goa_numberOfOutputObjects; 9 uimsbf
for ( o = 0; o < goa_numberOfOutputObjects; o++ ) {
goa_elementID[o]; 9 uimsbf
goa_hasDynamicObjectPriority[o]; 1 bslbf
© ISO/IEC 2019 – All rights reserved 11
---------------------- Page: 14 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
goa_hasUniformSpread[o]; 1 bslbf
/* OAM Data */
goa_numOAMframes[o] 6 uimsbf
for (nf = 0; nf < goa_numOAMframes[o]; nf++) {
goa_objectMetadataPresent; 1 bslbf
if (goa_objectMetadataPresent==1) {
goa_positionAzimuth[o][nf]; 8 uimsbf
goa_positionElevation[o][nf]; 6 uimsbf
goa_positionRadius[o][nf]; 4 uimsbf
goa_objectGainFactor[o][nf]; 7 uimsbf
if (goa_hasDynamicObjectPriority[o]) {
goa_dynamicObjectPriority[o][nf]; 3 uimsbf
}
if ( goa_hasUniformSpread[o] ) {
goa_uniformSpread[o][nf]; 7 uimsbf
} else {
goa_spreadWidth[o][nf]; 7 uimsbf
goa_spreadHeight[o][nf]; 5 uimsbf
goa_spreadDepth[o][nf]; 4 uimsbf
}
}
}
/* Signal group related data */
goa_fixedPosition[o]; 1 bslbf
goa_groupPriority[o]; 3 uimsbf
/* Enhanced Object Metadata */
goa_diffuseness[o]; 7 uimsbf
goa_divergence[o]; 7 uimsbf
goa_divergenceAzimuthRange[o]; 6 uimsbf
goa_numExclusionSectors[o]; 4 uimsbf
for ( s = 0; s < goa_numExclusionSectors[o]; s++) {
goa_usePredefinedSector[o][s]; 1 bslbf
if ( goa_usePredefinedSector[o][s] ) {
goa_excludeSectorIndex[o][s]; 4 uimsbf
} else {
12 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 15 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
goa_excludeSectorMinAzimuth[o][s]; 7 uimbsf
Deleted: ]
goa_excludeSectorMaxAzimuth[o][s]; 7 uimbsf
goa_excludeSectorMinElevation[o][s]; 5 uimbsf
goa_excludeSectorMaxElevation[o][s] 5 uimbsf
}
} /* for ( s = 0; s < goa_numExclusionSectors[o]; s++) */
} /* for ( o = 0; o < goa_numberOfOutputObjects; o++ ) */
/* GOA EXTENSION ELEMENTS */
goa_numberOfExtensionElements; 3 uimsbf
if (goa_numberOfExtensionElements)
{
for ( ext = 0; ext < goa_numberOfExtensionElements; ext++ ) {
goa_extElementType; 3 uimbsf
goa_extElementLength; 10 uimsbf
switch (goa_extElementType) {
case ID_EXT_GOA_PROD_METADATA:
goa_Production_Metadata();
break;
default:
break;
}
}
}
}
Add new tables after Table 265:
Table AMD1.1 — Syntax of goa_Production_Metadata()
Syntax No. of bits Mnemonic
goa_Production_Metadata()
{
/* PRODUCTION METADATA CONFIGURATION */
goa_ hasObjectDistance; 1 bslbf
if (goa_hasObjectDistance) {
for ( o = 0; o < goa_numberOfOutputObjects; o++ ) {
Deleted: ]
goa_bsObjectDistance[o]; 9 uimsbf
© ISO/IEC 2019 – All rights reserved 13
---------------------- Page: 16 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
}
}
}
Table AMD1.2 — Syntax of goa_extElementType
goa_extElementType Value
ID_EXT_GOA_PROD_METADATA 0
/* reserved */ 1‐7
17.10.3.3. Semantics of the interface for object-based metadata
At the end of 17.10.3.3. add:
goa_numberOfExtensionElements Defines the number of extension elements to the GOA output
interface.
goa_extElementType Defines the type of the extension element.
goa_extElementLength Defines the length of the extension element.
goa_hasObjectDistance This flag defines if the object distance parameter is signalled
in the production metadata frame.
goa_bsObjectDistance This field describes the distance of an object. The field can
take values between 0 and 511, which maps to distance
values between 0 m and 177 km. Table AMD1.3 provides the Deleted: kilometres
mapping of goa_bsObjectDistance field to the distance.
Table AMD1.3 — Mapping of position_distance field to the distance
goa_bsObjectDistance distance
0 distance = 0 m
1 − 511 distance = 0.01 * 2^( 0.0472188798661443 * ( goa_bsObjectDistance ‐ 1 ) )
17.10.4.1 General
In subclause 17.10.4.1, replace paragraph 8 with:
If a channel output interface is provided by an implementation, the following metadata shall be
provided via the interface to be evaluated by possible external renderers:
— Number of channels;
— Number of valid PCM samples for the current frame;
— elementIDs for the referenced audio channels;
— Channel configuration;
— “fixed position” flag;
— Static group priority;
— Downmix matrix elements, if transmitted and matching the selected Reproduction Layout
(according to 10.3.1);
14 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 17 ----------------------
ISO/IEC 23008-3:2015/Amd 1:2019(E)
— Production metadata.
17.10.4.2 Syntax of an interface for channel-based metadata
In subclause 17.10.4.2 replace Table 267 with:
Table 267 — Syntax of mpegh3da_getChannelMetadata()
Syntax No. of bits Mnemonic
mpegh3da_
...
INTERNATIONAL ISO/IEC
STANDARD 23008-3
Second edition
2019-02-20
AMENDMENT 1
2019-06
Information technology — High
efficiency coding and media delivery
in heterogeneous environments —
Part 3:
3D audio
AMENDMENT 1: Audio metadata
enhancements
Technologies de l'information — Codage à haute efficacité et livraison
des medias dans des environnements hétérogènes —
Partie 3: Audio 3D
AMENDEMENT 1: Améliorations de la prise en charge des
métadonnées audio
Reference number
ISO/IEC 23008-3:2019/Amd.1:2019(E)
©
ISO/IEC 2019
---------------------- Page: 1 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
COPYRIGHT PROTECTED DOCUMENT
© ISO/IEC 2019
All rights reserved. Unless otherwise specified, or required in the context of its implementation, no part of this publication may
be reproduced or utilized otherwise in any form or by any means, electronic or mechanical, including photocopying, or posting
on the internet or an intranet, without prior written permission. Permission can be requested from either ISO at the address
below or ISO’s member body in the country of the requester.
ISO copyright office
CP 401 • Ch. de Blandonnet 8
CH-1214 Vernier, Geneva
Phone: +41 22 749 01 11
Fax: +41 22 749 09 47
Email: copyright@iso.org
Website: www.iso.org
Published in Switzerland
ii © ISO/IEC 2019 – All rights reserved
---------------------- Page: 2 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Foreword
ISO (the International Organization for Standardization) and IEC (the International Electrotechnical
Commission) form the specialized system for worldwide standardization. National bodies that
are members of ISO or IEC participate in the development of International Standards through
technical committees established by the respective organization to deal with particular fields of
technical activity. ISO and IEC technical committees collaborate in fields of mutual interest. Other
international organizations, governmental and non-governmental, in liaison with ISO and IEC, also
take part in the work.
The procedures used to develop this document and those intended for its further maintenance are
described in the ISO/IEC Directives, Part 1. In particular the different approval criteria needed for the
different types of ISO documents should be noted. This document was drafted in accordance with the
editorial rules of the ISO/IEC Directives, Part 2 (see www .iso .org/directives).
Attention is drawn to the possibility that some of the elements of this document may be the subject of
patent rights. ISO shall not be held responsible for identifying any or all such patent rights. Details of
any patent rights identified during the development of the document will be in the Introduction and/or
on the ISO list of patent declarations received (see www .iso .org/patents).
Any trade name used in this document is information given for the convenience of users and does not
constitute an endorsement.
For an explanation of the voluntary nature of standards, the meaning of ISO specific terms and
expressions related to conformity assessment, as well as information about ISO's adherence to the
World Trade Organization (WTO) principles in the Technical Barriers to Trade (TBT) see: www .iso
.org/iso/foreword .html.
This document was prepared by Technical Committee ISO/IEC JTC 1, Information technology,
Subcommittee SC 29, Coding of audio, picture, multimedia and hypermedia information.
A list of all parts in the ISO/IEC 23008 series can be found on the ISO website.
Any feedback or questions on this document should be directed to the user’s national standards body. A
complete listing of these bodies can be found at www .iso .org/members .html.
© ISO/IEC 2019 – All rights reserved iii
---------------------- Page: 3 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Information technology — High efficiency coding and
media delivery in heterogeneous environments —
Part 3:
3D audio
AMENDMENT 1: Audio metadata enhancements
5.2.2.1 General configuration syntax
In subclause 5.2.2.1 replace Table 14 with:
Table 14 — Syntax of Signals3d()
Syntax No. of bits Mnemonic
Signals3d()
{
numAudioChannels = 0;
numAudioObjects = 0;
numSAOCTransportChannels = 0;
numHOATransportChannels = 0;
bsNumSignalGroups; 5 uimsbf
for ( grp = 0; grp < bsNumSignalGroups + 1 ; grp++ ) {
signal_groupID[grp] = grp;
differsFromReferenceLayout[grp] = 0;
signalGroupType[grp]; 3 bslbf
bsNumberOfSignals[grp] = escapedValue(5, 8, 16);
if ( SignalGroupType[grp] == SignalGroupTypeChannels ) {
numAudioChannels += bsNumberOfSignals[grp] + 1;
differsFromReferenceLayout[grp]; 1 bslbf
if(differsFromReferenceLayout[grp]) {
audioChannelLayout[grp] = SpeakerConfig3d();
}
else {
audioChannelLayout[grp] = referenceLayout;
}
}
if ( SignalGroupType[grp] == SignalGroupTypeObject ) {
numAudioObjects += bsNumberOfSignals[grp] + 1;
}
if ( SignalGroupType[grp] == SignalGroupTypeSAOC ) {
numSAOCTransportChannels += bsNumberOfSignals[grp] + 1;
© ISO/IEC 2019 – All rights reserved 1
---------------------- Page: 4 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Table 14 (continued)
Syntax No. of bits Mnemonic
saocDmxLayoutPresent; 1 bslbf
if ( saocDmxLayoutPresent == 1 ) {
saocDmxChannelLayout = SpeakerConfig3d();
}
}
if ( SignalGroupType[grp] == SignalGroupTypeHOA ) {
numHOATransportChannels += bsNumberOfSignals[grp] + 1;
}
}
}
5.2.2.3 Core decoder configuration
In 5.2.2.3 replace Table 23 with:
Table 23 — Syntax of mpegh3daExtElementConfig()
Syntax No. of bits Mnemonic
mpegh3daExtElementConfig()
{
usacExtElementType = escapedValue(4, 8, 16);
usacExtElementConfigLength = escapedValue(4, 8, 16);
if (usacExtElementDefaultLengthPresent) { 1 uimsbf
usacExtElementDefaultLength = escapedValue(8, 16, 0) + 1;
} else {
usacExtElementDefaultLength = 0;
}
usacExtElementPayloadFrag; 1 uimsbf
switch (usacExtElementType) {
case ID_EXT_ELE_FILL:
/* No configuration element */
break;
case ID_EXT_ELE_MPEGS:
SpatialSpecificConfig();
break;
case ID_EXT_ELE_SAOC:
SAOCSpecificConfig();
break;
case ID_EXT_ELE_AUDIOPREROLL:
/* No configuration element */
a
The default entry for the usacExtElementType is used for unknown extElementTypes so that legacy
decoders can cope with future extensions.
2 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 5 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Table 23 (continued)
Syntax No. of bits Mnemonic
break;
case ID_EXT_ELE_UNI_DRC:
mpegh3daUniDrcConfig();
break;
case ID_EXT_ELE_OBJ_METADATA:
ObjectMetadataConfig();
break;
case ID_EXT_ELE_SAOC_3D:
SAOC3DSpecificConfig();
break;
case ID_EXT_ELE_HOA:
HOAConfig();
break;
case ID_EXT_ELE_FMT_CNVRTR
/* No configuration element */
break;
case ID_EXT_ELE_MCT:
MCTConfig();
break;
case ID_EXT_ELE_TCC:
TccConfig();
break;
case ID_EXT_ELE_HOA_ENH_LAYER:
HOAEnhConfig();
break;
case ID_EXT_ELE_HREP:
HREPConfig(current_signal_group);
break;
case ID_EXT_ELE_ENHANCED_OBJ_METADATA:
EnhancedObjectMetadataConfig();
break;
case ID_EXT_ELE_PROD_METADATA:
prodMetadataConfig();
break;
a
default:
while (usacExtElementConfigLength--) {
tmp; 8 uimsbf
}
break;
}
}
a
The default entry for the usacExtElementType is used for unknown extElementTypes so that legacy
decoders can cope with future extensions.
© ISO/IEC 2019 – All rights reserved 3
---------------------- Page: 6 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
5.3.4 Core decoder configuration data elements
In 5.3.4 replace Table 75 with:
Table 75 — Value of usacExtElementType
usacExtElementType Value
ID_EXT_ELE_FILL 0
ID_EXT_ELE_MPEGS 1
ID_EXT_ELE_SAOC 2
ID_EXT_ELE_AUDIOPREROLL 3
ID_EXT_ELE_UNI_DRC 4
ID_EXT_ELE_OBJ_METADATA 5
ID_EXT_ELE_SAOC_3D 6
ID_EXT_ELE_HOA 7
ID_EXT_ELE_FMT_CNVRTR 8
ID_EXT_ELE_MCT 9
ID_EXT_ELE_TCC 10
ID_EXT_ELE_HOA_ENH_LAYER 11
ID_EXT_ELE_HREP 12
ID_EXT_ELE_ENHANCED_OBJ_METADATA 13
ID_EXT_ELE_PROD_METADATA 14
/* reserved for ISO use */ 15-127
/* reserved for use outside of ISO scope */ 128 and higher
NOTE Application-specific usacExtElementType values are mandated to be in the space reserved for
use outside of ISO scope. These are skipped by a decoder as a minimum of structure is required by
the decoder to skip these extensions.
In 5.3.4 replace Table 76 with:
Table 76 — Interpretation of data blocks for extension payload decoding
usacExtElementType The concatenated usacExtElementSegmentData
represents:
ID_EXT_ELE_FILL Series of fill_byte
ID_EXT_ELE_MPEGS SpatialFrame() as defined in ISO/IEC 23003-1
ID_EXT_ELE_SAOC SAOCFrame() as defined in ISO/IEC 23003-2
ID_EXT_ELE_AUDIOPREROLL AudioPreRoll()
ID_EXT_ELE_UNI_DRC uniDrcGain() as defined in ISO/IEC 23003-4
ID_EXT_ELE_OBJ_METADATA objectMetadataFrame()
ID_EXT_ELE_SAOC_3D Saoc3DFrame()
ID_EXT_ELE_HOA HOAFrame()
ID_EXT_ELE_FMT_CNVRTR FormatConverterFrame()
ID_EXT_ELE_MCT MultichannelCodingFrame()
ID_EXT_ELE_TCC TccGroupOfSegments()
ID_EXT_ELE_HOA_ENH_LAYER HOAEnhFrame()
ID_EXT_ELE_HREP HREPFrame(outputFrameLength, current_signal_group)
ID_EXT_ELE_ENHANCED_OBJ_METADATA EnhancedObjectMetadataFrame()
4 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 7 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Table 76 (continued)
usacExtElementType The concatenated usacExtElementSegmentData
represents:
ID_EXT_ELE_PROD_METADATA prodMetadataFrame()
unknown Unknown data. The data block shall be discarded.
12.2.1 Configuration of HOA elements
In subclause 12.2.1 replace Table 188 with:
Table 188 — Syntax of HOADecoderConfig()
Syntax No. of bits Mnemonic
HOADecoderConfig(numHOATransportChannels)
{
MinAmbHoaOrder = escapedValue(3,5,0) – 1; 3,8 uimsbf
MinNumOfCoeffsForAmbHOA = (MinAmbHoaOrder + 1)^2;
NumOfAdditionalCoders = numHOATransportChannels –
MinNumOfCoeffsForAmbHOA;
NumLayers = 1;
NumHOAChannelsLayer[0] = numHOATransportChannels;
if(SingleLayer == 0){ 1 bslbf
HOALayerChBits = ceil(log2(NumOfAdditionalCoders));
NumHOAChannelsLayer[0] = codedLayerCh + HOALayerChBits uimsbf
MinNumOfCoeffsForAmbHOA;
remainingCh = numHOATransportChannels –
NumHOAChannelsLayer[0];
while (remainingCh>1) {
HOALayerChBits = ceil(log2(remainingCh));
NumHOAChannelsLayer[NumLayers] = HOALayerChBits uimsbf
NumHOAChannelsLayer[NumLayers-1] +
codedLayerCh + 1;
remainingCh = numHOATransportChannels –
NumHOAChannelsLayer[NumLayers];
NumLayers++;
}
if (remainingCh) {
NumHOAChannelsLayer[NumLayers] =
numHOATransportChannels;
NumLayers++;
}
}
CodedSpatialInterpolationTime; 3 uimsbf
SpatialInterpolationMethod; 1 bslbf
NOTE MinAmbHoaOrder = 30 … 37 are reserved. HOAFrameLengthIndicator = 3 is reserved. CodedVVecLength = 3 is
reserved.
© ISO/IEC 2019 – All rights reserved 5
---------------------- Page: 8 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Table 188 (continued)
Syntax No. of bits Mnemonic
CodedVVecLength; 2 uimsbf
MaxGainCorrAmpExp; 3 uimsbf
HOAFrameLengthIndicator; 2 uimsbf
if( MinAmbHoaOrder < HoaOrder ) {
DiffOrderBits = ceil( log2(HoaOrder- MinAmbHoaOrder+1))
MaxHoaOrderToBeTransmitted = DiffOrder + DiffOrderBits uimsbf
MinAmbHoaOrder;
}
else {
MaxHoaOrderToBeTransmitted = HoaOrder;
}
MaxNumOfCoeffsToBeTransmitted =
(MaxHoaOrderToBeTransmitted + 1)^2;
MaxNumAddActiveAmbCoeffs =
MaxNumOfCoeffsToBeTransmitted
- MinNumOfCoeffsForAmbHOA;
VqConfBits = ceil ( log2( ceil( log2( NumOfHoaCoeffs+1 ))));
NumVVecVqElementsBits; VqConfBits uimsbf
if( MinAmbHoaOrder == 1) {
UsePhaseShiftDecorr; 1 bslbf
}
if(SingleLayer==1) {
HOADecoderEnhConfig();
}
AmbAsignmBits = ceil( log2( MaxNumAddActiveAmbCoeffs ) );
ActivePredIdsBits = ceil( log2( NumOfHoaCoeffs ) );
i = 1;
while( i * ActivePredIdsBits
+ ceil( log2( i ) ) < NumOfHoaCoeffs ){
i++;
}
NumActivePredIdsBits = ceil( log2( max( 1, i – 1 ) ) );
GainCorrPrevAmpExpBits = ceil( log2( ceil( log2(
1.5 * NumOfHoaCoeffs ) )
+ MaxGainCorrAmpExp + 1 ) );
for (i=0; i
AmbCoeffTransitionState[i] = 3;
}
}
NOTE MinAmbHoaOrder = 30 … 37 are reserved. HOAFrameLengthIndicator = 3 is reserved. CodedVVecLength = 3 is
reserved.
6 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 9 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
14.2.1 Main MHAS syntax elements
In 14.2.1 replace Table 220 with:
Table 220 — Syntax of MHASPacketPayload()
Syntax No. of bits Mnemonic
MHASPacketPayload(MHASPacketType)
{
switch (MHASPacketType) {
case PACTYP_SYNC:
0xA5; /* syncword*/ 8 uimsbf
break;
case PACTYP_MPEGH3DACFG:
mpegh3daConfig();
break;
case PACTYP_MPEGH3DAFRAME:
mpegh3daFrame();
break;
case PACTYP_AUDIOSCENEINFO:
mae_AudioSceneInfo();
break;
case PACTYP_FILLDATA:
for (i=0; i< MHASPacketLength; i++) {
mhas_fill_data_byte(i); 8 bslbf
}
break;
case PACTYP_SYNCGAP:
syncSpacingLength = escapedValue(16,24,24); 16,40,64 uimsbf
break;
case PACTYP_MARKER:
for (i=0; i< MHASPacketLength; i++) {
marker_byte(i); 8 bslbf
}
break;
case PACTYP_CRC16:
mhasParity16Data; 16 bslbf
break;
case PACTYP_CRC32:
mhasParity32Data; 32 bslbf
break;
case PACTYP_GLOBAL_CRC16:
global_CRC_type; 2 bslbf
numProtectedPackets; 6 bslbf
mhasParity16Data; 16 bslbf
break;
© ISO/IEC 2019 – All rights reserved 7
---------------------- Page: 10 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Table 220 (continued)
Syntax No. of bits Mnemonic
case PACTYP_ GLOBAL_CRC32:
global_CRC_type; 2 bslbf
numProtectedPackets; 6 bslbf
mhasParity32Data; 32 bslbf
break;
case PACTYP_DESCRIPTOR:
for (i=0; i< MHASPacketLength; i++) {
mhas_descriptor_data_byte(i); 8 bslbf
}
break;
case PACTYP_USERINTERACTION:
mpegh3daElementInteraction();
break;
case PACTYP_LOUDNESS_DRC:
mpegh3daLoudnessDrcInterface();
break;
case PACTYP_BUFFERINFO:
mhas_buffer_fullness_present 1 uimsbf
if (mhas_buffer_fullness_present)
mhas_buffer_fullness = escapedValue(15,24,32); 15,39,71 uimsbf
}
break;
case PACTYP_AUDIOTRUNCATION:
audioTruncationInfo();
break;
case PACTYP_GENDATA:
GenDataPayload();
break;
case PACTYP_EARCON:
earconInfo();
break;
case PACTYP_PCMCONFIG:
pcmDataConfig();
break;
case PACTYP_PCMDATA:
pcmDataPayload();
break;
case PACTYP_LOUDNESS:
mpegh3daLoudnessInfoSet();
break;
}
ByteAlign();
}
8 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 11 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
14.3.1 mpeghAudioStreamPacket()
In 14.3.1 replace Table 223 with:
Table 223 — Value of MHASPacketType
MHASPacketType Value
PACTYP_FILLDATA 0
PACTYP_MPEGH3DACFG 1
PACTYP_MPEGH3DAFRAME 2
PACTYP_AUDIOSCENEINFO 3
/* reserved for ISO use */ 4-5
PACTYP_SYNC 6
PACTYP_SYNCGAP 7
PACTYP_MARKER 8
PACTYP_CRC16 9
PACTYP_CRC32 10
PACTYP_DESCRIPTOR 11
PACTYP_USERINTERACTION 12
PACTYP_LOUDNESS_DRC 13
PACTYP_BUFFERINFO 14
PACTYP_GLOBAL_CRC16 15
PACTYP_GLOBAL_CRC32 16
PACTYP_AUDIOTRUNCATION 17
PACTYP_GENDATA 18
PACTYP_EARCON 19
PACTYP_PCMCONFIG 20
PACTYP_PCMDATA 21
PACTYP_LOUDNESS 22
/* reserved for ISO use */ 23-127
/* reserved for use outside of ISO scope */ 128-261
/* reserved for ISO use */ 262-389
/* reserved for use outside of ISO scope */ 390-517
NOTE Application-specific MHASPacketType values are mandated to be in the space
reserved for use outside of ISO scope. These are skipped by a decoder as a minimum of
structure is required by the decoder to skip these extensions.
14.3.2 MHASPacketPayload()
At the end of subclause 14.3.2 add:
earconInfo() Earcon Info structure as defined in 28.2.
pcmDataConfig() PCM data configuration structure as defined in 28.2.
pcmDataPayload() PCM data payload structure as defined in 28.2.
mpegh3daLoudnessInfoSet() Loudness metadata structure as defined in 6.3.1.
© ISO/IEC 2019 – All rights reserved 9
---------------------- Page: 12 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
14.4 Description of MHASPacketTypes
At the end of subclause 14.4 add:
14.4.15 PACTYP_EARCON
The MHASPacketType PACTYP_EARCON may be used to embed information about the earcons available
in the earconInfo() structure and to feed earcon info data in the form of the earconInfo() structure to
the decoder.
If the earconInfo() structure contains at least one earcon of type PCM (i.e. earconType == 5) the MHAS
stream shall contain at least one MHAS packet of type PACTYP_PCMCONFIG and at least one MHAS
packet of type PACTYP_PCMDATA.
14.4.16 PACTYP_PCMCONFIG
The MHASPacketType PACTYP_PCMCONFIG may be used to carry configuration information for PCM
payload data and to feed the PCM data configuration information in the form of the pcmDataConfig()
structure to the decoder.
If an MHASPacketType PACTYP_PCMCONFIG is present after an MHASPacketType PACTYP_EARCON,
the pcmDataConfig() structure shall be used together with the previous earconInfo() structure. If no
MHASPacketType PACTYP_EARCON is present in the stream the pcmDataConfig() structure shall be
ignored.
14.4.17 PACTYP_PCMDATA
The MHASPacketType PACTYP_PCMDATA may be used to embed PCM payload data corresponding to
the PCM signals defined in the pcmDataConfig() structure and to feed the PCM data in the form of the
pcmDataPayload() structure to the decoder.
If an MHASPacketType PACTYP_ PCMDATA is present after an MHASPacketType PACTYP_ PCMCONFIG,
the pcmDataPayload() structure shall be used together with the previous earconInfo() and
pcmDataConfig() structures. If no MHASPacketType PACTYP_EARCON and MHASPacketType PACTYP_
PCMCONFIG are present in the stream the pcmDataPayload() structure shall be ignored.
14.4.18 PACTYP_LOUDNESS
The MHASPacketType PACTYP_LOUDNESS may be used to embed loudness metadata as defined in
the mpegh3daLoudnessInfoSet() structure. If present and supported by a decoder, it shall take
precedence over the in-stream loudness information conveyed via mpegh3daConfigExtension() as
defined in Table 24.
If present, the MHASPacketType PACTYP_LOUDNESS shall follow PACTYP_MPEGH3DACFG for each
random access point and stream access point.
Updated loudness information may be available for instance after editing. The MHASPacketType
PACTYP_LOUDNESS can be used to convey the updated loudness information to the decoder without
requiring an update of the audio stream.
17.10.3.1 General
In subclause 17.10.3.1, extend paragraphs by:
— Enhanced object metadata;
— diffuseness;
— divergence and divergence azimuth range;
— exclusion sector metadata;
10 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 13 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
— Production Metadata.
17.10.3.2 Syntax of an interface for object-based metadata
In 17.10.3.2 replace Table 265 with:
Table 265 — Syntax of mpegh3da_getObjectAudioAndMetadata()
Syntax No. of bits Mnemonic
mpegh3da_getObjectAudioAndMetadata()
{
/* FRAME CONFIGURATION */
goa_frameLength; 6 uimsbf
goa_audioTruncation; 2 bslbf
if (goa_audioTruncation>0) {
goa_numSamples; 13 uimsbf
} else {
goa_numSamples = goa_frameLength << 6;
}
/* OBJECT METADATA */
goa_numberOfOutputObjects; 9 uimsbf
for ( o = 0; o < goa_numberOfOutputObjects; o++ ) {
goa_elementID[o]; 9 uimsbf
goa_hasDynamicObjectPriority[o]; 1 bslbf
goa_hasUniformSpread[o]; 1 bslbf
/* OAM Data */
goa_numOAMframes[o] 6 uimsbf
for (nf = 0; nf < goa_numOAMframes[o]; nf++) {
goa_objectMetadataPresent; 1 bslbf
if (goa_objectMetadataPresent==1) {
goa_positionAzimuth[o][nf]; 8 uimsbf
goa_positionElevation[o][nf]; 6 uimsbf
goa_positionRadius[o][nf]; 4 uimsbf
goa_objectGainFactor[o][nf]; 7 uimsbf
if (goa_hasDynamicObjectPriority[o]) {
goa_dynamicObjectPriority[o][nf]; 3 uimsbf
}
if ( goa_hasUniformSpread[o] ) {
goa_uniformSpread[o][nf]; 7 uimsbf
} else {
goa_spreadWidth[o][nf]; 7 uimsbf
goa_spreadHeight[o][nf]; 5 uimsbf
goa_spreadDepth[o][nf]; 4 uimsbf
© ISO/IEC 2019 – All rights reserved 11
---------------------- Page: 14 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Table 265 (continued)
Syntax No. of bits Mnemonic
}
}
}
/* Signal group related data */
goa_fixedPosition[o]; 1 bslbf
goa_groupPriority[o]; 3 uimsbf
/* Enhanced Object Metadata */
goa_diffuseness[o]; 7 uimsbf
goa_divergence[o]; 7 uimsbf
goa_divergenceAzimuthRange[o]; 6 uimsbf
goa_numExclusionSectors[o]; 4 uimsbf
for ( s = 0; s < goa_numExclusionSectors[o]; s++) {
goa_usePredefinedSector[o][s]; 1 bslbf
if ( goa_usePredefinedSector[o][s] ) {
goa_excludeSectorIndex[o][s]; 4 uimsbf
} else {
goa_excludeSectorMinAzimuth[o][s]; 7 uimbsf
goa_excludeSectorMaxAzimuth[o][s]; 7 uimbsf
goa_excludeSectorMinElevation[o][s]; 5 uimbsf
goa_excludeSectorMaxElevation[o][s] 5 uimbsf
}
} /* for ( s = 0; s < goa_numExclusionSectors[o]; s++) */
} /* for ( o = 0; o < goa_numberOfOutputObjects; o++ ) */
/* GOA EXTENSION ELEMENTS */
goa_numberOfExtensionElements; 3 uimsbf
if (goa_numberOfExtensionElements)
{
for ( ext = 0; ext < goa_numberOfExtensionElements; ext++ ) {
goa_extElementType; 3 uimbsf
goa_extElementLength; 10 uimsbf
switch (goa_extElementType) {
case ID_EXT_GOA_PROD_METADATA:
goa_Production_Metadata();
break;
default:
break;
}
}
12 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 15 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
Table 265 (continued)
Syntax No. of bits Mnemonic
}
}
Add new tables after Table 265:
Table AMD1.1 — Syntax of goa_Production_Metadata()
Syntax No. of bits Mnemonic
goa_Production_Metadata()
{
/* PRODUCTION METADATA CONFIGURATION */
goa_ hasObjectDistance; 1 bslbf
if (goa_hasObjectDistance) {
for ( o = 0; o < goa_numberOfOutputObjects; o++ ) {
goa_bsObjectDistance[o]; 9 uimsbf
}
}
}
Table AMD1.2 — Syntax of goa_extElementType
goa_extElementType Value
ID_EXT_GOA_PROD_METADATA 0
/* reserved */ 1-7
© ISO/IEC 2019 – All rights reserved 13
---------------------- Page: 16 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
17.10.3.3. Semantics of the interface for object-based metadata
At the end of 17.10.3.3. add:
goa_numberOfExtensionElements Defines the number of extension elements to the GOA output
interface.
goa_extElementType Defines the type of the extension element.
goa_extElementLength Defines the length of the extension element.
goa_hasObjectDistance This flag defines if the object distance parameter is signalled
in the production metadata frame.
goa_bsObjectDistance This field describes the distance of an object. The field can
take values between 0 and 511, which maps to distance
values between 0 m and 177 km. Table AMD1.3 provides the
mapping of goa_bsObjectDistance field to the distance.
Table AMD1.3 — Mapping of position_distance field to the distance
goa_bsObjectDistance distance
0 distance = 0 m
1 − 511 distance = 0.01 * 2^( 0.0472188798661443 * ( goa_bsObjectDistance - 1 ) )
17.10.4.1 General
In subclause 17.10.4.1, replace paragraph 8 with:
If a channel output interface is provided by an implementation, the following metadata shall be provided
via the interface to be evaluated by possible external renderers:
— Number of channels;
— Number of valid PCM samples for the current frame;
— elementIDs for the referenced audio channels;
— Channel configuration;
— “fixed position” flag;
— Static group priority;
— Downmix matrix elements, if transmitted and matching the selected Reproduction Layout (according
to 10.3.1);
— Production metadata.
14 © ISO/IEC 2019 – All rights reserved
---------------------- Page: 17 ----------------------
ISO/IEC 23008-3:2019/Amd.1:2019(E)
17.10.4.2 Syntax of an interface for channel-based metadata
In subclause 17.10.4.2 replace Table 267 with:
Table 267 — Syntax of mpegh3da_getChannelMetadata()
Syntax No. of bits Mnemonic
mpegh3da_getChannelMetadata()
{
/* FRAME CONFIGURATION */
gca_frameLength; 6 uimsbf
gca_audioTruncation; 2 bslbf
if (gca_audioTruncation>0) {
gca_numSamples; 13 uimsbf
} else {
gca_numSamples = gca_frameLength << 6;
}
/* CHANNEL METADATA */
gca_numberOfOutputChannelGroups; 9 uimsbf
for ( cGrp = 0; cGrp < gca_numberOfOutputChannelGroups; cGrp ++ ) {
gca_numberOfChannels[cGrp]; 16 uimsbf
gca_channelLayout[cGrp] = SpeakerConfig3d();
for ( nChn = 0; nChn < gca_numberOfChannels[cGrp]; nChn++ {
gca_elementID[cGrp][nChn]; 9 uimsbf
}
/* TRACKING-RELATED METADATA */
gca_fixedChannelsPosition[cGrp]; 1 bslbf
/* GROUP-RELATED METADATA */
gca_groupPriority[cGrp]; 3 uimsbf
gca_channelGain[cGrp]; 8 uimsbf
/* DOWNMIX MATRIX ELEMENT */
gca_downmixAvailable; 1 bslbf
if (gca_downmixAvailable) {
gca_downmixConfi
...
Questions, Comments and Discussion
Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.