1d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* ------------------------------------------------------------------
2d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Copyright (C) 1998-2009 PacketVideo
3d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
4d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * you may not use this file except in compliance with the License.
6d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * You may obtain a copy of the License at
7d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
8d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
10d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Unless required by applicable law or agreed to in writing, software
11d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * express or implied.
14d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * See the License for the specific language governing permissions
15d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * and limitations under the License.
16d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * -------------------------------------------------------------------
17d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */
18d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*
19d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
20d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
21d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   PacketVideo Corp.
22d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   MP3 Decoder Library
23d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   Filename: pvmp3_dequantize_sample.cpp
25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   Functions:
27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber      power_1_third
28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber      pvmp3_dequantize_sample
29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     Date: 09/21/2007
31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY
34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description:
37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS
40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberpower_1_third
42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberint32 power_1_third( int32 xx)
43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput
45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32           xx,                     int32 in the [0, 8192] range
46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns
48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32           xx^(1/3)                int32 Q26 number representing
50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                            the 1/3 power of the input
51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS
54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberpvmp3_dequantize_sample
56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput
58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 is[SUBBANDS_NUMBER*FILTERBANK_BANDS],
59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    mp3ScaleFactors *scalefac,                 scale factor structure
60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    struct gr_info_s *gr_info,                 granule structure informatiom
61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    mp3Header *info                            mp3 header info
62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns
64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 is[SUBBANDS_NUMBER*FILTERBANK_BANDS], dequantize output as (.)^(4/3)
66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION
69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    dequantize sample
71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS
74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES
78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996)
80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension
81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE
84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/
87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES
91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h"
94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_dec_defs.h"
95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_dequantize_sample.h"
96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_normalize.h"
97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "mp3_mem_funcs.h"
98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_tables.h"
99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS
102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here
103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES
108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional
109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also.
110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
111183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define Q30_fmt(a)(int32(double(0x40000000)*(a)))
112183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define Q29_fmt(a)(int32(double(0x20000000)*(a)))
113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS
116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration
117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS
121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module
122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst int32 pretab[22] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0};
124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst int32 pow_2_1_fourth[4] =
126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q30_fmt(1.0),                Q30_fmt(1.18920711500272),
128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q30_fmt(1.41421356237310),   Q30_fmt(1.68179283050743)
129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber};
130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst int32 two_cubic_roots[7] =
132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q29_fmt(0),                  Q29_fmt(1.25992104989487),
134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q29_fmt(1.58740105196820),   Q29_fmt(2.00000000000000),
135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q29_fmt(2.51984209978975),   Q29_fmt(3.17480210393640),
136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q29_fmt(3.99999999999999)
137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber};
138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES
141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module
142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere
147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberint32 power_1_third(int32 xx)
155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (xx <= 512)
158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (power_one_third[xx] >> 1);
160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if (xx >> 15)
164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            return 0x7FFFFFFF;  /* saturate any value over 32767 */
166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        else
168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            int32 x = xx;
170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            int32 m = 22 - pvmp3_normalize(xx);
171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            xx >>= m;
173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            xx = (power_one_third[xx]) + (((power_one_third[xx+1] - power_one_third[xx]) >> m) * (x & ((1 << m) - 1)));
174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            return (fxp_mul32_Q30(xx, two_cubic_roots[m]));
175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_dequantize_sample(int32 is[SUBBANDS_NUMBER*FILTERBANK_BANDS],
188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             mp3ScaleFactors *scalefac,
189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             granuleInfo *gr_info,
190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             int32  used_freq_lines,
191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             mp3Header *info)
192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 ss;
194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 cb = 0;
195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 global_gain;
196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 sfreq = info->sampling_frequency + info->version_x + (info->version_x << 1);
197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    /* apply formula per block type */
199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (gr_info->window_switching_flag && (gr_info->block_type == 2))
201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        int32 next_cb_boundary;
203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        int32 cb_begin = 0;
204d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        int32 cb_width = 0;
205d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        int32 mixstart = 8;                                       /* added 2003/08/21  efs */
206d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
207d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if (info->version_x != MPEG_1)
208d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
209d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            mixstart = 6;                                   /* different value in MPEG2 LSF */
210d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
211d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
212d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if (gr_info->mixed_block_flag)
213d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
214d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            next_cb_boundary = mp3_sfBandIndex[sfreq].l[1];  /* LONG blocks: 0,1,3 */
215d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
216d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        else
217d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
218d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            next_cb_boundary = mp3_sfBandIndex[sfreq].s[1] * 3; /* pure SHORT block */
219d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            cb_width = 0;
220d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
221d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
222d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        global_gain =  gr_info->global_gain;
223d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        int32 two_raise_one_fourth = pow_2_1_fourth[global_gain&0x3];
224d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        global_gain = 12 + (global_gain >> 2);
225d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
226d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        for (ss = 0 ; ss < used_freq_lines ; ss++)
227d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
228d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            if (ss == next_cb_boundary)
229d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
230d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                cb++;       /*  critical band counter */
231d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if (gr_info->mixed_block_flag)
232d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
233d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (next_cb_boundary == mp3_sfBandIndex[sfreq].l[mixstart])
234d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
235d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        next_cb_boundary = mp3_sfBandIndex[sfreq].s[4] * 3;
236d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
237d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        cb_begin = mp3_sfBandIndex[sfreq].s[3] * 3;
238d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        cb_width = 3;
239d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        cb = 3;
240d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
241d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    else if (ss < mp3_sfBandIndex[sfreq].l[mixstart])
242d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
243d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        next_cb_boundary = mp3_sfBandIndex[sfreq].l[cb+1];
244d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
245d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    else
246d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
247d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        next_cb_boundary = mp3_sfBandIndex[sfreq].s[cb+1] * 3;
248d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
249d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        cb_width = cb;
250d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        cb_begin = mp3_sfBandIndex[sfreq].s[cb] * 3;
251d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
252d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
253d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (ss < 2*FILTERBANK_BANDS)
254d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {   /*  1st 2 subbands of switched blocks */
255d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        global_gain  = (gr_info->global_gain);
256d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        global_gain -= (1 + gr_info->scalefac_scale) *
257d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                       (scalefac->l[cb] + gr_info->preflag * pretab[cb]) << 1;
258d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
259d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        two_raise_one_fourth = pow_2_1_fourth[global_gain&0x3];
260d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        global_gain = 12 + (global_gain >> 2);
261d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
262d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
263d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else
264d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
265d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    next_cb_boundary = mp3_sfBandIndex[sfreq].s[cb+1] * 3;
266d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    cb_width = cb;
267d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    cb_begin = mp3_sfBandIndex[sfreq].s[cb] * 3;
268d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
269d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
270d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }   /*  end-if ( ss == next_cb_boundary) */
271d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
272d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* Do long/short dependent scaling operations. */
273d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            if ((gr_info->mixed_block_flag == 0) || (gr_info->mixed_block_flag && (ss >= 2*FILTERBANK_BANDS)))
274d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
275d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                int32 temp2 = fxp_mul32_Q32((ss - cb_begin) << 16, mp3_shortwindBandWidths[sfreq][cb_width]);
276d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                temp2 = (temp2 + 1) >> 15;
277d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
278d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                global_gain  = (gr_info->global_gain);
279d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                global_gain -=  gr_info->subblock_gain[temp2] << 3;
280d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                global_gain -= (1 + gr_info->scalefac_scale) * (scalefac->s[temp2][cb] << 1);
281d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
282d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                two_raise_one_fourth = pow_2_1_fourth[global_gain&0x3];
283d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                global_gain = 12 + (global_gain >> 2);
284d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
285d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
286d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
287d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
288d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /*
289d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber             *       xr[sb][ss] = 2^(global_gain/4)
290d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber             */
291d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
292d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* Scale quantized value. */
293d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
294d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* 0 < abs(is[ss]) < 8192 */
295d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
296d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            int32 tmp = fxp_mul32_Q30((is[ss] << 16), power_1_third(pv_abs(is[ ss])));
297d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
298d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            tmp = fxp_mul32_Q30(tmp, two_raise_one_fourth);
299d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
300d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            if (global_gain < 0)
301d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
302d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                int32 temp = - global_gain;
303d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if (temp < 32)
304d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
305d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    is[ss] = (tmp >> temp);
306d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
307d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else
308d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
309d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    is[ss] = 0;
310d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
311d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
312d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            else
313d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
314d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                is[ss] = (tmp << global_gain);
315d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
316d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
317d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }  /*   for (ss=0 ; ss < used_freq_lines ; ss++)   */
318d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
319d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
320d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
321d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
322d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
323d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        for (cb = 0 ; cb < 22 ; cb++)
324d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
325d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
326d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* Compute overall (global) scaling. */
327d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
328d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            global_gain  = (gr_info->global_gain);
329d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
330d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            global_gain -= (1 + gr_info->scalefac_scale) *
331d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                           (scalefac->l[cb] + gr_info->preflag * pretab[cb]) << 1;
332d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
333d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
334d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            int32 two_raise_one_fourth = pow_2_1_fourth[global_gain&0x3];
335d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            global_gain = 12 + (global_gain >> 2);
336d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
337d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /*
338d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber             *       xr[sb][ss] = 2^(global_gain/4)
339d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber             */
340d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
341d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* Scale quantized value. */
342d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
343d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            if (used_freq_lines >= mp3_sfBandIndex[sfreq].l[cb+1])
344d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
345d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if (global_gain <= 0)
346d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
347d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    global_gain = - global_gain;
348d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (global_gain < 32)
349d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
350d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        for (ss = mp3_sfBandIndex[sfreq].l[cb]; ss < mp3_sfBandIndex[sfreq].l[cb+1]; ss += 2)
351d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
352d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            int32 tmp =  is[ss];
353d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            if (tmp)
354d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
355d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                tmp = fxp_mul32_Q30((tmp << 16), power_1_third(pv_abs(tmp)));
356d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                is[ss] = fxp_mul32_Q30(tmp, two_raise_one_fourth) >> global_gain;
357d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
358d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            tmp =  is[ss+1];
359d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            if (tmp)
360d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
361d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                tmp = fxp_mul32_Q30((tmp << 16), power_1_third(pv_abs(tmp)));
362d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                is[ss+1] = fxp_mul32_Q30(tmp, two_raise_one_fourth) >> global_gain;
363d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
364d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
365d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
366d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    else
367d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
368d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        pv_memset(&is[ mp3_sfBandIndex[sfreq].l[cb]],
369d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                  0,
370d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                  (mp3_sfBandIndex[sfreq].l[cb+1] - mp3_sfBandIndex[sfreq].l[cb])*sizeof(*is));
371d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
372d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
373d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else
374d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
375d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for (ss = mp3_sfBandIndex[sfreq].l[cb]; ss < mp3_sfBandIndex[sfreq].l[cb+1]; ss += 2)
376d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
377d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        int32 tmp =  is[ss];
378d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if (tmp)
379d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
380d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            tmp = fxp_mul32_Q30((tmp << 16), power_1_third(pv_abs(tmp)));
381d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            is[ss] = fxp_mul32_Q30(tmp, two_raise_one_fourth) << global_gain;
382d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
383d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
384d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        tmp =  is[ss+1];
385d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if (tmp)
386d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
387d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            tmp = fxp_mul32_Q30((tmp << 16), power_1_third(pv_abs(tmp)));
388d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            is[ss+1] = fxp_mul32_Q30(tmp, two_raise_one_fourth) << global_gain;
389d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
390d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
391d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
392d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
393d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            else
394d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
395d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if (global_gain <= 0)
396d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
397d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    global_gain = - global_gain;
398d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (global_gain < 32)
399d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
400d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        for (ss = mp3_sfBandIndex[sfreq].l[cb]; ss < used_freq_lines; ss += 2)
401d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
402d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            int32 tmp =  is[ss];
403d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            if (tmp)
404d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
405d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                tmp = fxp_mul32_Q30((tmp << 16), power_1_third(pv_abs(tmp)));
406d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                is[ss] = fxp_mul32_Q30(tmp, two_raise_one_fourth) >> global_gain;
407d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
408d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            tmp =  is[ss+1];
409d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            if (tmp)
410d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
411d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                tmp = fxp_mul32_Q30((tmp << 16), power_1_third(pv_abs(tmp)));
412d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                is[ss+1] = fxp_mul32_Q30(tmp, two_raise_one_fourth) >> global_gain;
413d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
414d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
415d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
416d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
417d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    else
418d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
419d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        pv_memset(&is[ mp3_sfBandIndex[sfreq].l[cb]],
420d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                  0,
421d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                  (mp3_sfBandIndex[sfreq].l[cb+1] - mp3_sfBandIndex[sfreq].l[cb])*sizeof(*is));
422d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
423d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
424d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else
425d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
426d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for (ss = mp3_sfBandIndex[sfreq].l[cb]; ss < used_freq_lines; ss++)
427d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
428d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        int32 tmp =  is[ss];
429d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
430d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if (tmp)
431d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
432d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            tmp = fxp_mul32_Q30((tmp << 16), power_1_third(pv_abs(tmp)));
433d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            is[ss] = fxp_mul32_Q30(tmp, two_raise_one_fourth) << global_gain;
434d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
435d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
436d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
437d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
438d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                cb = 22;  // force breaking out of the loop
439d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
440d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            } /*  if ( used_freq_lines >= mp3_sfBandIndex[sfreq].l[cb+1]) */
441d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
442d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }   /* for (cb=0 ; cb < 22 ; cb++)  */
443d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
444d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }   /*  if (gr_info->window_switching_flag && (gr_info->block_type == 2))  */
445d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
446d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
447d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pv_memset(&is[used_freq_lines],
448d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber              0,
449d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber              (FILTERBANK_BANDS*SUBBANDS_NUMBER - used_freq_lines)*sizeof(*is));
450d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
451d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
452d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
453