ISO/IEC 23003-3:2012/Cor 1:2012
(Corrigendum)Information technology — MPEG audio technologies — Part 3: Unified speech and audio coding — Technical Corrigendum 1
Information technology — MPEG audio technologies — Part 3: Unified speech and audio coding — Technical Corrigendum 1
Technologies de l'information — Technologies audio MPEG — Partie 3: Discours unifié et codage audio — Rectificatif technique 1
General Information
Relations
Standards Content (Sample)
INTERNATIONAL STANDARD ISO/IEC 23003-3:2012
TECHNICAL CORRIGENDUM 1
Published 2012-09-01
INTERNATIONAL ORGANIZATION FOR STANDARDIZATION МЕЖДУНАРОДНАЯ ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦИИ ORGANISATION INTERNATIONALE DE NORMALISATION
INTERNATIONAL ELECTROTECHNICAL COMMISSION МЕЖДУНАРОДНАЯ ЭЛЕКТРОТЕХНИЧЕСКАЯ КОМИССИЯ COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE
Information technology — MPEG audio technologies —
Part 3:
Unified speech and audio coding
TECHNICAL CORRIGENDUM 1
Technologies de l'information — Technologies audio MPEG —
Partie 3: Discours unifié et codage audio
RECTIFICATIF TECHNIQUE 1
Technical Corrigendum 1 to ISO/IEC 23003-3:2012 was prepared by Joint Technical Committee ISO/IEC
JTC 1, Information technology, Subcommittee SC 29, Coding of audio, picture, multimedia and hypermedia
information.
In 3.2 add at the end:
v[] = {a} This expression indicates that all elements of the array v shall be set to the value a.
ICS 35.040 Ref. No. ISO/IEC 23003-3:2012/Cor.1:2012(E)
© ISO/IEC 2012 – All rights reserved
Published in Switzerland
---------------------- Page: 1 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
In 4.1 replace the diagram:
with:
2 © ISO/IEC 2012 – All rights reserved
---------------------- Page: 2 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
In 4.2. replace:
The filterbank / block switching tool applies the inverse of the frequency mapping that was carried out in the
encoder. An inverse modified discrete cosine transform (IMDCT) is used for the filterbank tool. The IMDCT
can be configured to support 120, 128, 240, 256, 480, 512, 960 or 1024 spectral coefficients.
with:
The filterbank / block switching tool applies the inverse of the frequency mapping that was carried out in the
encoder. An inverse modified discrete cosine transform (IMDCT) is used for the filterbank tool. The IMDCT
can be configured to support 96, 128, 192, 256, 384, 512, 768, or 1024 spectral coefficients.
In 5.2 in Table 6, replace:
[…]
case: ID_USAC_EXT
UsacExtElementConfig();
break;
}
}
NOTE: UsacSingleChannelElementConfig(), UsacChannelPairElementConfig(), UsacLfeElement-
Config() and UsacExtElementConfig() signaled at position elemIdx refer to the corresponding
elements in UsacFrame() at the respective position elemIdx.
with
[…]
case: ID_USAC_EXT
UsacExtElementConfig();
break;
}
}
}
NOTE: UsacSingleChannelElementConfig(), UsacChannelPairElementConfig(), UsacLfeElement-
Config() and UsacExtElementConfig() signaled at position elemIdx refer to the corresponding
elements in UsacFrame() at the respective position elemIdx.
In 5.3.1 in Table 17 replace:
[…]
case: ID_USAC_EXT
UsacExtElement(usacIndependencyFlag);
break;
}
}
with
[…]
case: ID_USAC_EXT
UsacExtElement(usacIndependencyFlag);
break;
}
}
}
© ISO/IEC 2012 – All rights reserved 3
---------------------- Page: 3 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
In 5.3.1 in Table 21 replace:
[…]
if (usacExtElementUseDefaultLength) {
usacExtElementPayloadLength = usacExtElementDefaultLength;
} else {
usacExtElementPayloadLength = escapedValue(8,16,0);
}
[…]
with:
[…]
if (usacExtElementUseDefaultLength) {
usacExtElementPayloadLength = usacExtElementDefaultLength;
} else {
usacExtElementPayloadLength; 8 uimsbf
if (usacExtElementPayloadLength==255) {
valueAdd 16 uimsbf
usacExtElementPayloadLength += valueAdd - 2;
}
}
[…]
In 5.3.2 in Table 23 replace:
[…]
if (nrChannels == 2) {
StereoCoreToolInfo(core_mode);
}
[…]
with
[…]
if (nrChannels == 2) {
StereoCoreToolInfo(core_mode, indepFlag);
}
[…]
In 5.3.2 in Table 24 replace:
Syntax No. of bits Mnemonic
StereoCoreToolInfo(core_mode)
{
if (core_mode[0] == 0 && core_mode[1] == 0) {
tns_active; 1 uimsbf
common_window; 1 uimsbf
if (common_window) {
ics_info();
common_max_sfb; 1 uimsbf
if (common_max_sfb == 0) {
4 © ISO/IEC 2012 – All rights reserved
---------------------- Page: 4 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
if (window_sequence == EIGHT_SHORT_SEQUENCE) {
max_sfb1; 4 uimsbf
} else {
max_sfb1; 6 uimsbf
}
} else {
max_sfb1 = max_sfb;
}
max_sfb_ste = max(max_sfb, max_sfb1);
ms_mask_present; 2 uimsbf
if ( ms_mask_present == 1 ) {
for (g = 0; g < num_window_groups; g++) {
for (sfb = 0; sfb < max_sfb; sfb++) {
ms_used[g][sfb]; 1 uimsbf
}
}
}
if (ms_mask_present == 3) {
cplx_pred_data();
} else {
alpha_q_re[g][sfb] = 0;
alpha_q_im[g][sfb] = 0;
}
}
[…]
with
Syntax No. of bits Mnemonic
StereoCoreToolInfo(core_mode, indepFlag)
{
if (core_mode[0] == 0 && core_mode[1] == 0) {
tns_active; 1 uimsbf
common_window; 1 uimsbf
if (common_window) {
ics_info();
common_max_sfb; 1 uimsbf
if (common_max_sfb == 0) {
if (window_sequence == EIGHT_SHORT_SEQUENCE) {
max_sfb1; 4 uimsbf
} else {
max_sfb1; 6 uimsbf
}
} else {
max_sfb1 = max_sfb;
}
max_sfb_ste = max(max_sfb, max_sfb1);
ms_mask_present; 2 uimsbf
if ( ms_mask_present == 1 ) {
for (g = 0; g < num_window_groups; g++) {
for (sfb = 0; sfb < max_sfb_ste; sfb++) {
ms_used[g][sfb]; 1 uimsbf
}
}
}
if (ms_mask_present == 3) {
cplx_pred_data(max_sfb_ste, indepFlag);
} else {
© ISO/IEC 2012 – All rights reserved 5
---------------------- Page: 5 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
alpha_q_re[][] = {0};
alpha_q_im[][] = {0};
}
}
[…]
In 5.3.2 in Table 38 – Syntax of arith_data, replace:
pki = arith_get_pk(c + esc_nb<<17)
with:
pki = arith_get_pk(c + (esc_nb<<17));
In 6.1.1.1 replace:
usacSamplingFrequency Output sampling frequency of the decoder coded as unsigned integer value in
case usacSamplingFrequencyIndex equals zero.
with:
usacSamplingFrequency Output sampling frequency of the decoder coded as unsigned integer value in
case usacSamplingFrequencyIndex is equal to the escape value.
In 6.1.1.1 add definition of bs_pvc by replacing:
bs_interTes This flag signals the usage of the inter-TES tool in SBR.
with
bs_interTes This flag signals the usage of the inter-TES tool in SBR.
bs_pvc This flag signals the usage of the PVC tool in SBR.
In 6.1.1.2, replace:
bsStereoSbr This flag signals the usage of the stereo SBR in combination with MPEG
Surround decoding.
with
bsStereoSbr This flag signals the usage of the stereo SBR in combination with MPEG
Surround decoding. The value of bsStereoSbr is defined by stereoConfigIndex
(see Table 72).
6 © ISO/IEC 2012 – All rights reserved
---------------------- Page: 6 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
In 6.2.9.2.1 and in the headline of 6.2.9.2.3 replace:
scalefactor_data
with
scale_factor_data
In 6.2.9.2.4 replace
fd_channelffeh_stream()
with
fd_channel_stream()
In 6.2.9.4 replace:
As explain in ISO/IEC 14496-3:2009, 4.5.2.3.4, the width of the scalefactor bands is built in imitation of the
critical bands of the human auditory system. For that reason the number of scalefactor bands in a spectrum
and their width depend on the transform length and the sampling frequency. Table 4.129 to Table 4.147, in
ISO/IEC 14496-3:2009, 4.5.4, list the offset to the beginning of each scalefactor band on the transform
lengths 1024 (960) and 128 (120) and on the sampling frequencies.
4 / 3 samplingfr equency
For a transform length of 768 samples, the scale factor bands at are used. In case
a shorter transform length (dependent on coreCoderFrameLength) is used, swb_offset_long_window and
swb_offset_short_window are limited to the size of the transform length, and num_swb_long_window and
num_swb_short_window is determined according to the following pseudo code
with:
As explained in ISO/IEC 14496-3:2009, 4.5.2.3.4, the width of the scalefactor bands is built in imitation of the
critical bands of the human auditory system. For that reason the number of scalefactor bands in a spectrum
and their width depend on the transform length and the sampling frequency. Table 4.129 to Table 4.147, in
ISO/IEC 14496-3:2009, 4.5.4, list the offset to the beginning of each scalefactor band on the transform
lengths 1024 and 128 and on the sampling frequencies (window length of 2048 and 256).
For a transform length of 768 samples, the same 1024-based scalefactor band tables are used, but those
corresponding to 4 / 3 samplingfr equency . In case a shorter transform length (dependent on
coreCoderFrameLength) is used, swb_offset_long_window and swb_offset_short_window are limited to the
size of the transform length, and num_swb_long_window and num_swb_short_window is determined
according to the following pseudo code:
In 6.2.13.2 replace the text block:
bsOttBandsPhase defines the number of IPD parameter bands. If bsOttBandsPhasePresent==0, …
with:
bsOttBandsPhase defines the number of MPS parameter bands where phase coding is used. If
bsOttBandsPhasePresent==0, …
© ISO/IEC 2012 – All rights reserved 7
---------------------- Page: 7 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
In 7.4.3 replace the pseudo code:
/*Input variables*/
c /* old state context */
i /* Index of the 2-tuple to decode in the vector */
N /* Window Length */
/*Output value*/
c /*updated state context*/
c = arith_get_context(c,i,N) {
c = c>>4;
if (i
c = c + (q[0][i+1]<<12);
c = (c&0xFFF0);
if (i>0)
c = c + (q[1][i-1]);
if (i > 3) {
if ((q[1][i-3] + q[1][i-2] + q[1][i-1]) < 5)
return(c+0x10000);
}
return (c);
}
with:
/*Input variables*/
c /* old state context */
i /* Index of the 2-tuple to decode in the vector */
N /* Window Length */
/*Output value*/
c /*updated state context*/
c = arith_get_context(c,i,N) {
c = (c & 0xFFFF)>>4;
if (i
c = c + (q[0][i+1]<<12);
c = (c&0xFFF0);
if (i>0)
c = c + (q[1][i-1]);
if (i > 3) {
if ((q[1][i-3] + q[1][i-2] + q[1][i-1]) < 5)
return(c+0x10000);
}
return (c);
}
Further in 7.4.3 replace the following pseudo code:
/*input variables*/
offset /* number of decoded 2-tuples */
N /* Window length */
x_ac_dec /* vector of decoded spectal coefficients */
arith_finish(x_ace_dec,offset,N)
{
for (i=offset ;i
x_ac_dec[2*i] = 0;
x_ac_dec[2*i+1] = 0;
q[1][i] = 1;
}
}
with:
/*helper function*/
void arith_rewind_bitstream(offset);
/* move the bitstream position indicator backward by ‘offset’ bits*/
/*input variables*/
offset /* number of decoded 2-tuples */
N /* Window length */
x_ac_dec /* vector of decoded spectal coefficients */
8 © ISO/IEC 2012 – All rights reserved
---------------------- Page: 8 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
arith_finish(x_ace_dec,offset,N)
{
arith_rewind_bitstream(14);
for (i=offset ;i
x_ac_dec[2*i] = 0;
x_ac_dec[2*i+1] = 0;
q[1][i] = 1;
}
}
In 7.4.3 in function arith_decode(), replace:
value = (val<<1)…
with:
value = (value<<1)…
Further in 7.4.3, replace:
high = low +(range*cum_freq[symbol-1])>>14 – 1
with:
high = low +((range*cum_freq[symbol-1])>>14) – 1;
In 7.4.3 replace:
…with the value c&esc_nb<<17 as input argument,…
with
…with the value c + (esc_nb<<17) as input argument,…
In 7.4.3 replace:
…the function get_pk()…
with:
…the function arith_get_pk()…
Also in 7.4.3 replace:
…If the condition (esc_nb>0 && m==0) is true …
with:
…If the condition (m==0 && lev>0) is true,…
© ISO/IEC 2012 – All rights reserved 9
---------------------- Page: 9 ----------------------
ISO/IEC 23003-3:2012/Cor.1:2012(E)
Further down in the same subclause 7.4.3, replace:
arith_finish(x_ace_dec,offset,N)
with:
arith_finish(x_ac_dec,offset,N)
In 7.5.1 replace:
The general description of the SBR tool can be found in ISO/IEC 14496-3:2009, 4.6.18.
The above mentioned SBR tool shall be modified as described below.
with:
The general description of the SBR tool can be found in ISO/IEC 14496-3:2009, 4.6.18.
...
Questions, Comments and Discussion
Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.