Coverage Report

Created: 2025-12-31 06:47

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/aac/libAACdec/src/channel.cpp
Line
Count
Source
1
/* -----------------------------------------------------------------------------
2
Software License for The Fraunhofer FDK AAC Codec Library for Android
3
4
© Copyright  1995 - 2020 Fraunhofer-Gesellschaft zur Förderung der angewandten
5
Forschung e.V. All rights reserved.
6
7
 1.    INTRODUCTION
8
The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software
9
that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding
10
scheme for digital audio. This FDK AAC Codec software is intended to be used on
11
a wide variety of Android devices.
12
13
AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient
14
general perceptual audio codecs. AAC-ELD is considered the best-performing
15
full-bandwidth communications codec by independent studies and is widely
16
deployed. AAC has been standardized by ISO and IEC as part of the MPEG
17
specifications.
18
19
Patent licenses for necessary patent claims for the FDK AAC Codec (including
20
those of Fraunhofer) may be obtained through Via Licensing
21
(www.vialicensing.com) or through the respective patent owners individually for
22
the purpose of encoding or decoding bit streams in products that are compliant
23
with the ISO/IEC MPEG audio standards. Please note that most manufacturers of
24
Android devices already license these patent claims through Via Licensing or
25
directly from the patent owners, and therefore FDK AAC Codec software may
26
already be covered under those patent licenses when it is used for those
27
licensed purposes only.
28
29
Commercially-licensed AAC software libraries, including floating-point versions
30
with enhanced sound quality, are also available from Fraunhofer. Users are
31
encouraged to check the Fraunhofer website for additional applications
32
information and documentation.
33
34
2.    COPYRIGHT LICENSE
35
36
Redistribution and use in source and binary forms, with or without modification,
37
are permitted without payment of copyright license fees provided that you
38
satisfy the following conditions:
39
40
You must retain the complete text of this software license in redistributions of
41
the FDK AAC Codec or your modifications thereto in source code form.
42
43
You must retain the complete text of this software license in the documentation
44
and/or other materials provided with redistributions of the FDK AAC Codec or
45
your modifications thereto in binary form. You must make available free of
46
charge copies of the complete source code of the FDK AAC Codec and your
47
modifications thereto to recipients of copies in binary form.
48
49
The name of Fraunhofer may not be used to endorse or promote products derived
50
from this library without prior written permission.
51
52
You may not charge copyright license fees for anyone to use, copy or distribute
53
the FDK AAC Codec software or your modifications thereto.
54
55
Your modified versions of the FDK AAC Codec must carry prominent notices stating
56
that you changed the software and the date of any change. For modified versions
57
of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android"
58
must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK
59
AAC Codec Library for Android."
60
61
3.    NO PATENT LICENSE
62
63
NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without
64
limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE.
65
Fraunhofer provides no warranty of patent non-infringement with respect to this
66
software.
67
68
You may use this FDK AAC Codec software or modifications thereto only for
69
purposes that are authorized by appropriate patent licenses.
70
71
4.    DISCLAIMER
72
73
This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright
74
holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
75
including but not limited to the implied warranties of merchantability and
76
fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
77
CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary,
78
or consequential damages, including but not limited to procurement of substitute
79
goods or services; loss of use, data, or profits, or business interruption,
80
however caused and on any theory of liability, whether in contract, strict
81
liability, or tort (including negligence), arising in any way out of the use of
82
this software, even if advised of the possibility of such damage.
83
84
5.    CONTACT INFORMATION
85
86
Fraunhofer Institute for Integrated Circuits IIS
87
Attention: Audio and Multimedia Departments - FDK AAC LL
88
Am Wolfsmantel 33
89
91058 Erlangen, Germany
90
91
www.iis.fraunhofer.de/amm
92
amm-info@iis.fraunhofer.de
93
----------------------------------------------------------------------------- */
94
95
/**************************** AAC decoder library ******************************
96
97
   Author(s):   Josef Hoepfl
98
99
   Description:
100
101
*******************************************************************************/
102
103
#include "channel.h"
104
#include "aacdecoder.h"
105
#include "block.h"
106
#include "aacdec_tns.h"
107
#include "FDK_bitstream.h"
108
109
#include "conceal.h"
110
111
#include "rvlc.h"
112
113
#include "aacdec_hcr.h"
114
115
#include "usacdec_lpd.h"
116
#include "usacdec_fac.h"
117
118
static void MapMidSideMaskToPnsCorrelation(
119
13.1k
    CAacDecoderChannelInfo *pAacDecoderChannelInfo[2]) {
120
13.1k
  int group;
121
122
64.9k
  for (group = 0; group < pAacDecoderChannelInfo[L]->icsInfo.WindowGroups;
123
51.7k
       group++) {
124
51.7k
    UCHAR groupMask = 1 << group;
125
126
223k
    for (UCHAR band = 0; band < pAacDecoderChannelInfo[L]->icsInfo.MaxSfBands;
127
171k
         band++) {
128
171k
      if (pAacDecoderChannelInfo[L]->pComData->jointStereoData.MsUsed[band] &
129
171k
          groupMask) { /* channels are correlated */
130
18.0k
        CPns_SetCorrelation(&pAacDecoderChannelInfo[L]->data.aac.PnsData, group,
131
18.0k
                            band, 0);
132
133
18.0k
        if (CPns_IsPnsUsed(&pAacDecoderChannelInfo[L]->data.aac.PnsData, group,
134
18.0k
                           band) &&
135
4.11k
            CPns_IsPnsUsed(&pAacDecoderChannelInfo[R]->data.aac.PnsData, group,
136
4.11k
                           band))
137
1.83k
          pAacDecoderChannelInfo[L]->pComData->jointStereoData.MsUsed[band] ^=
138
1.83k
              groupMask; /* clear the groupMask-bit */
139
18.0k
      }
140
171k
    }
141
51.7k
  }
142
13.1k
}
143
144
static void Clean_Complex_Prediction_coefficients(
145
    CJointStereoPersistentData *pJointStereoPersistentData, int windowGroups,
146
0
    const int low_limit, const int high_limit) {
147
0
  for (int group = 0; group < windowGroups; group++) {
148
0
    for (int sfb = low_limit; sfb < high_limit; sfb++) {
149
0
      pJointStereoPersistentData->alpha_q_re_prev[group][sfb] = 0;
150
0
      pJointStereoPersistentData->alpha_q_im_prev[group][sfb] = 0;
151
0
    }
152
0
  }
153
0
}
154
155
/*!
156
  \brief Decode channel pair element
157
158
  The function decodes a channel pair element.
159
160
  \return  none
161
*/
162
void CChannelElement_Decode(
163
    CAacDecoderChannelInfo
164
        *pAacDecoderChannelInfo[2], /*!< pointer to aac decoder channel info */
165
    CAacDecoderStaticChannelInfo *pAacDecoderStaticChannelInfo[2],
166
    SamplingRateInfo *pSamplingRateInfo, UINT flags, UINT elFlags,
167
584k
    int el_channels) {
168
584k
  int ch = 0;
169
170
584k
  int maxSfBandsL = 0, maxSfBandsR = 0;
171
584k
  int maybe_jstereo = (el_channels > 1);
172
173
584k
  if (flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA) && el_channels == 2) {
174
101k
    if (pAacDecoderChannelInfo[L]->data.usac.core_mode ||
175
90.7k
        pAacDecoderChannelInfo[R]->data.usac.core_mode) {
176
16.2k
      maybe_jstereo = 0;
177
16.2k
    }
178
101k
  }
