Information technology — MPEG audio technologies — Part 4: Dynamic range control — Amendment 1: Side chain normalization

Technologies de l'information — Technologies audio MPEG — Partie 4: Contrôle de gamme dynamique — Amendement 1: Normalisation de l’entrée latérale

General Information

Status
Published
Publication Date
04-Jul-2022
Current Stage
6060 - International Standard published
Due Date
02-Aug-2022
Completion Date
05-Jul-2022
Ref Project

RELATIONS

Buy Standard

Standard
ISO/IEC 23003-4:2020/Amd 1:2022 - Information technology — MPEG audio technologies — Part 4: Dynamic range control — Amendment 1: Side chain normalization Released:5. 07. 2022
English language
15 pages
sale 15% off
Preview
sale 15% off
Preview

Standards Content (sample)

INTERNATIONAL ISO/IEC
STANDARD 23003-4
Second edition
2020-06
AMENDMENT 1
2022-07
Information technology — MPEG
audio technologies —
Part 4:
Dynamic range control
AMENDMENT 1: Side chain
normalization
Partie 4: Contrôle de gamme dynamique
AMENDEMENT 1: Normalisation de l’entrée latérale
Reference number
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
© ISO/IEC 2022
---------------------- Page: 1 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
COPYRIGHT PROTECTED DOCUMENT
© ISO/IEC 2022

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
Email: copyright@iso.org
Website: www.iso.org
Published in Switzerland
© ISO/IEC 2022 – All rights reserved
---------------------- Page: 2 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(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 document 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 or

www.iec.ch/members_experts/refdocs).

Attention is drawn to the possibility that some of the elements of this document may be the subject

of patent rights. ISO and IEC 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) or the IEC

list of patent declarations received (see https://patents.iec.ch).

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. In the IEC, see www.iec.ch/understanding-standards.

This document was prepared by Joint Technical Committee ISO/IEC JTC 1, Information Technology,

Subcommittee SC 29, Coding of audio, picture, multimedia, and hypermedia.

A list of all parts in the ISO/IEC 23003 series can be found on the ISO and IEC websites.

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 and

www.iec.ch/national-committees.
iii
© ISO/IEC 2022 – All rights reserved
---------------------- Page: 3 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
Information technology — MPEG audio technologies —
Part 4:
Dynamic range control
AMENDMENT 1: Side chain normalization
6.1.1

In the second last paragraph replace "UNIDRCCONFEXT_V1" with "UNIDRCCONFEXT_V1 or

UNIDRCCONFEXT_V2".
6.1.2.3
Add, after the fourth paragraph, the following new paragraph:

The drcCoefficientsUniDrc() payload for ISO/IEC 14496-12 (see Table 69) for version=2 and

characteristicV1Override=1 carries essentially the same information as the extension UNIDRCCONFEXT_

V2. The corresponding bitstream fields are coded the same way as specified in Table A.10.

6.4.6
Add, after the fourth paragraph, the following new paragraph:

If the encoder-side characteristic is provided in the bitstream, it is recommended to use linear gain

interpolation. ISO/IEC 23091-3 (CICP) encoder characteristics in the range of 65 to 70 are only supported

by drcCoefficientsUniDrcV1() as part of a UNIDRCCONFEXT_V2 extension. These characteristics shall

not be used otherwise. When a CICP characteristic in this range is inverted in the decoder, loudness

normalization shall be applied after the inversion based on the available loudness metadata and encoder

normalization gain, if applicable. This is shown in the pseudo code of Table E.3, where the output of

the inverse characteristic is computed with an offset depending on the value of sourceLoudness and

encDrcNormGainDb. sourceLoudness is the integrated DRC input loudness at the encoder before any

normalization. The value of sourceLoudness is obtained from the loudness metadata for the DRC.

encDrcNormGainDb is the signal gain in dB applied at the encoder DRC input. This gain value is available

in a UNIDRCCONFEXT_V2 extension payload to support legacy devices when characteristicV1Override==1

(see also E.4). The value of drcInputLoudnessTarget is the target input loudness of the DRC characteristic

applied to generate the DRC gains in the decoder. The drcCoefficientsUniDrc() payload of the Base

Media File Format ISO/IEC 14496-12 supports CICP characteristics 65 to 70 only if version>=2 (see also

Table 69).
6.4.6
Replace Table 17 with the following table:
© ISO/IEC 2022 – All rights reserved
---------------------- Page: 4 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)

Table 17 — Conversion of a DRC gain sample and associated slope from dB to linear domain

