1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------
2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License.
6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at
7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software
11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied.
14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions
15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License.
16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * -------------------------------------------------------------------
17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */
18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*
19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Filename: sbr_dec.c
21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY
24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who:                                   Date: MM/DD/YYYY
27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:
28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS
31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION
36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    sbr decoder core function
38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS
41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES
45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
46dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberSC 29 Software Copyright Licencing Disclaimer:
47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
48dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberThis software module was originally developed by
49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber  Coding Technologies
50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberand edited by
52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber  -
53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberin the course of development of the ISO/IEC 13818-7 and ISO/IEC 14496-3
55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberstandards for reference purposes and its performance may not have been
56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberoptimized. This software module is an implementation of one or more tools as
57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberspecified by the ISO/IEC 13818-7 and ISO/IEC 14496-3 standards.
58dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberISO/IEC gives users free license to this software module or modifications
59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberthereof for use in products claiming conformance to audiovisual and
60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberimage-coding related ITU Recommendations and/or ISO/IEC International
61dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberStandards. ISO/IEC gives users the same free license to this software module or
62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubermodifications thereof for research purposes and further ISO/IEC standardisation.
63dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberThose intending to use this software module in products are advised that its
64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberuse may infringe existing patents. ISO/IEC have no liability for use of this
65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubersoftware module or modifications thereof. Copyright is not released for
66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberproducts that do not conform to audiovisual and image-coding related ITU
67dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberRecommendations and/or ISO/IEC International Standards.
68dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberThe original developer retains full right to modify and use the code for its
69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberown purpose, assign or donate the code to a third party and to inhibit third
70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberparties from using the code for products that do not conform to audiovisual and
71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberimage-coding related ITU Recommendations and/or ISO/IEC International Standards.
72dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberThis copyright notice must be included in all copies or derivative works.
73dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberCopyright (c) ISO/IEC 2002.
74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE
77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/
80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES
84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef AAC_PLUS
86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "s_sbr_frame_data.h"
89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "calc_sbr_synfilterbank.h"
90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "calc_sbr_anafilterbank.h"
91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "calc_sbr_envelope.h"
92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "sbr_generate_high_freq.h"
93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "sbr_dec.h"
94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "decode_noise_floorlevels.h"
95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "aac_mem_funcs.h"
96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include    "fxp_mul32.h"
97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS
100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here
101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES
106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional
107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also.
108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS
112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration
113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS
116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module
117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES
122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module
123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h"
125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef PARAMETRICSTEREO
127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include   "ps_applied.h"
129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include   "ps_init_stereo_mixing.h"
130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere
136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*----------------------------------------------------------------------------
139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; FUNCTION CODE
140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/
141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid sbr_dec(Int16 *inPcmData,
143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             Int16 *ftimeOutPtr,
144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             SBR_FRAME_DATA * hFrameData,
145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             int32_t applyProcessing,
146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             SBR_DEC *sbrDec,
147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef PARAMETRICSTEREO
149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             Int16 * ftimeOutPtrPS,
150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             HANDLE_PS_DEC hParametricStereoDec,
151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             tDec_Int_File  *pVars)
154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{
155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t   i;
156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t   j;
157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t   m;
158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t  *frameInfo = hFrameData->frameInfo;
160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    Int  num_qmf_bands;
161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef PARAMETRICSTEREO
164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t env;
166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t *qmf_PS_generated_Real;
168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t *qmf_PS_generated_Imag;
169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t *Sr_x;
171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t *Si_x;
172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t(*scratch_mem)[64];
178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    Int16 *circular_buffer_s;
179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t   k;
181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t *Sr;
182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t *Si;
183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t *ptr_tmp1;
184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    int32_t *ptr_tmp2;
185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    scratch_mem = pVars->scratch.scratch_mem;
186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (applyProcessing)
189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        num_qmf_bands = sbrDec->lowSubband;
191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    else
193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        num_qmf_bands = 32;     /* becomes a resampler by 2  */
195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* -------------------------------------------------- */
198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *    Re-Load Buffers
200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    pv_memmove(&hFrameData->sbrQmfBufferReal[0],
202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber               &hFrameData->HistsbrQmfBufferReal[0],
203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber               6*SBR_NUM_BANDS*sizeof(*hFrameData->sbrQmfBufferReal));
204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (sbrDec->LC_aacP_DecoderFlag == OFF)
208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memmove(&hFrameData->sbrQmfBufferImag[0],
210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                   &hFrameData->HistsbrQmfBufferImag[0],
211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                   6*SBR_NUM_BANDS*sizeof(*hFrameData->sbrQmfBufferImag));
212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /* -------------------------------------------------- */
215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *    low band codec signal subband filtering
219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    for (i = 0; i < 32; i++)
222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (sbrDec->LC_aacP_DecoderFlag == ON)
225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            calc_sbr_anafilterbank_LC(hFrameData->codecQmfBufferReal[sbrDec->bufWriteOffs + i],
228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                      &inPcmData[319] + (i << 5),
229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                      scratch_mem,
230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                      num_qmf_bands);
231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        else
235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            calc_sbr_anafilterbank(hFrameData->codecQmfBufferReal[sbrDec->bufWriteOffs + i],
238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->codecQmfBufferImag[sbrDec->bufWriteOffs + i],
239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   &inPcmData[319] + (i << 5),
240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   scratch_mem,
241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   num_qmf_bands);
242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (pVars->ltp_buffer_state)
248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memcpy(&inPcmData[-1024-288], &inPcmData[1024], 288*sizeof(*inPcmData));
250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    else
252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memcpy(&inPcmData[1024 + 288], &inPcmData[1024], 288*sizeof(*inPcmData));
254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (applyProcessing)
258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  Inverse filtering of lowband + HF generation
262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (sbrDec->LC_aacP_DecoderFlag == ON)
265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            sbr_generate_high_freq((int32_t(*)[32])(hFrameData->codecQmfBufferReal + sbrDec->bufReadOffs),
268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   NULL,
269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   (int32_t *)(hFrameData->sbrQmfBufferReal),
270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   NULL,
271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->sbr_invf_mode,
272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->sbr_invf_mode_prev,
273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   &(sbrDec->FreqBandTableNoise[1]),
274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->NoNoiseBands,
275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->lowSubband,
276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->V_k_master,
277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->Num_Master,
278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->outSampleRate,
279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   frameInfo,
280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->degreeAlias,
281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   scratch_mem,
282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->BwVector,/* */
283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->BwVectorOld,
284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   &(sbrDec->Patch),
285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->LC_aacP_DecoderFlag,
286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   &(sbrDec->highSubband));
287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
288dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
289dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            /*
290dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             *      Adjust envelope of current frame.
291dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             */
292dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
293dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            calc_sbr_envelope(hFrameData,
294dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              (int32_t *)(hFrameData->sbrQmfBufferReal),
295dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              NULL,
296dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->FreqBandTable,
297dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->NSfb,
298dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->FreqBandTableNoise,
299dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->NoNoiseBands,
300dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->reset_flag,
301dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->degreeAlias,
302dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              &(hFrameData->harm_index),
303dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              &(hFrameData->phase_index),
304dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->hFp,
305dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              &(hFrameData->sUp),
306dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->limSbc,
307dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->gateMode,
308dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
309dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              NULL,
310dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              NULL,
311dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              NULL,
312dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              NULL,
313dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
314dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              scratch_mem,
315dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->Patch,
316dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->sqrt_cache,
317dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->LC_aacP_DecoderFlag);
318dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
319dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
320dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        else
321dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
322dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
323dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            sbr_generate_high_freq((int32_t(*)[32])(hFrameData->codecQmfBufferReal + sbrDec->bufReadOffs),
324dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   (int32_t(*)[32])(hFrameData->codecQmfBufferImag + sbrDec->bufReadOffs),
325dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   (int32_t *)(hFrameData->sbrQmfBufferReal),
326dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   (int32_t *)(hFrameData->sbrQmfBufferImag),
327dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->sbr_invf_mode,
328dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->sbr_invf_mode_prev,
329dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   &(sbrDec->FreqBandTableNoise[1]),
330dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->NoNoiseBands,
331dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->lowSubband,
332dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->V_k_master,
333dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->Num_Master,
334dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->outSampleRate,
335dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   frameInfo,
336dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   NULL,
337dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   scratch_mem,
338dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->BwVector,
339dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   hFrameData->BwVectorOld,
340dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   &(sbrDec->Patch),
341dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   sbrDec->LC_aacP_DecoderFlag,
342dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                   &(sbrDec->highSubband));
343dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
344dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            /*
345dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             *      Adjust envelope of current frame.
346dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber             */
347dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
348dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            calc_sbr_envelope(hFrameData,
349dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              (int32_t *)(hFrameData->sbrQmfBufferReal),
350dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              (int32_t *)(hFrameData->sbrQmfBufferImag),
351dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->FreqBandTable,
352dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->NSfb,
353dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->FreqBandTableNoise,
354dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->NoNoiseBands,
355dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->reset_flag,
356dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              NULL,
357dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              &(hFrameData->harm_index),
358dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              &(hFrameData->phase_index),
359dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->hFp,
360dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              &(hFrameData->sUp),
361dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->limSbc,
362dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->gateMode,
363dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->fBuf_man,
364dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->fBuf_exp,
365dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->fBufN_man,
366dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              hFrameData->fBufN_exp,
367dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              scratch_mem,
368dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->Patch,
369dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->sqrt_cache,
370dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                              sbrDec->LC_aacP_DecoderFlag);
371dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
372dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
373dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
374dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
375dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
376dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
377dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    else   /*  else for applyProcessing */
378dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
379dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /* no sbr, set high band buffers to zero */
380dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
381dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0; i < SBR_NUM_COLUMNS; i++)
382dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
383dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memset((void *)&hFrameData->sbrQmfBufferReal[i*SBR_NUM_BANDS],
384dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      0,
385dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      SBR_NUM_BANDS*sizeof(*hFrameData->sbrQmfBufferReal));
386dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
387dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
388dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memset((void *)&hFrameData->sbrQmfBufferImag[i*SBR_NUM_BANDS],
389dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      0,
390dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      SBR_NUM_BANDS*sizeof(*hFrameData->sbrQmfBufferImag));
391dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
392dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
393dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
394dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
395dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
396dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
397dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
398dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
399dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     *  Synthesis subband filtering.
400dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
401dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
402dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
403dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
404dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef PARAMETRICSTEREO
405dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
406dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
407dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    /*
408dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * psPresentFlag set implies hParametricStereoDec !=NULL, second condition is
409dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     * is just here to prevent CodeSonar warnings.
410dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber     */
411dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if ((pVars->mc_info.psPresentFlag) && (applyProcessing) &&
412dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            (hParametricStereoDec != NULL))
413dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
414dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
415dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
416dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  qmfBufferReal uses the rigth aac channel ( perChan[1] is not used)
417dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  followed by the buffer fxpCoef[2][2048]  which makes a total of
418dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  2349 + 2048*2 = 6445
419dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  These  2 matrices (qmfBufferReal & qmfBufferImag) are
420dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  [2][38][64] == 4864 int32_t
421dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
422dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
423dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
424dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tDec_Int_Chan *tmpx = &pVars->perChan[1];
425dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
426dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  dereferencing type-punned pointer avoid
427dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  breaking strict-aliasing rules
428dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
429dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        int32_t *tmp = (int32_t *)tmpx;
430dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        hParametricStereoDec->qmfBufferReal = (int32_t(*)[64]) tmp;
431dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
432dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        tmp = (int32_t *) & hParametricStereoDec->qmfBufferReal[38][0];
433dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        hParametricStereoDec->qmfBufferImag = (int32_t(*)[64]) tmp;
434dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
435dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0; i < 32; i++)
436dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
437dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            Int   xoverBand;
438dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
439dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            if (i < ((hFrameData->frameInfo[1]) << 1))
440dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
441dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                xoverBand = sbrDec->prevLowSubband;
442dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
443dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            else
444dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
445dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                xoverBand = sbrDec->lowSubband;
446dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
447dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
448dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            if (xoverBand > sbrDec->highSubband)
449dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
450dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                xoverBand = 32; /* error condition, default to upsampling mode */
451dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
452dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
453dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            m = sbrDec->bufReadOffs + i;    /*  2 + i */
454dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
455dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            Sr_x = hParametricStereoDec->qmfBufferReal[i];
456dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            Si_x = hParametricStereoDec->qmfBufferImag[i];
457dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
458dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
459dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
460dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            for (int32_t j = 0; j < xoverBand; j++)
461dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
462dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                Sr_x[j] = shft_lft_1(hFrameData->codecQmfBufferReal[m][j]);
463dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                Si_x[j] = shft_lft_1(hFrameData->codecQmfBufferImag[m][j]);
464dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
465dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
466dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
467dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
468dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
469dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memcpy(&Sr_x[xoverBand],
470dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      &hFrameData->sbrQmfBufferReal[i*SBR_NUM_BANDS],
471dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      (sbrDec->highSubband - xoverBand)*sizeof(*Sr_x));
472dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
473dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memcpy(&Si_x[xoverBand],
474dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      &hFrameData->sbrQmfBufferImag[i*SBR_NUM_BANDS],
475dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      (sbrDec->highSubband - xoverBand)*sizeof(*Si_x));
476dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
477dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memset((void *)&Sr_x[sbrDec->highSubband],
478dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      0,
479dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      (64 - sbrDec->highSubband)*sizeof(*Sr_x));
480dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
481dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memset((void *)&Si_x[sbrDec->highSubband],
482dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      0,
483dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                      (64 - sbrDec->highSubband)*sizeof(*Si_x));
484dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
485dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
486dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
487dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
488dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 32; i < 32 + 6; i++)
489dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
490dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            m = sbrDec->bufReadOffs + i;     /*  2 + i */
491dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
492dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            for (int32_t j = 0; j < 5; j++)
493dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
494dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                hParametricStereoDec->qmfBufferReal[i][j] = shft_lft_1(hFrameData->codecQmfBufferReal[m][j]);
495dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                hParametricStereoDec->qmfBufferImag[i][j] = shft_lft_1(hFrameData->codecQmfBufferImag[m][j]);
496dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
497dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
498dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
499dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
500dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
501dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
502dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *    Update Buffers
503dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
504dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0; i < sbrDec->bufWriteOffs; i++)     /* sbrDec->bufWriteOffs set to 8 and unchanged */
505dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
506dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            j = sbrDec->noCols + i;                    /* sbrDec->noCols set to 32 and unchanged */
507dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
508dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hFrameData->codecQmfBufferReal[i],         /* to    */
509dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hFrameData->codecQmfBufferReal[j],        /* from  */
510dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       sizeof(*hFrameData->codecQmfBufferReal[i]) << 5);
511dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
512dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hFrameData->codecQmfBufferImag[i],
513dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hFrameData->codecQmfBufferImag[j],
514dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       sizeof(*hFrameData->codecQmfBufferImag[i]) << 5);
515dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
516dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
517dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
518dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memmove(&hFrameData->HistsbrQmfBufferReal[0],
519dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                   &hFrameData->sbrQmfBufferReal[32*SBR_NUM_BANDS],
520dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                   6*SBR_NUM_BANDS*sizeof(*hFrameData->sbrQmfBufferReal));
521dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
522dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memmove(&hFrameData->HistsbrQmfBufferImag[0],
523dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                   &hFrameData->sbrQmfBufferImag[32*SBR_NUM_BANDS],
524dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                   6*SBR_NUM_BANDS*sizeof(*hFrameData->sbrQmfBufferImag));
525dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
526dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
527dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
528dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *   Needs whole QMF matrix formed before applying
529dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *   Parametric stereo processing.
530dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
531dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
532dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        qmf_PS_generated_Real = scratch_mem[0];
533dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        qmf_PS_generated_Imag = scratch_mem[1];
534dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        env = 0;
535dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
536dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
537dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  Set circular buffer for Left channel
538dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
539dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
540dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        circular_buffer_s = (Int16 *)scratch_mem[7];
541dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
542dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
543dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (pVars->mc_info.bDownSampledSbr)
544dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
545dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&circular_buffer_s[2048],
546dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hFrameData->V,
547dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       640*sizeof(*circular_buffer_s));
548dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
549dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        else
550dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
551dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&circular_buffer_s[4096],
552dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hFrameData->V,
553dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       1152*sizeof(*circular_buffer_s));
554dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
555dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
556dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
557dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
558dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
559dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  Set Circular buffer for PS hybrid analysis
560dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
561dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0, j = 0; i < 3; i++)
562dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
563dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
564dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&scratch_mem[2][32 + j     ],
565dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hParametricStereoDec->hHybrid->mQmfBufferReal[i],
566dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       HYBRID_FILTER_LENGTH_m_1*sizeof(*hParametricStereoDec->hHybrid->mQmfBufferReal));
567dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&scratch_mem[2][32 + j + 44],
568dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hParametricStereoDec->hHybrid->mQmfBufferImag[i],
569dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       HYBRID_FILTER_LENGTH_m_1*sizeof(*hParametricStereoDec->hHybrid->mQmfBufferImag));
570dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            j += 88;
571dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
572dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
573dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memset((void *)&qmf_PS_generated_Real[hParametricStereoDec->usb],
574dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                  0,
575dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                  (64 - hParametricStereoDec->usb)*sizeof(*qmf_PS_generated_Real));
576dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
577dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memset((void *)&qmf_PS_generated_Imag[hParametricStereoDec->usb],
578dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                  0,
579dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                  (64 - hParametricStereoDec->usb)*sizeof(*qmf_PS_generated_Imag));
580dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
581dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
582dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0; i < 32; i++)
583dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
584dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            if (i == (Int)hParametricStereoDec-> aEnvStartStop[env])
585dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
586dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                ps_init_stereo_mixing(hParametricStereoDec, env, sbrDec->highSubband);
587dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                env++;
588dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
589dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
590dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
591dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            ps_applied(hParametricStereoDec,
592dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       &hParametricStereoDec->qmfBufferReal[i],
593dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       &hParametricStereoDec->qmfBufferImag[i],
594dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       qmf_PS_generated_Real,
595dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       qmf_PS_generated_Imag,
596dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       scratch_mem[2],
597dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       i);
598dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
599dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            /* Create time samples for regular mono channel */
600dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
601dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            if (pVars->mc_info.bDownSampledSbr)
602dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
603dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                calc_sbr_synfilterbank(hParametricStereoDec->qmfBufferReal[i],  /* realSamples  */
604dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       hParametricStereoDec->qmfBufferImag[i], /* imagSamples  */
605dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       ftimeOutPtr + (i << 6),
606dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       &circular_buffer_s[1984 - (i<<6)],
607dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       pVars->mc_info.bDownSampledSbr);
608dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
609dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            else
610dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
611dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                calc_sbr_synfilterbank(hParametricStereoDec->qmfBufferReal[i],  /* realSamples  */
612dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       hParametricStereoDec->qmfBufferImag[i], /* imagSamples  */
613dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       ftimeOutPtr + (i << 7),
614dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       &circular_buffer_s[3968 - (i<<7)],
615dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       pVars->mc_info.bDownSampledSbr);
616dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
617dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
618dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
619dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hParametricStereoDec->qmfBufferReal[i], qmf_PS_generated_Real, 64*sizeof(*qmf_PS_generated_Real));
620dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hParametricStereoDec->qmfBufferImag[i], qmf_PS_generated_Imag, 64*sizeof(*qmf_PS_generated_Real));
621dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
622dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
623dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
624dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
625dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
626dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  Save Circular buffer history used on PS hybrid analysis
627dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
628dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
629dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0, j = 0; i < 3; i++)
630dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
631dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hParametricStereoDec->hHybrid->mQmfBufferReal[i],
632dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       &scratch_mem[2][ 64 + j     ],
633dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       HYBRID_FILTER_LENGTH_m_1*sizeof(*hParametricStereoDec->hHybrid->mQmfBufferReal));
634dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
635dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hParametricStereoDec->hHybrid->mQmfBufferImag[i],
636dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       &scratch_mem[2][ 64 + j + 44],
637dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       HYBRID_FILTER_LENGTH_m_1*sizeof(*hParametricStereoDec->hHybrid->mQmfBufferImag));
638dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
639dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            j += 88;
640dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
641dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
642dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memmove(hFrameData->V, &circular_buffer_s[0], 1152*sizeof(*circular_buffer_s));
643dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
644dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
645dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  Set circular buffer for Right channel
646dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
647dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
648dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        circular_buffer_s = (Int16 *)scratch_mem[5];
649dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
650dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (pVars->mc_info.bDownSampledSbr)
651dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
652dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&circular_buffer_s[2048],
653dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       (int32_t *)hParametricStereoDec->R_ch_qmf_filter_history,
654dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       640*sizeof(*circular_buffer_s));
655dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
656dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        else
657dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
658dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&circular_buffer_s[4096],
659dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       (int32_t *)hParametricStereoDec->R_ch_qmf_filter_history,
660dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       1152*sizeof(*circular_buffer_s));
661dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
662dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
663dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
664dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
665dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0; i < 32; i++)
666dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
667dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            if (pVars->mc_info.bDownSampledSbr)
668dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
669dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
670dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                calc_sbr_synfilterbank(hParametricStereoDec->qmfBufferReal[i],  /* realSamples  */
671dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       hParametricStereoDec->qmfBufferImag[i], /* imagSamples  */
672dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       ftimeOutPtrPS + (i << 6),
673dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       &circular_buffer_s[1984 - (i<<6)],
674dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       pVars->mc_info.bDownSampledSbr);
675dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
676dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            else
677dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
678dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                calc_sbr_synfilterbank(hParametricStereoDec->qmfBufferReal[i],  /* realSamples  */
679dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       hParametricStereoDec->qmfBufferImag[i], /* imagSamples  */
680dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       ftimeOutPtrPS + (i << 7),
681dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       &circular_buffer_s[3968 - (i<<7)],
682dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                       pVars->mc_info.bDownSampledSbr);
683dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
684dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
685dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
686dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
687dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (pVars->mc_info.bDownSampledSbr)
688dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
689dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove((int32_t *)hParametricStereoDec->R_ch_qmf_filter_history, &circular_buffer_s[0], 640*sizeof(*circular_buffer_s));
690dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
691dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        else
692dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
693dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove((int32_t *)hParametricStereoDec->R_ch_qmf_filter_history, &circular_buffer_s[0], 1152*sizeof(*circular_buffer_s));
694dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
695dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
696dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
697dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
698dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
699dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
700dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
701dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    else    /*  else -- sbrEnablePS  */
702dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
703dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
704dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif      /*   PARAMETRICSTEREO */
705dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif      /*   HQ_SBR */
706dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
707dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
708dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *  Use shared aac memory as continuous buffer
709dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
710dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
711dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
712dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Sr  = scratch_mem[0];
713dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Si  = scratch_mem[1];
714dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
715dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        circular_buffer_s = (Int16*)scratch_mem[2];
716dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
717dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (pVars->mc_info.bDownSampledSbr)
718dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
719dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
720dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&circular_buffer_s[2048],
721dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hFrameData->V,
722dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       640*sizeof(*circular_buffer_s));
723dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
724dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        else
725dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
726dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&circular_buffer_s[4096],
727dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hFrameData->V,
728dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       1152*sizeof(*circular_buffer_s));
729dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
730dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
731dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0; i < 32; i++)
732dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
733dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            Int   xoverBand;
734dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
735dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            if (applyProcessing)
736dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
737dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                if (i < ((hFrameData->frameInfo[1]) << 1))
738dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
739dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    xoverBand = sbrDec->prevLowSubband;
740dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
741dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
742dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                else
743dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
744dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    xoverBand = sbrDec->lowSubband;
745dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
746dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
747dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                if (xoverBand > sbrDec->highSubband)
748dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
749dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    xoverBand = 32; /* error condition, default to upsampling mode */
750dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
751dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
752dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            else
753dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
754dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                xoverBand = 32;
755dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                sbrDec->highSubband = 32;
756dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
757dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
758dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
759dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            m = sbrDec->bufReadOffs + i;    /* sbrDec->bufReadOffs == 2 */
760dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
761dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
762dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            ptr_tmp1 = (hFrameData->codecQmfBufferReal[m]);
763dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            ptr_tmp2 = Sr;
764dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
765dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            if (sbrDec->LC_aacP_DecoderFlag == ON)
766dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
767dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
768dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                for (k = (xoverBand >> 1); k != 0; k--)
769dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
770dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = (*(ptr_tmp1++)) >> 9;
771dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = (*(ptr_tmp1++)) >> 9;
772dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
773dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                if (xoverBand & 1)
774dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
775dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = (*(ptr_tmp1)) >> 9;
776dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
777dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
778dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                ptr_tmp1 = &hFrameData->sbrQmfBufferReal[i*SBR_NUM_BANDS];
779dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
780dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
781dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                for (k = xoverBand; k < sbrDec->highSubband; k++)
782dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
783dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = (*(ptr_tmp1++)) << 1;
784dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
785dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
786dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pv_memset((void *)ptr_tmp2,
787dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                          0,
788dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                          (64 - sbrDec->highSubband)*sizeof(*ptr_tmp2));
789dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
790dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
791dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                if (pVars->mc_info.bDownSampledSbr)
792dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
793dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    calc_sbr_synfilterbank_LC(Sr,               /* realSamples  */
794dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                              ftimeOutPtr + (i << 6),
795dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                              &circular_buffer_s[1984 - (i<<6)],
796dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                              pVars->mc_info.bDownSampledSbr);
797dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
798dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                else
799dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
800dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    calc_sbr_synfilterbank_LC(Sr,               /* realSamples  */
801dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                              ftimeOutPtr + (i << 7),
802dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                              &circular_buffer_s[3968 - (i<<7)],
803dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                              pVars->mc_info.bDownSampledSbr);
804dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
805dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
806dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
807dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            else
808dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
809dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
810dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                for (k = xoverBand; k != 0; k--)
811dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
812dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = shft_lft_1(*(ptr_tmp1++));
813dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
814dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
815dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                ptr_tmp1 = &hFrameData->sbrQmfBufferReal[i*SBR_NUM_BANDS];
816dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                ptr_tmp2 = &Sr[xoverBand];
817dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
818dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
819dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                for (k = xoverBand; k < sbrDec->highSubband; k++)
820dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
821dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = (*(ptr_tmp1++));
822dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
823dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
824dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pv_memset((void *)ptr_tmp2,
825dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                          0,
826dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                          (64 - sbrDec->highSubband)*sizeof(*ptr_tmp2));
827dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
828dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
829dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                ptr_tmp1 = (hFrameData->codecQmfBufferImag[m]);
830dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                ptr_tmp2 = Si;
831dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
832dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                for (k = (xoverBand >> 1); k != 0; k--)
833dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
834dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = shft_lft_1(*(ptr_tmp1++));
835dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = shft_lft_1(*(ptr_tmp1++));
836dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
837dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                if (xoverBand & 1)
838dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
839dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2) = shft_lft_1(*(ptr_tmp1));
840dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
841dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
842dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                ptr_tmp1 = &hFrameData->sbrQmfBufferImag[i*SBR_NUM_BANDS];
843dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                ptr_tmp2 = &Si[xoverBand];
844dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
845dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                for (k = xoverBand; k < sbrDec->highSubband; k++)
846dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
847dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    *(ptr_tmp2++) = (*(ptr_tmp1++));
848dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
849dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
850dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pv_memset((void *)ptr_tmp2,
851dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                          0,
852dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                          (64 - sbrDec->highSubband)*sizeof(*ptr_tmp2));
853dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
854dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
855dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                if (pVars->mc_info.bDownSampledSbr)
856dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
857dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    calc_sbr_synfilterbank(Sr,              /* realSamples  */
858dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                           Si,             /* imagSamples  */
859dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                           ftimeOutPtr + (i << 6),
860dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                           &circular_buffer_s[1984 - (i<<6)],
861dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                           pVars->mc_info.bDownSampledSbr);
862dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
863dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                else
864dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                {
865dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                    calc_sbr_synfilterbank(Sr,              /* realSamples  */
866dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                           Si,             /* imagSamples  */
867dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                           ftimeOutPtr + (i << 7),
868dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                           &circular_buffer_s[3968 - (i<<7)],
869dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                                           pVars->mc_info.bDownSampledSbr);
870dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                }
871dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
872dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
873dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
874dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
875dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
876dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (pVars->mc_info.bDownSampledSbr)
877dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
878dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hFrameData->V, &circular_buffer_s[0], 640*sizeof(*circular_buffer_s));
879dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
880dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        else
881dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
882dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hFrameData->V, &circular_buffer_s[0], 1152*sizeof(*circular_buffer_s));
883dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
884dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
885dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
886dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
887dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
888dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        /*
889dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         *    Update Buffers
890dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber         */
891dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        for (i = 0; i < sbrDec->bufWriteOffs; i++)     /* sbrDec->bufWriteOffs set to 8 and unchanged */
892dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
893dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            j = sbrDec->noCols + i;                    /* sbrDec->noCols set to 32 and unchanged */
894dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
895dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(hFrameData->codecQmfBufferReal[i],         /* to    */
896dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       hFrameData->codecQmfBufferReal[j],        /* from  */
897dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       sizeof(*hFrameData->codecQmfBufferReal[i]) << 5);
898dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
899dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
900dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
901dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        pv_memmove(&hFrameData->HistsbrQmfBufferReal[0],
902dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                   &hFrameData->sbrQmfBufferReal[32*SBR_NUM_BANDS],
903dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                   6*SBR_NUM_BANDS*sizeof(*hFrameData->sbrQmfBufferReal));
904dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
905dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
906dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (sbrDec->LC_aacP_DecoderFlag == OFF)
907dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        {
908dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            for (i = 0; i < sbrDec->bufWriteOffs; i++)     /* sbrDec->bufWriteOffs set to 6 and unchanged */
909dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            {
910dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                j = sbrDec->noCols + i;                    /* sbrDec->noCols set to 32 and unchanged */
911dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
912dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
913dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                pv_memmove(hFrameData->codecQmfBufferImag[i],
914dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                           hFrameData->codecQmfBufferImag[j],
915dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                           sizeof(*hFrameData->codecQmfBufferImag[i]) << 5);
916dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
917dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            }
918dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
919dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            pv_memmove(&hFrameData->HistsbrQmfBufferImag[0],
920dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       &hFrameData->sbrQmfBufferImag[32*SBR_NUM_BANDS],
921dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber                       6*SBR_NUM_BANDS*sizeof(*hFrameData->sbrQmfBufferImag));
922dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        }
923dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
924dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
925dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
926dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef HQ_SBR
927dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef PARAMETRICSTEREO
928dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
929dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
930dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
931dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
932dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
933dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    hFrameData->reset_flag = 0;
934dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    if (applyProcessing)
935dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
936dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        sbrDec->prevLowSubband = sbrDec->lowSubband;
937dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
938dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
939dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber}
940dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
941dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
942dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif      /*  AAC_PLUS */
943