179
180
584k
  if (maybe_jstereo) {
181
214k
    maxSfBandsL =
182
214k
        GetScaleFactorBandsTransmitted(&pAacDecoderChannelInfo[L]->icsInfo);
183
214k
    maxSfBandsR =
184
214k
        GetScaleFactorBandsTransmitted(&pAacDecoderChannelInfo[R]->icsInfo);
185
186
    /* apply ms */
187
214k
    if (pAacDecoderChannelInfo[L]->pDynData->RawDataInfo.CommonWindow) {
188
186k
      if (!(flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA))) {
189
124k
        if (pAacDecoderChannelInfo[L]->data.aac.PnsData.PnsActive ||
190
112k
            pAacDecoderChannelInfo[R]->data.aac.PnsData.PnsActive) {
191
13.1k
          MapMidSideMaskToPnsCorrelation(pAacDecoderChannelInfo);
192
13.1k
        }
193
124k
      }
194
      /* if tns_on_lr == 1 run MS */ /* &&
195
                                        (pAacDecoderChannelInfo[L]->pDynData->specificTo.usac.tns_active
196
                                        == 1) */
197
186k
      if (((flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA)) &&
198
61.6k
           (pAacDecoderChannelInfo[L]->pDynData->specificTo.usac.tns_on_lr ==
199
61.6k
            1)) ||
200
167k
          ((flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA)) == 0)) {
201
167k
        int max_sfb_ste = (INT)(pAacDecoderChannelInfo[L]->icsInfo.max_sfb_ste);
202
203
167k
        CJointStereo_ApplyMS(
204
167k
            pAacDecoderChannelInfo, pAacDecoderStaticChannelInfo,
205
167k
            pAacDecoderChannelInfo[L]->pSpectralCoefficient,
206
167k
            pAacDecoderChannelInfo[R]->pSpectralCoefficient,
207
167k
            pAacDecoderChannelInfo[L]->pDynData->aSfbScale,
208
167k
            pAacDecoderChannelInfo[R]->pDynData->aSfbScale,
209
167k
            pAacDecoderChannelInfo[L]->specScale,
210
167k
            pAacDecoderChannelInfo[R]->specScale,
211
167k
            GetScaleFactorBandOffsets(&pAacDecoderChannelInfo[L]->icsInfo,
212
167k
                                      pSamplingRateInfo),
213
167k
            GetWindowGroupLengthTable(&pAacDecoderChannelInfo[L]->icsInfo),
214
167k
            GetWindowGroups(&pAacDecoderChannelInfo[L]->icsInfo), max_sfb_ste,
215
167k
            maxSfBandsL, maxSfBandsR,
216
167k
            pAacDecoderChannelInfo[L]
217
167k
                ->pComData->jointStereoData.store_dmx_re_prev,
218
167k
            &(pAacDecoderChannelInfo[L]
219
167k
                  ->pComData->jointStereoData.store_dmx_re_prev_e),
220
167k
            1);
221
222
167k
      } /* if ( ((elFlags & AC_EL_USAC_CP_POSSIBLE).... */
223
186k
    }   /* if (pAacDecoderChannelInfo[L]->pDynData->RawDataInfo.CommonWindow)*/
224
225
    /* apply intensity stereo */ /* modifies pAacDecoderChannelInfo[]->aSpecSfb
226
                                  */
227
214k
    if (!(flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA))) {
228
128k
      if ((pAacDecoderChannelInfo[L]->pDynData->RawDataInfo.CommonWindow ==
229
128k
           1) &&
230
124k
          (el_channels == 2)) {
231
124k
        CJointStereo_ApplyIS(
232
124k
            pAacDecoderChannelInfo,
233
124k
            GetScaleFactorBandOffsets(&pAacDecoderChannelInfo[L]->icsInfo,
234
124k
                                      pSamplingRateInfo),
235
124k
            GetWindowGroupLengthTable(&pAacDecoderChannelInfo[L]->icsInfo),
236
124k
            GetWindowGroups(&pAacDecoderChannelInfo[L]->icsInfo),
237
124k
            GetScaleFactorBandsTransmitted(
238
124k
                &pAacDecoderChannelInfo[L]->icsInfo));
239
124k
      }
240
128k
    }
241
214k
  } /* maybe_stereo */