(slopeIsNegative==1 if the source DRC characteristic has a negative slope)
toLinear (gainDb, slopeDb) {
 SLOPE_FACTOR_DB_TO_LINEAR = 0.1151f;   /* ln(10) / 20 */
  EFFECT_BIT_CLIPPING = 0x0100;       /* drcSetEffect 9 (Clip.Prev.) */
  EFFECT_BIT_FADE = 0x0200;        /* drcSetEffect 10 (Fade) */

  EFFECT_BITS_DUCKING = 0x0400 | 0x0800;   /* drcSetEffect 11 or 12 (Ducking) */

  gainRatio = 1.0;
  gainDbMod = gainDb;
  if (((drcSetEffect & EFFECT_BITS_DUCKING) == 0) &&
          (drcSetEffect != EFFECT_BIT_FADE) &&
         (drcSetEffect != EFFECT_BIT_CLIPPING)) {
    if (drcCharacteristicTarget > 0) {
       gainDbMod = mapGain(gainDb); /* target characteristic from host */
    }
    else if (drcCoefficientsUniDrcV1Present == 1) {

      if (((gainDb >= 0.0) && (slopeIsNegative == 1)) || ((gainDb <= 0.0) && (slopeIsNegative == 0))) {

        if (targetCharacteristicLeftPresent == 1) {
          gainDbMod = mapGain(gainDb); /* target characteristic in payload */
        }
      }

      else if (((gainDb <= 0.0) && (slopeIsNegative == 1)) || ((gainDb >= 0.0) && (slopeIsNegative == 0))) {

        if (targetCharacteristicRightPresent == 1) {
           gainDbMod = mapGain(gainDb); /* target characteristic in payload */
        }
      }
    }
    if (gainDbMod < 0.0) {
      gainRatio *= compress;
    }
    else {
      gainRatio *= boost;
    }
  }
  if (gainScalingPresent) {
    if (gainDbMod < 0.0) {
      gainRatio *= attenuationScaling;
    }
    else {
      gainRatio *= amplificationScaling;
    }
  }
  if (duckingScalingPresent && (drcSetEffect & EFFECT_BITS_DUCKING)) {
    gainRatio *= duckingScaling;
  }
  gainLin = pow(2.0, gainRatio * gainDbMod / 6.0);
  slopeLin = SLOPE_FACTOR_DB_TO_LINEAR * gainRatio * gainLin * slopeDb;
  if (gainOffsetPresent) {
© ISO/IEC 2022 – All rights reserved
---------------------- Page: 5 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
    gainLin *= pow(2, gainOffset/6.0);
  }
  /* The only drcSetEffect is "clipping prevention" */
  if (limiterPeakTargetPresent && (drcSetEffect == EFFECT_BIT_CLIPPING)) {
    gainLin *= pow(2, max(0.0, -limiterPeakTarget-loudnessNormalizationGainDb
         -loudnessNormalizationGainModificationDb)/6.0);
    if (gainLin >= 1.0) {
      gainLin = 1.0;
      slopeLin = 0.0;
    }
  }
  return (gainLin, slopeLin);
7.3
Replace Table 69 with the following table:
Table 69 — Syntax of drcCoefficientsUniDrc() payload for ISO/IEC 14496-12

aligned(8) class DRCCoefficientsUniDrc extends FullBox(‘udc2’, version, flags=0) {

// N copies of this box, one of these per DRC_location, plus boxes with characteristicV1Override ==

characteristicV1Override = 0;
if (version >= 2) {
bit(1) characteristicV1Override;
if (characteristicV1Override == 1) {
bit(4) reserved = 0;
signed int(5)  DRC_location;
unsigned int(6) gainSetCount;
for (j=1; j<=gainSetCount; j++) {
bit(3) reserved = 0;
bit(1) characteristicOverridePresent;
unsigned int(4) bandCount;
if (characteristicOverridePresent == 1) {
for (k=1; k<=bandCount; k++) {
bit(3) reserved = 0;
unsigned int(7) overrideCicpCharacteristic;
unsigned int(6) bsEncDrcNormGain;
}
}
}
}
}
if (characteristicV1Override == 0) {
if (version < 2) {
© ISO/IEC 2022 – All rights reserved
---------------------- Page: 6 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
bit(1) reserved = 0;
}
bit(1)     reserved = 0;
signed int(5)  DRC_location;
bit(1)     drc_frame_size_present;
if (drc_frame_size_present == 1) {
bit(1)      reserved = 0;
unsigned int(15)  bs_drc_frame_size;
}
if (version >= 1) {
bit(5) reserved = 0;
bit(1) drc_characteristic_left_present;
bit(1) drc_characteristic_right_present;
bit(1) shape_filters_present;
if (drc_characteristic_left_present == 1) {
bit(4)      reserved = 0;
unsigned int(4) characteristic_left_count;
for (k=1; k<=characteristic_left_count; k++) {
bit(7)      reserved = 0;
unsigned int(1) characteristic_format;
if (characteristic_format==0) {
bit(1)      reserved = 0;
unsigned int(6) bs_gain_left;
unsigned int(4) bs_io_ratio_left;
unsigned int(4) bs_exp_left;
bit(1)     flip_sign_left;
} else {
bit(6)      reserved = 0;
unsigned int(2)  bs_char_node_count;
for (n=1; n<=bs_char_node_count+1; n++) {
bit(3)      reserved = 0;
unsigned int(5)  bs_node_level_delta;
unsigned int(8)  bs_node_gain;
}
}
}
}
if (drc_characteristic_right_present == 1) {
bit(4)      reserved = 0;
unsigned int(4) characteristic_right_count;
for (k=1; k<=characteristic_right_count; k++) {
bit(7)      reserved = 0;
unsigned int(1)  characteristic_format;
if (characteristic_format==0) {
© ISO/IEC 2022 – All rights reserved
---------------------- Page: 7 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
bit(1)     reserved = 0;
unsigned int(6) bs_gain_right;
unsigned int(4) bs_io_ratio_right;
unsigned int(4) bs_exp_right;
bit(1)     flip_sign_right;
} else {
bit(6)     reserved = 0;
unsigned int(2) bs_char_node_count;
for (n=1; n<=bs_char_node_count+1; n++) {
bit(3)     reserved = 0;
unsigned int(5) bs_node_level_delta;
unsigned int(8) bs_node_gain;
}
}
}
}
if (shape_filters_present==1) {
bit(4) reserved = 0;
unsigned int(4) shape_filter_count;
for (k=1; k<=shape_filter_count; k++) {
bit(4) reserved = 0;
bit(1) LF_cut_filter_present;
bit(1) LF_boost_filter_present;
bit(1) HF_cut_filter_present;
bit(1) HF_boost_filter_present;
if (LF_cut_filter_present) {
bit(3)     reserved = 0;
unsigned int(3) LF_corner_freq_index;
unsigned int(2) LF_filter_strength_index;
}
if (LF_boost_filter_present) {
bit(3)     reserved = 0;
unsigned int(3) LF_corner_freq_index;
unsigned int(2) LF_filter_strength_index;
}
if (HF_cut_filter_present) {
bit(3)     reserved = 0;
unsigned int(3) HF_corner_freq_index;
unsigned int(2) HF_filter_strength_index;
}
if (HF_boost_filter_present) {
bit(3)     reserved = 0;
unsigned int(3) HF_corner_freq_index;
unsigned int(2) HF_filter_strength_index;
© ISO/IEC 2022 – All rights reserved
---------------------- Page: 8 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
}
}
}
}
bit(1)     reserved = 0;
unsigned int(1) delayMode;
if (version >= 1} {
bit(2)     reserved = 0;
unsigned int(6) gain_sequence_count;
}
unsigned int(6) gain_set_count;
for (i=1; i<=gain_set_count; i++) {
bit(2)     reserved = 0;
unsigned int(2) gain_coding_profile;
unsigned int(1) gain_interpolation_type;
unsigned int(1) full_frame;
unsigned int(1) time_alignment;
bit(1)     time_delta_min_present;
if (time_delta_min_present == 1) {
bit(5)      reserved = 0;
unsigned int(11) bs_time_delta_min;
}
if (gain_coding_profile!=3) {
bit(3)     reserved = 0;
unsigned int(4) band_count;    // shall be >= 1
unsigned int(1) drc_band_type;
for (j = 1; j <= band_count; j++) {
if (version>=1) {
unsigned int(6) bs_index;
bit(1)     drc_characteristic_present
bit(1)     drc_characteristic_format_is_CICP
if (drc_characteristic_present==1) {

if (drc_characteristic_format_is_CICP==1) {

bit(1)     reserved;

unsigned int(7) drc_characteristic;

} else {

unsigned int(4) drc_characteristic_left_index;

unsigned int(4) drc_characteristic_right_index;

}
}
} else {
bit(1)     reserved = 0;
unsigned int(7) drc_characteristic;
}
© ISO/IEC 2022 – All rights reserved
---------------------- Page: 9 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
}
for (j = 2; j <= band_count; j++){
if (drc_band_type == 1) {
bit(4)     reserved = 0;
unsigned int(4) crossover_freq_index;
} else {
bit(6)      reserved = 0;
unsigned int(10) start_sub_band_index;
}
}
}
}
}
7.3
Replace Table 75 with the following table:
Table 75 — Syntax of uniDrcConfigExtension() payload
Syntax No. of bits Mnemonic
uniDrcConfigExtension()
while (uniDrcConfigExtType != UNIDRCCONFEXT_TERM) { 4 uimsbf
extSizeBits = bitSizeLen + 4; 4 uimsbf
extBitSize = bitSize + 1; extSizeBits uimsbf
switch (uniDrcConfigExtType) {
case UNIDRCCONFEXT_PARAM_DRC:
drcCoefficientsParametricDrc();
parametricDrcInstructionsCount; 4 uimsbf
for (i=0; i parametricDrcInstructions ();
}
break;
case UNIDRCCONFEXT_V2:
if (characteristicV1Override==1) { 1 bslbf
                              drcCoefficientsOverrideCount; 3 uimsbf
for (i=0; i drcLocation; 4 uimsbf
gainSetCount; 6 uimsbf
for (j=0; j

if (characteristicOverridePresent==1) { 1 bslbf

bandCount; 4 uimsbf
for (k=0; k

overrideCicpCharacteristic; 7 uimsbf

© ISO/IEC 2022 – All rights reserved
---------------------- Page: 10 ----------------------
ISO/IEC 23003-4:2020/Amd. 1:2022(E)
Table 75 (continued)
Syntax No. of bits Mnemonic

bsEncDrcNormGain; 6 uimsbf

...

Questions, Comments and Discussion

Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.