242
243
1.39M
  for (ch = 0; ch < el_channels; ch++) {
244
814k
    if (pAacDecoderChannelInfo[ch]->renderMode == AACDEC_RENDER_LPD) {
245
      /* Decode LPD data */
246
51.5k
      CLpdChannelStream_Decode(pAacDecoderChannelInfo[ch],
247
51.5k
                               pAacDecoderStaticChannelInfo[ch], flags);
248
763k
    } else {
249
763k
      UCHAR noSfbs =
250
763k
          GetScaleFactorBandsTransmitted(&pAacDecoderChannelInfo[ch]->icsInfo);
251
      /* For USAC common window: max_sfb of both channels may differ
252
       * (common_max_sfb == 0). */
253
763k
      if ((maybe_jstereo == 1) &&
254
428k
          (pAacDecoderChannelInfo[L]->pDynData->RawDataInfo.CommonWindow ==
255
428k
           1)) {
256
373k
        noSfbs = fMax(maxSfBandsL, maxSfBandsR);
257
373k
      }
258
763k
      int CP_active = 0;
259
763k
      if (elFlags & AC_EL_USAC_CP_POSSIBLE) {
260
128k
        CP_active = pAacDecoderChannelInfo[ch]
261
128k
                        ->pComData->jointStereoData.cplx_pred_flag;
262
128k
      }
263
264
      /* Omit writing of pAacDecoderChannelInfo[ch]->specScale for complex
265
         stereo prediction since scaling has already been carried out. */
266
763k
      int max_sfb_ste = (INT)(pAacDecoderChannelInfo[L]->icsInfo.max_sfb_ste);
267
268
763k
      if (!(CP_active && (max_sfb_ste == noSfbs)) ||
269
102k
          !(CP_active &&
270
102k
            !(pAacDecoderChannelInfo[ch]->pDynData->TnsData.Active)) ||
271
18.7k
          ((flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA)) &&
272
18.7k
           (pAacDecoderChannelInfo[L]->pDynData->specificTo.usac.tns_on_lr ==
273
752k
            0))) {
274
752k
        CBlock_ScaleSpectralData(pAacDecoderChannelInfo[ch], noSfbs,
275
752k
                                 pSamplingRateInfo);
276
277
        /*Active for the case of TNS applied before MS/CP*/
278
752k
        if ((flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA)) &&
279
363k
            (pAacDecoderChannelInfo[L]->pDynData->specificTo.usac.tns_on_lr ==
280
363k
             0)) {
281
240k
          if (IsLongBlock(&pAacDecoderChannelInfo[ch]->icsInfo)) {
282
2.12M
            for (int i = 0; i < noSfbs; i++) {
283
1.90M
              pAacDecoderChannelInfo[ch]->pDynData->aSfbScale[i] =
284
1.90M
                  pAacDecoderChannelInfo[ch]->specScale[0];
285
1.90M
            }
286
227k
          } else {
287
112k
            for (int i = 0; i < 8; i++) {
288
755k
              for (int j = 0; j < noSfbs; j++) {
289
654k
                pAacDecoderChannelInfo[ch]->pDynData->aSfbScale[i * 16 + j] =
290
654k
                    pAacDecoderChannelInfo[ch]->specScale[i];
291
654k
              }
292
100k
            }
293
12.5k
          }
294
240k
        }
295
752k
      }
296
763k
    }
297
814k
  } /* End "for (ch = 0; ch < el_channels; ch++)" */
298
299
584k
  if (maybe_jstereo) {
300
    /* apply ms */
301
214k
    if (pAacDecoderChannelInfo[L]->pDynData->RawDataInfo.CommonWindow) {
302
186k
    } /* CommonWindow */
303
27.7k
    else {
304
27.7k
      if (elFlags & AC_EL_USAC_CP_POSSIBLE) {
305
3.69k
        FDKmemclear(
306
3.69k
            pAacDecoderStaticChannelInfo[L]
307
3.69k
                ->pCpeStaticData->jointStereoPersistentData.alpha_q_re_prev,
308
3.69k
            JointStereoMaximumGroups * JointStereoMaximumBands * sizeof(SHORT));
309
3.69k
        FDKmemclear(
310
3.69k
            pAacDecoderStaticChannelInfo[L]
311
3.69k
                ->pCpeStaticData->jointStereoPersistentData.alpha_q_im_prev,
312
3.69k
            JointStereoMaximumGroups * JointStereoMaximumBands * sizeof(SHORT));
313
3.69k
      }
314
27.7k
    }
315
316
214k
  } /* if (maybe_jstereo) */
317
318
1.39M
  for (ch = 0; ch < el_channels; ch++) {
319
814k
    if (pAacDecoderChannelInfo[ch]->renderMode == AACDEC_RENDER_LPD) {
320
763k
    } else {
321
763k
      if (!(flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA))) {
322
        /* Use same seed for coupled channels (CPE) */
323
389k
        int pnsCh = (ch > 0) ? L : ch;
324
389k
        CPns_UpdateNoiseState(
325
389k
            &pAacDecoderChannelInfo[ch]->data.aac.PnsData,
326
389k
            pAacDecoderChannelInfo[pnsCh]->data.aac.PnsData.currentSeed,
327
389k
            pAacDecoderChannelInfo[ch]->pComData->pnsRandomSeed);
328
389k
      }
329
330
763k
      if ((!(flags & (AC_USAC))) ||
331
373k
          ((flags & (AC_USAC)) &&
332
373k
           (pAacDecoderChannelInfo[L]->pDynData->specificTo.usac.tns_active ==
333
373k
            1)) ||
334
686k
          (maybe_jstereo == 0)) {
335
686k
        ApplyTools(
336
686k
            pAacDecoderChannelInfo, pSamplingRateInfo, flags, elFlags, ch,
337
686k
            pAacDecoderChannelInfo[L]->pDynData->RawDataInfo.CommonWindow);
338
686k
      }
339
763k
    } /* End "} else" */
340
814k
  }   /* End "for (ch = 0; ch < el_channels; ch++)" */
341
342
584k
  if (maybe_jstereo) {
343
    /* apply ms */
344
214k
    if (pAacDecoderChannelInfo[L]->pDynData->RawDataInfo.CommonWindow) {
345
      /* if tns_on_lr == 0 run MS */
346
186k
      if ((flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA)) &&
347
61.6k
          (pAacDecoderChannelInfo[L]->pDynData->specificTo.usac.tns_on_lr ==
348
61.6k
           0)) {
349
18.6k
        int max_sfb_ste = (INT)(pAacDecoderChannelInfo[L]->icsInfo.max_sfb_ste);
350
351
18.6k
        CJointStereo_ApplyMS(
352
18.6k
            pAacDecoderChannelInfo, pAacDecoderStaticChannelInfo,
353
18.6k
            pAacDecoderChannelInfo[L]->pSpectralCoefficient,
354
18.6k
            pAacDecoderChannelInfo[R]->pSpectralCoefficient,
355
18.6k
            pAacDecoderChannelInfo[L]->pDynData->aSfbScale,
356
18.6k
            pAacDecoderChannelInfo[R]->pDynData->aSfbScale,
357
18.6k
            pAacDecoderChannelInfo[L]->specScale,
358
18.6k
            pAacDecoderChannelInfo[R]->specScale,
359
18.6k
            GetScaleFactorBandOffsets(&pAacDecoderChannelInfo[L]->icsInfo,
360
18.6k
                                      pSamplingRateInfo),
361
18.6k
            GetWindowGroupLengthTable(&pAacDecoderChannelInfo[L]->icsInfo),
362
18.6k
            GetWindowGroups(&pAacDecoderChannelInfo[L]->icsInfo), max_sfb_ste,
363
18.6k
            maxSfBandsL, maxSfBandsR,
364
18.6k
            pAacDecoderChannelInfo[L]
365
18.6k
                ->pComData->jointStereoData.store_dmx_re_prev,
366
18.6k
            &(pAacDecoderChannelInfo[L]
367
18.6k
                  ->pComData->jointStereoData.store_dmx_re_prev_e),
368
18.6k
            1);
369
18.6k
      }
370
371
186k
    } /* if (pAacDecoderChannelInfo[L]->pDynData->RawDataInfo.CommonWindow) */
372
373
214k
  } /* if (maybe_jstereo) */
374
375
1.39M
  for (ch = 0; ch < el_channels; ch++) {
376
814k
    if (elFlags & AC_EL_USAC_CP_POSSIBLE) {
377
149k
      pAacDecoderStaticChannelInfo[L]
378
149k
          ->pCpeStaticData->jointStereoPersistentData.clearSpectralCoeffs = 0;
379
149k
    }
380
814k
  }
381
382
584k
  CRvlc_ElementCheck(pAacDecoderChannelInfo, pAacDecoderStaticChannelInfo,
383
584k
                     flags, el_channels);
384
584k
}
385
386
void CChannel_CodebookTableInit(
387
376k
    CAacDecoderChannelInfo *pAacDecoderChannelInfo) {
388
376k
  int b, w, maxBands, maxWindows;
389
376k
  int maxSfb = GetScaleFactorBandsTransmitted(&pAacDecoderChannelInfo->icsInfo);
390
376k
  UCHAR *pCodeBook = pAacDecoderChannelInfo->pDynData->aCodeBook;
391
392
376k
  if (IsLongBlock(&pAacDecoderChannelInfo->icsInfo)) {
393
293k
    maxBands = 64;
394
293k
    maxWindows = 1;
395
293k
  } else {
396
82.1k
    maxBands = 16;
397
82.1k
    maxWindows = 8;
398
82.1k
  }
399
400
1.32M
  for (w = 0; w < maxWindows; w++) {
401
3.65M
    for (b = 0; b < maxSfb; b++) {
402
2.70M
      pCodeBook[b] = ESCBOOK;
403
2.70M
    }
404
27.5M
    for (; b < maxBands; b++) {
405
26.6M
      pCodeBook[b] = ZERO_HCB;
406
26.6M
    }
407
951k
    pCodeBook += maxBands;
408
951k
  }
409
376k
}
410
411
/*
412
 * Arbitrary order bitstream parser
413
 */
414
AAC_DECODER_ERROR CChannelElement_Read(
415
    HANDLE_FDK_BITSTREAM hBs, CAacDecoderChannelInfo *pAacDecoderChannelInfo[],
416
    CAacDecoderStaticChannelInfo *pAacDecoderStaticChannelInfo[],
417
    const AUDIO_OBJECT_TYPE aot, SamplingRateInfo *pSamplingRateInfo,
418
    const UINT flags, const UINT elFlags, const UINT frame_length,
419
    const UCHAR numberOfChannels, const SCHAR epConfig,
420
596k
    HANDLE_TRANSPORTDEC pTpDec) {
421
596k
  AAC_DECODER_ERROR error = AAC_DEC_OK;
422
596k
  const element_list_t *list;
423
596k
  int i, ch, decision_bit;
424
596k
  int crcReg1 = -1, crcReg2 = -1;
425
596k
  int cplxPred;
426
596k
  int ind_sw_cce_flag = 0, num_gain_element_lists = 0;
427
428
596k
  FDK_ASSERT((numberOfChannels == 1) || (numberOfChannels == 2));
429
430
  /* Get channel element sequence table */
431
596k
  list = getBitstreamElementList(aot, epConfig, numberOfChannels, 0, elFlags);
432
596k
  if (list == NULL) {
433
0
    error = AAC_DEC_UNSUPPORTED_FORMAT;
434
0
    goto bail;
435
0
  }
436
437
596k
  CTns_Reset(&pAacDecoderChannelInfo[0]->pDynData->TnsData);
438
  /* Set common window to 0 by default. If signalized in the bit stream it will
439
   * be overwritten later explicitely */
440
596k
  pAacDecoderChannelInfo[0]->pDynData->RawDataInfo.CommonWindow = 0;
441
596k
  if (flags & (AC_USAC | AC_RSVD50 | AC_RSV603DA)) {
442
327k
    pAacDecoderChannelInfo[0]->pDynData->specificTo.usac.tns_active = 0;
443
327k
    pAacDecoderChannelInfo[0]->pDynData->specificTo.usac.tns_on_lr = 0;
444
327k
  }
445
596k
  if (numberOfChannels == 2) {
446
235k
    CTns_Reset(&pAacDecoderChannelInfo[1]->pDynData->TnsData);
447
235k
    pAacDecoderChannelInfo[1]->pDynData->RawDataInfo.CommonWindow = 0;
448
235k
  }
449
450
596k
  cplxPred = 0;
451
596k
  if (pAacDecoderStaticChannelInfo != NULL) {
452
595k
    if (elFlags & AC_EL_USAC_CP_POSSIBLE) {
453
75.3k
      pAacDecoderChannelInfo[0]->pComData->jointStereoData.cplx_pred_flag = 0;
454
75.3k
      cplxPred = 1;
455
75.3k
    }
456
595k
  }
457
458
596k
  if (0 || (flags & (AC_ELD | AC_SCALABLE))) {
459
242k
    pAacDecoderChannelInfo[0]->pDynData->RawDataInfo.CommonWindow = 1;
460
242k
    if (numberOfChannels == 2) {
461
125k
      pAacDecoderChannelInfo[1]->pDynData->RawDataInfo.CommonWindow =
462
125k
          pAacDecoderChannelInfo[0]->pDynData->RawDataInfo.CommonWindow;
463
125k
    }
464
242k
  }
465
466
  /* Iterate through sequence table */
467
596k
  i = 0;
468
596k
  ch = 0;
469
596k
  decision_bit = 0;
470
9.25M
  do {
471
9.25M
    switch (list->id[i]) {
472
27.0k
      case element_instance_tag:
473
27.0k
        pAacDecoderChannelInfo[0]->ElementInstanceTag = FDKreadBits(hBs, 4);
474
27.0k
        if (numberOfChannels == 2) {
475
6.18k
          pAacDecoderChannelInfo[1]->ElementInstanceTag =
476
6.18k
              pAacDecoderChannelInfo[0]->ElementInstanceTag;
477
6.18k
        }
478
27.0k
        break;
479
92.5k
      case common_window:
480
92.5k
        decision_bit =
481
92.5k
            pAacDecoderChannelInfo[ch]->pDynData->RawDataInfo.CommonWindow =
482
92.5k
                FDKreadBits(hBs, 1);
483
92.5k
        if (numberOfChannels == 2) {
484
92.5k
          pAacDecoderChannelInfo[1]->pDynData->RawDataInfo.CommonWindow =
485
92.5k
              pAacDecoderChannelInfo[0]->pDynData->RawDataInfo.CommonWindow;
486
92.5k
        }
487
92.5k
        break;
488
588k
      case ics_info:
489
        /* store last window sequence (utilized in complex stereo prediction)
490
         * before reading new channel-info */
491
588k
        if (cplxPred) {
492
74.3k
          if (pAacDecoderChannelInfo[0]->pDynData->RawDataInfo.CommonWindow) {
493
55.1k
            pAacDecoderStaticChannelInfo[0]
494
55.1k
                ->pCpeStaticData->jointStereoPersistentData.winSeqPrev =
495
55.1k
                pAacDecoderChannelInfo[0]->icsInfo.WindowSequence;
496
55.1k
            pAacDecoderStaticChannelInfo[0]
497
55.1k
                ->pCpeStaticData->jointStereoPersistentData.winShapePrev =
498
55.1k
                pAacDecoderChannelInfo[0]->icsInfo.WindowShape;
499
55.1k
          }
500
74.3k
        }
501
        /* Read individual channel info */
502
588k
        error = IcsRead(hBs, &pAacDecoderChannelInfo[ch]->icsInfo,
503
588k
                        pSamplingRateInfo, flags);
504
505
588k
        if (elFlags & AC_EL_LFE &&
506
0
            GetWindowSequence(&pAacDecoderChannelInfo[ch]->icsInfo) !=
507
0
                BLOCK_LONG) {
508
0
          error = AAC_DEC_PARSE_ERROR;
509
0
          break;
510
0
        }
511
512
588k
        if (numberOfChannels == 2 &&
513
258k
            pAacDecoderChannelInfo[0]->pDynData->RawDataInfo.CommonWindow) {
514
190k
          pAacDecoderChannelInfo[1]->icsInfo =
515
190k
              pAacDecoderChannelInfo[0]->icsInfo;
516
190k
        }
517
588k
        break;
518
519
62.0k
      case common_max_sfb:
520
62.0k
        if (FDKreadBit(hBs) == 0) {
521
25.2k
          error = IcsReadMaxSfb(hBs, &pAacDecoderChannelInfo[1]->icsInfo,
522
25.2k
                                pSamplingRateInfo);
523
25.2k
        }
524
62.0k
        break;
525
526
80.8k
      case ltp_data_present:
527
80.8k
        if (FDKreadBits(hBs, 1) != 0) {
528
55
          error = AAC_DEC_UNSUPPORTED_PREDICTION;
529
55
        }
530
80.8k
        break;
531
532
189k
      case ms:
533
534
189k
        INT max_sfb_ste;
535
189k
        INT max_sfb_ste_clear;
536
537
189k
        max_sfb_ste = GetScaleMaxFactorBandsTransmitted(
538
189k
            &pAacDecoderChannelInfo[0]->icsInfo,
539
189k
            &pAacDecoderChannelInfo[1]->icsInfo);
540
541
189k
        max_sfb_ste_clear = 64;
542
543
189k
        pAacDecoderChannelInfo[0]->icsInfo.max_sfb_ste = (UCHAR)max_sfb_ste;
544
189k
        pAacDecoderChannelInfo[1]->icsInfo.max_sfb_ste = (UCHAR)max_sfb_ste;
545
546
189k
        if (flags & (AC_USAC | AC_RSV603DA) &&
547
62.0k
            pAacDecoderChannelInfo[ch]->pDynData->RawDataInfo.CommonWindow ==
548
62.0k
                0) {
549
0
          Clean_Complex_Prediction_coefficients(
550
0
              &pAacDecoderStaticChannelInfo[0]
551
0
                   ->pCpeStaticData->jointStereoPersistentData,
552
0
              GetWindowGroups(&pAacDecoderChannelInfo[0]->icsInfo), 0, 64);
553
0
        }
554
555
189k
        if (CJointStereo_Read(
556
189k
                hBs, &pAacDecoderChannelInfo[0]->pComData->jointStereoData,
557
189k
                GetWindowGroups(&pAacDecoderChannelInfo[0]->icsInfo),
558
189k
                max_sfb_ste, max_sfb_ste_clear,
559
                /* jointStereoPersistentData and cplxPredictionData are only
560
                   available/allocated if cplxPred is active. */
561
189k
                ((cplxPred == 0) || (pAacDecoderStaticChannelInfo == NULL))
562
189k
                    ? NULL
563
189k
                    : &pAacDecoderStaticChannelInfo[0]
564
55.1k
                           ->pCpeStaticData->jointStereoPersistentData,
565
189k
                ((cplxPred == 0) || (pAacDecoderChannelInfo[0] == NULL))
566
189k
                    ? NULL
567
189k
                    : pAacDecoderChannelInfo[0]
568
55.1k
                          ->pComStaticData->cplxPredictionData,
569
189k
                cplxPred,
570
189k
                GetScaleFactorBandsTotal(&pAacDecoderChannelInfo[0]->icsInfo),
571
189k
                GetWindowSequence(&pAacDecoderChannelInfo[0]->icsInfo),
572
189k
                flags)) {
573
5
          error = AAC_DEC_PARSE_ERROR;
574
5
        }
575
576
189k
        break;
577
578
777k
      case global_gain:
579
777k
        pAacDecoderChannelInfo[ch]->pDynData->RawDataInfo.GlobalGain =
580
777k
            (UCHAR)FDKreadBits(hBs, 8);
581
777k
        break;
582
583
401k
      case section_data:
584
401k
        error = CBlock_ReadSectionData(hBs, pAacDecoderChannelInfo[ch],
585
401k
                                       pSamplingRateInfo, flags);
586
401k
        break;
587
588
376k
      case scale_factor_data_usac:
589
376k
        pAacDecoderChannelInfo[ch]->currAliasingSymmetry = 0;
590
        /* Set active sfb codebook indexes to HCB_ESC to make them "active" */
591
376k
        CChannel_CodebookTableInit(
592
376k
            pAacDecoderChannelInfo[ch]); /*  equals ReadSectionData(self,
593
                                            bs) in float soft. block.c
594
                                            line: ~599 */
595
        /* Note: The missing "break" is intentional here, since we need to call
596
         * CBlock_ReadScaleFactorData(). */
597
376k
        FDK_FALLTHROUGH;
598
599
776k
      case scale_factor_data:
600
776k
        if (flags & AC_ER_RVLC) {
601
          /* read RVLC data from bitstream (error sens. cat. 1) */
602
165k
          CRvlc_Read(pAacDecoderChannelInfo[ch], hBs);
603
611k
        } else {
604
611k
          error = CBlock_ReadScaleFactorData(pAacDecoderChannelInfo[ch], hBs,
605
611k
                                             flags);
606
611k
        }
607
776k
        break;
608
609
32.9k
      case pulse:
610
32.9k
        if (CPulseData_Read(
611
32.9k
                hBs,
612
32.9k
                &pAacDecoderChannelInfo[ch]->pDynData->specificTo.aac.PulseData,
613
32.9k
                pSamplingRateInfo->ScaleFactorBands_Long, /* pulse data is only
614
                                                             allowed to be
615
                                                             present in long
616
                                                             blocks! */
617
32.9k
                (void *)&pAacDecoderChannelInfo[ch]->icsInfo,
618
32.9k
                frame_length) != 0) {
619
38
          error = AAC_DEC_DECODE_FRAME_ERROR;
620
38
        }
621
32.9k
        break;
622
605k
      case tns_data_present:
623
605k
        CTns_ReadDataPresentFlag(
624
605k
            hBs, &pAacDecoderChannelInfo[ch]->pDynData->TnsData);
625
605k
        if (elFlags & AC_EL_LFE &&
626
0
            pAacDecoderChannelInfo[ch]->pDynData->TnsData.DataPresent) {
627
0
          error = AAC_DEC_PARSE_ERROR;
628
0
        }
629
605k
        break;
630
776k
      case tns_data:
631
        /* tns_data_present is checked inside CTns_Read(). */
632
776k
        error = CTns_Read(hBs, &pAacDecoderChannelInfo[ch]->pDynData->TnsData,
633
776k
                          &pAacDecoderChannelInfo[ch]->icsInfo, flags);
634
635
776k
        break;
636
637
1.04k
      case gain_control_data:
638
1.04k
        break;
639
640
32.9k
      case gain_control_data_present:
641
32.9k
        if (FDKreadBits(hBs, 1)) {
642
21
          error = AAC_DEC_UNSUPPORTED_GAIN_CONTROL_DATA;
643
21
        }
644
32.9k
        break;
645
646
314k
      case tw_data:
647
314k
        break;
648
86.3k
      case common_tw:
649
86.3k
        break;
650
86.3k
      case tns_data_present_usac:
651
86.3k
        if (pAacDecoderChannelInfo[0]->pDynData->specificTo.usac.tns_active) {
652
47.3k
          CTns_ReadDataPresentUsac(
653
47.3k
              hBs, &pAacDecoderChannelInfo[0]->pDynData->TnsData,
654
47.3k
              &pAacDecoderChannelInfo[1]->pDynData->TnsData,
655
47.3k
              &pAacDecoderChannelInfo[0]->pDynData->specificTo.usac.tns_on_lr,
656
47.3k
              &pAacDecoderChannelInfo[0]->icsInfo, flags, elFlags,
657
47.3k
              pAacDecoderChannelInfo[0]->pDynData->RawDataInfo.CommonWindow);
658
47.3k
        } else {
659
39.0k
          pAacDecoderChannelInfo[0]->pDynData->specificTo.usac.tns_on_lr =
660
39.0k
              (UCHAR)1;
661
39.0k
        }
662
86.3k
        break;
663
430k
      case core_mode:
664
430k
        decision_bit = FDKreadBits(hBs, 1);
665
430k
        pAacDecoderChannelInfo[ch]->data.usac.core_mode = decision_bit;
666
430k
        if ((ch == 1) && (pAacDecoderChannelInfo[0]->data.usac.core_mode !=
667
103k
                          pAacDecoderChannelInfo[1]->data.usac.core_mode)) {
668
          /* StereoCoreToolInfo(core_mode[ch] ) */
669
11.9k
          pAacDecoderChannelInfo[0]->pDynData->RawDataInfo.CommonWindow = 0;
670
11.9k
          pAacDecoderChannelInfo[1]->pDynData->RawDataInfo.CommonWindow = 0;
671
11.9k
        }
672
430k
        break;
673
86.3k
      case tns_active:
674
86.3k
        pAacDecoderChannelInfo[0]->pDynData->specificTo.usac.tns_active =
675
86.3k
            FDKreadBit(hBs);
676
86.3k
        break;
677
376k
      case noise:
678
376k
        if (elFlags & AC_EL_USAC_NOISE) {
679
13.6k
          pAacDecoderChannelInfo[ch]
680
13.6k
              ->pDynData->specificTo.usac.fd_noise_level_and_offset =
681
13.6k
              FDKreadBits(hBs, 3 + 5); /* Noise level */
682
13.6k
        }
683
376k
        break;
684
53.0k
      case lpd_channel_stream:
685
686
53.0k
      {
687
53.0k
        error = CLpdChannelStream_Read(/* = lpd_channel_stream() */
688
53.0k
                                       hBs, pAacDecoderChannelInfo[ch],
689
53.0k
                                       pAacDecoderStaticChannelInfo[ch],
690
53.0k
                                       pSamplingRateInfo, flags);
691
53.0k
      }
692
693
53.0k
        pAacDecoderChannelInfo[ch]->renderMode = AACDEC_RENDER_LPD;
694
53.0k
        break;
695
374k
      case fac_data: {
696
374k
        int fFacDatPresent = FDKreadBit(hBs);
697
698
        /* Wee need a valid fac_data[0] even if no FAC data is present (as
699
         * temporal buffer) */
700
374k
        pAacDecoderChannelInfo[ch]->data.usac.fac_data[0] =
701
374k
            pAacDecoderChannelInfo[ch]->data.usac.fac_data0;
702
703
374k
        if (fFacDatPresent) {
704
45.2k
          if (elFlags & AC_EL_LFE) {
705
0
            error = AAC_DEC_PARSE_ERROR;
706
0
            break;
707
0
          }
708
          /* FAC data present, this frame is FD, so the last mode had to be
709
           * ACELP. */
710
45.2k
          if (pAacDecoderStaticChannelInfo[ch]->last_core_mode != LPD ||
711
36.0k
              pAacDecoderStaticChannelInfo[ch]->last_lpd_mode != 0) {
712
36.0k
            pAacDecoderChannelInfo[ch]->data.usac.core_mode_last = LPD;
713
36.0k
            pAacDecoderChannelInfo[ch]->data.usac.lpd_mode_last = 0;
714
            /* We can't change the past! So look to the future and go ahead! */
715
36.0k
          }
716
45.2k
          CLpd_FAC_Read(hBs, pAacDecoderChannelInfo[ch]->data.usac.fac_data[0],
717
45.2k
                        pAacDecoderChannelInfo[ch]->data.usac.fac_data_e,
718
45.2k
                        CLpd_FAC_getLength(
719
45.2k
                            IsLongBlock(&pAacDecoderChannelInfo[ch]->icsInfo),
720
45.2k
                            pAacDecoderChannelInfo[ch]->granuleLength),
721
45.2k
                        1, 0);
722
329k
        } else {
723
329k
          if (pAacDecoderStaticChannelInfo[ch]->last_core_mode == LPD &&
724
19.4k
              pAacDecoderStaticChannelInfo[ch]->last_lpd_mode == 0) {
725
            /* ACELP to FD transitons without FAC are possible. That is why we
726
            zero it out (i.e FAC will not be considered in the subsequent
727
            calculations */
728
14.0k
            FDKmemclear(pAacDecoderChannelInfo[ch]->data.usac.fac_data0,
729
14.0k
                        LFAC * sizeof(FIXP_DBL));
730
14.0k
          }
731
329k
        }
732
374k
      } break;
733
374k
      case esc2_rvlc:
734
364k
        if (flags & AC_ER_RVLC) {
735
165k
          CRvlc_Decode(pAacDecoderChannelInfo[ch],
736
165k
                       pAacDecoderStaticChannelInfo[ch], hBs);
737
165k
        }
738
364k
        break;
739
740
371k
      case esc1_hcr:
741
371k
        if (flags & AC_ER_HCR) {
742
11.5k
          CHcr_Read(hBs, pAacDecoderChannelInfo[ch],
743
11.5k
                    numberOfChannels == 2 ? ID_CPE : ID_SCE);
744
11.5k
        }
745
371k
        break;
746
747
400k
      case spectral_data:
748
400k
        error = CBlock_ReadSpectralData(hBs, pAacDecoderChannelInfo[ch],
749
400k
                                        pSamplingRateInfo, flags);
750
400k
        if (flags & AC_ELD) {
751
287k
          pAacDecoderChannelInfo[ch]->renderMode = AACDEC_RENDER_ELDFB;
752
287k
        } else {
753
113k
          if (flags & AC_HDAAC) {
754
0
            pAacDecoderChannelInfo[ch]->renderMode = AACDEC_RENDER_INTIMDCT;
755
113k
          } else {
756
113k
            pAacDecoderChannelInfo[ch]->renderMode = AACDEC_RENDER_IMDCT;
757
113k
          }
758
113k
        }
759
400k
        break;
760
761
376k
      case ac_spectral_data:
762
376k
        error = CBlock_ReadAcSpectralData(
763
376k
            hBs, pAacDecoderChannelInfo[ch], pAacDecoderStaticChannelInfo[ch],
764
376k
            pSamplingRateInfo, frame_length, flags);
765
376k
        pAacDecoderChannelInfo[ch]->renderMode = AACDEC_RENDER_IMDCT;
766
376k
        break;
767
768
972
      case coupled_elements: {
769
972
        int num_coupled_elements, c;
770
771
972
        ind_sw_cce_flag = FDKreadBit(hBs);
772
972
        num_coupled_elements = FDKreadBits(hBs, 3);
773
774
5.14k
        for (c = 0; c < (num_coupled_elements + 1); c++) {
775
4.17k
          int cc_target_is_cpe;
776
777
4.17k
          num_gain_element_lists++;
778
4.17k
          cc_target_is_cpe = FDKreadBit(hBs); /* cc_target_is_cpe[c] */
779
4.17k
          FDKreadBits(hBs, 4);                /* cc_target_tag_select[c] */
780
781
4.17k
          if (cc_target_is_cpe) {
782
1.31k
            int cc_l, cc_r;
783
784
1.31k
            cc_l = FDKreadBit(hBs); /* cc_l[c] */
785
1.31k
            cc_r = FDKreadBit(hBs); /* cc_r[c] */
786
787
1.31k
            if (cc_l && cc_r) {
788
651
              num_gain_element_lists++;
789
651
            }
790
1.31k
          }
791
4.17k
        }
792
972
        FDKreadBit(hBs);     /* cc_domain */
793
972
        FDKreadBit(hBs);     /* gain_element_sign  */
794
972
        FDKreadBits(hBs, 2); /* gain_element_scale */
795
972
      } break;
796
797
957
      case gain_element_lists: {
798
957
        const CodeBookDescription *hcb;
799
957
        UCHAR *pCodeBook;
800
957
        int c;
801
802
957
        hcb = &AACcodeBookDescriptionTable[BOOKSCL];
803
957
        pCodeBook = pAacDecoderChannelInfo[ch]->pDynData->aCodeBook;
804
805
4.77k
        for (c = 1; c < num_gain_element_lists; c++) {
806
3.81k
          int cge;
807
3.81k
          if (ind_sw_cce_flag) {
808
1.52k
            cge = 1;
809
2.29k
          } else {
810
2.29k
            cge = FDKreadBits(hBs, 1); /* common_gain_element_present[c] */
811
2.29k
          }
812
3.81k
          if (cge) {
813
            /* Huffman */
814
1.90k
            CBlock_DecodeHuffmanWord(
815
1.90k
                hBs, hcb); /* hcod_sf[common_gain_element[c]] 1..19 */
816
1.91k
          } else {
817
1.91k
            int g, sfb;
818
1.91k
            for (g = 0;
819
6.41k
                 g < GetWindowGroups(&pAacDecoderChannelInfo[ch]->icsInfo);
820
4.50k
                 g++) {
821
11.7k
              for (sfb = 0; sfb < GetScaleFactorBandsTransmitted(
822
11.7k
                                      &pAacDecoderChannelInfo[ch]->icsInfo);
823
7.20k
                   sfb++) {
824
7.20k
                if (pCodeBook[sfb] != ZERO_HCB) {
825
                  /* Huffman */
826
6.16k
                  CBlock_DecodeHuffmanWord(
827
6.16k
                      hBs,
828
6.16k
                      hcb); /* hcod_sf[dpcm_gain_element[c][g][sfb]] 1..19 */
829
6.16k
                }
830
7.20k
              }
831
4.50k
            }
832
1.91k
          }
833
3.81k
        }
834
957
      } break;
835
836
        /* CRC handling */
837
24.7k
      case adtscrc_start_reg1:
838
24.7k
        if (pTpDec != NULL) {
839
24.7k
          crcReg1 = transportDec_CrcStartReg(pTpDec, 192);
840
24.7k
        }
841
24.7k
        break;
842
4.87k
      case adtscrc_start_reg2:
843
4.87k
        if (pTpDec != NULL) {
844
4.87k
          crcReg2 = transportDec_CrcStartReg(pTpDec, 128);
845
4.87k
        }
846
4.87k
        break;
847
24.2k
      case adtscrc_end_reg1:
848
24.2k
      case drmcrc_end_reg:
849
24.2k
        if (pTpDec != NULL) {
850
24.2k
          transportDec_CrcEndReg(pTpDec, crcReg1);
851
24.2k
          crcReg1 = -1;
852
24.2k
        }
853
24.2k
        break;
854
4.86k
      case adtscrc_end_reg2:
855
4.86k
        if (crcReg1 != -1) {
856
0
          error = AAC_DEC_DECODE_FRAME_ERROR;
857
4.86k
        } else if (pTpDec != NULL) {
858
4.86k
          transportDec_CrcEndReg(pTpDec, crcReg2);
859
4.86k
          crcReg2 = -1;
860
4.86k
        }
861
4.86k
        break;
862
0
      case drmcrc_start_reg:
863
0
        if (pTpDec != NULL) {
864
0
          crcReg1 = transportDec_CrcStartReg(pTpDec, 0);
865
0
        }
866
0
        break;
867
868
        /* Non data cases */
869
815k
      case next_channel:
870
815k
        ch = (ch + 1) % numberOfChannels;
871
815k
        break;
872
608k
      case link_sequence:
873
608k
        list = list->next[decision_bit];
874
608k
        i = -1;
875
608k
        break;
876
877
0
      default:
878
0
        error = AAC_DEC_UNSUPPORTED_FORMAT;
879
0
        break;
880
9.25M
    }
881
882
9.25M
    if (error != AAC_DEC_OK) {
883
3.38k
      goto bail;
884
3.38k
    }
885
886
9.24M
    i++;
887
888
9.24M
  } while (list->id[i] != end_of_sequence);
889
890
1.42M
  for (ch = 0; ch < numberOfChannels; ch++) {
891
826k
    if (pAacDecoderChannelInfo[ch]->renderMode == AACDEC_RENDER_IMDCT ||
892
774k
        pAacDecoderChannelInfo[ch]->renderMode == AACDEC_RENDER_ELDFB) {
893
      /* Shows which bands are empty. */
894
774k
      UCHAR *band_is_noise =
895
774k
          pAacDecoderChannelInfo[ch]->pDynData->band_is_noise;
896
774k
      FDKmemset(band_is_noise, (UCHAR)1, sizeof(UCHAR) * (8 * 16));
897
898
774k
      error = CBlock_InverseQuantizeSpectralData(
899
774k
          pAacDecoderChannelInfo[ch], pSamplingRateInfo, band_is_noise, 1);
900
774k
      if (error != AAC_DEC_OK) {
901
24
        return error;
902
24
      }
903
904
774k
      if (elFlags & AC_EL_USAC_NOISE) {
905
13.3k
        CBlock_ApplyNoise(pAacDecoderChannelInfo[ch], pSamplingRateInfo,
906
13.3k
                          &pAacDecoderStaticChannelInfo[ch]->nfRandomSeed,
907
13.3k
                          band_is_noise);
908
909
13.3k
      } /* if (elFlags & AC_EL_USAC_NOISE) */
910
774k
    }
911
826k
  }
912
913
596k
bail:
914
596k
  if (crcReg1 != -1 || crcReg2 != -1) {
915
0
    if (error == AAC_DEC_OK) {
916
0
      error = AAC_DEC_DECODE_FRAME_ERROR;
917
0
    }
918
0
    if (crcReg1 != -1) {
919
0
      transportDec_CrcEndReg(pTpDec, crcReg1);
920
0
    }
921
0
    if (crcReg2 != -1) {
922
0
      transportDec_CrcEndReg(pTpDec, crcReg2);
923
0
    }
924
0
  }
925
596k
  return error;
926
593k
}