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_mpeg2_stereo_proc.cpp
25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   Functions:
27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     pvmp3_st_intensity_ver2
29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     pvmp3_mpeg2_stereo_proc
30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     Date: 09/21/2007
32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY
35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description:
38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberpvmp3_st_intensity_ver2
43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS
45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput
47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 xr[],      input channel
49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 xl[],
50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 m,         selecting index: io = 2(1/4) (m=0), io = 2(1/8) (m=1)
51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 is_pos,    index on table  is_pos_pow_eitgh_root_of_2
52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 Start,     Location of first element where stereo intensity is applied
53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 Number     number of elements affected
54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns
56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 xl[],      generated stereo channel
58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberpvmp3_mpeg2_stereo_proc
65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS
67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput
69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 xr[],                     input channel
71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 xl[],
72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   mp3ScaleFactors *scalefac,      scale factors structure for Right channel
73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   granuleInfo *gr_info_l,         granule structure for the left channel
74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   granuleInfo *gr_info_r,         granule structure for the rigth channel
75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   uint32 *scalefac_IIP_buffer,    auxiliary scale factor vector
76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   mp3Header *info                 mp3 header info
77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Returns
78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   int32 xl[],      generated stereo channel
80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION
84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    stereo processing for mpeg2 layer III LSF extension
86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS
89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES
93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996)
95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension
96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE
99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/
102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES
106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_mpeg2_stereo_proc.h"
109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_stereo_proc.h"
110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h"
111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_tables.h"
112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "mp3_mem_funcs.h"
113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS
116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here
117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES
122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional
123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also.
124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
126183d387706417863076873ec566ca5966d8f5560Chih-Hung Hsieh#define Q31_fmt(a)    (int32(double(0x7FFFFFFF)*(a)))
127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS
130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration
131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS
135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module
136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst int32 is_pos_pow_eitgh_root_of_2[8] =
138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    /*   --- 2^(1/8) ----- */
140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q31_fmt(1.00000000000000),   Q31_fmt(0.91700404320467),   Q31_fmt(0.84089641525371),
141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q31_fmt(0.77110541270397),   Q31_fmt(0.70710678118655),   Q31_fmt(0.64841977732550),
142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    Q31_fmt(0.59460355750136),   Q31_fmt(0.54525386633263)
143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber};
144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES
147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module
148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere
153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_st_intensity_ver2(int32 xr[SUBBANDS_NUMBER*FILTERBANK_BANDS],
160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             int32 xl[SUBBANDS_NUMBER*FILTERBANK_BANDS],
161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             int32 m,
162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             int32 is_pos,
163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             int32 Start,
164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             int32 Number)
165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 k[2];
167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    /* pow(io, ((is_pos + 1)>>1)); io = 2(1/4) (m=0), io = 2(1/8) (m=1) */
169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    k[0] = is_pos_pow_eitgh_root_of_2[((is_pos+1)&(3+(m<<2)))<<(1-m)] >> ((is_pos + 1) >> (2 + m));
170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    /* pow(io, (is_pos>>1)); io = 2(1/4) (m=0), io = 2(1/8) (m=1)  */
171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    k[1] = is_pos_pow_eitgh_root_of_2[(is_pos&(3+(m<<2)))<<(1-m)] >> (is_pos >> (2 + m));
172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 *pt_xr  = &xr[Start];
175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 *pt_xl  = &xl[Start];
176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (is_pos == 0)    /* 0 < is_pos < 31 */
178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        pv_memcpy(pt_xl, pt_xr, Number*sizeof(*pt_xr));
180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if (is_pos & 1)
182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        for (int32 i = Number >> 1; i != 0; i--)
184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xl++) = (*pt_xr);
186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xr) = fxp_mul32_Q32((*pt_xr) << 1, k[0]);
187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            pt_xr++;
188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xl++) = (*pt_xr);
189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xr) = fxp_mul32_Q32((*pt_xr) << 1, k[0]);
190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            pt_xr++;
191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if (Number&1)
193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xl) = (*pt_xr);
195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xr) = fxp_mul32_Q32((*pt_xr) << 1, k[0]);
196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        for (int32 i = Number >> 1; i != 0; i--)
201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xl++) = fxp_mul32_Q32((*(pt_xr++)) << 1, k[1]);
203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xl++) = fxp_mul32_Q32((*(pt_xr++)) << 1, k[1]);
204d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
205d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if (Number&1)
206d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
207d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            *(pt_xl) = fxp_mul32_Q32((*pt_xr) << 1, k[1]);
208d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
209d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
210d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
211d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
212d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
213d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
214d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
215d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
216d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
217d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
218d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid pvmp3_mpeg2_stereo_proc(int32 xr[SUBBANDS_NUMBER*FILTERBANK_BANDS],
219d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             int32 xl[SUBBANDS_NUMBER*FILTERBANK_BANDS],
220d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             mp3ScaleFactors *scalefac_R,
221d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             granuleInfo *gr_info_l,
222d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             granuleInfo *gr_info_r,
223d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             uint32 *scalefac_IIP_buffer,
224d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             int32 used_freq_lines,
225d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                             mp3Header *info)
226d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
227d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
228d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 sfreq;
229d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 sb;
230d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 ss;
231d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 sfbNo;
232d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 sfbStart;
233d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 sfb;
234d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 sfbTemp;
235d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 i;
236d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 j;
237d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 io;
238d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
239d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
240d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 i_stereo  = (info->mode == MPG_MD_JOINT_STEREO) &&
241d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                      (info->mode_ext & 0x1);
242d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
243d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    int32 ms_stereo = (info->mode == MPG_MD_JOINT_STEREO) &&
244d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                      (info->mode_ext & 0x2);
245d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
246d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
247d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (i_stereo)
248d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
249d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if (gr_info_r->scalefac_compress & 1)
250d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
251d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            io = 0;  /* 2^(-1/4) */
252d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
253d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        else
254d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
255d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            io = 1;  /* 2^(-1/8) */
256d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
257d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
258d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        sfreq =  info->version_x + (info->version_x << 1);
259d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        sfreq += info->sampling_frequency;
260d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
261d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if (gr_info_l->window_switching_flag && (gr_info_l->block_type == 2))
262d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
263d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            if (gr_info_l->mixed_block_flag)
264d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
265d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                /*
266d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                 * mixed blocks processing
267d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                 */
268d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                i = 31;
269d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                ss = 17;
270d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                sb = -1;
271d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
272d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                while (i >= 0)
273d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
274d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (xl[(i*FILTERBANK_BANDS) + ss])
275d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
276d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sb = (i << 4) + (i << 1) + ss;
277d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        i = -1;
278d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
279d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    else
280d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
281d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        ss--;
282d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if (ss < 0)
283d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
284d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            i--;
285d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            ss = 17;
286d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
287d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
288d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }   /* now sb is the number of highest line with value != 0      */
289d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                /* can be between -1 (all lines zero) and 575 (no line zero) */
290d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
291d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if (sb < 36)    /*  was (sb <= 36)  */
292d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
293d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /*
294d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                     *  mixed blocks processing: intensity bound inside long blocks
295d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                     */
296d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* 1. long blocks up to intensity border: Stereo or M/S */
297d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (mp3_sfBandIndex[sfreq].l[4] <= sb)
298d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
299d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        i = 4;
300d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
301d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    else
302d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
303d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        i = 0;
304d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
305d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
306d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    while (mp3_sfBandIndex[sfreq].l[i] <= sb)
307d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
308d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        i++;
309d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
310d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    sfbTemp = i;  /* from that (long) sfb on we have intensity stereo */
311d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
312d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    sfbNo = mp3_sfBandIndex[sfreq].l[sfbTemp]; /* number of lines to process */
313d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
314d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* from sfbStart up sfbNo lines do ms_stereo or normal stereo */
315d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (ms_stereo)
316d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
317d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        pvmp3_st_mid_side(xr, xl, 0, sfbNo);
318d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
319d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
320d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* 2. long blocks from intensity border up to sfb band 6: intensity */
321d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* calc. MPEG_1_2_Factor[0], MPEG_1_2_Factor[1] */
322d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
323d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for (sfb = sfbTemp; sfb < 6; sfb++)
324d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
325d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sfbStart = mp3_sfBandIndex[sfreq].l[sfb];  /* = Start in 0 ... 575 */
326d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sfbNo = mp3_sfBandIndex[sfreq].l[sfb+1] - mp3_sfBandIndex[sfreq].l[sfb]; /* No of lines to process */
327d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
328d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if ((uint32)(scalefac_R->l[sfb]) != scalefac_IIP_buffer[sfb])
329d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
330d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            pvmp3_st_intensity_ver2(xr, xl, io, scalefac_R->l[sfb], sfbStart, sfbNo);
331d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
332d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        else if (ms_stereo)
333d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
334d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
335d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
336d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
337d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
338d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* 3. now process all sfb with short blocks (3...12), all in intensity mode */
339d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
340d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for (j = 0; j < 3; j++)
341d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
342d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /*   first calculate directional factors for intensity stereo,
343d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                         *   for all sfb in intensity mode, but only
344d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                         *   if they do not have "illegal" position:
345d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                         */
346d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* to do this for all sfb we have to get information for last scale factor band:
347d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                         * here we clearly have more than one sfb in intensity mode,
348d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                         *  so copy factors and legal/illegal information from sfb11 to sfb12
349d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                         */
350d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        (scalefac_R->s[j][12]) = (scalefac_R->s[j][11]);
351d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        scalefac_IIP_buffer[36 + j] = scalefac_IIP_buffer[33 + j];  /* legal/illegal in sfb 12 same as in sfb 11 */
352d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
353d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        for (sfb = 3; sfb < 13; sfb++)
354d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
355d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            sfbNo = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb]; /* No of lines to process */
356d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sfb] + j * sfbNo;
357d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
358d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            if ((uint32)(scalefac_R->s[j][sfb]) != scalefac_IIP_buffer[3*sfb + j])
359d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
360d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                pvmp3_st_intensity_ver2(xr, xl, io, scalefac_R->s[j][sfb], sfbStart, sfbNo);
361d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
362d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            else if (ms_stereo)
363d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
364d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
365d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
366d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
367d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    } /* for (j = 0; j < 3; j++) */
368d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
369d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else  /*  else then (sb >= 36)  */
370d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
371d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /*
372d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                     *   mixed blocks processing: intensity bound outside long blocks
373d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                     */
374d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
375d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* 2. short blocks, do for all 3  */
376d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* ------------------------------ */
377d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for (j = 0; j < 3; j++)
378d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
379d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        int32 sfbcnt = -1;
380d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
381d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        for (sfb = 12; sfb >= 3; sfb--)
382d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
383d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            int32 lines = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb];
384d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
385d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            i = 3 * mp3_sfBandIndex[sfreq].s[sfb] + (j + 1) * lines - 1;
386d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
387d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            while (lines > 0)
388d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
389d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                if (xl[i])
390d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                {
391d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                    sfbcnt = sfb;
392d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                    sfb = -10;
393d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                    lines = -10;
394d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                }
395d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                lines--;
396d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                i--;
397d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
398d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
399d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
400d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sfbcnt += 1;
401d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if (sfbcnt < 3)
402d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
403d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            sfbcnt = 3;   /* should not be necessary */
404d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
405d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
406d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sfbTemp = sfbcnt; /* from this (short) sfb on we have intensity mode        */
407d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* can have values between 3 (all short sfb in intensity) */
408d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* and 13 (no short sfb in intensity mode)                */
409d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
410d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* 3. from sfbTemp to last sfb calculate is_ratio values:    */
411d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* first calculate directional factors for intensity stereo, */
412d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* for all sfb in intensity mode, but only                   */
413d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* if they do not have "illegal" position:                   */
414d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
415d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* to do this for all sfb we have to get information for last scale factor band: */
416d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /*  get factors for last scale factor band: */
417d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* more than one sfb in intensity mode,
418d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        copy factors and legal/illegal information from sfb11 to sfb12 */
419d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if (sfbTemp < 12)
420d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
421d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            (scalefac_R->s[j][12]) = (scalefac_R->s[j][11]);
422d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            scalefac_IIP_buffer[36 + j] = scalefac_IIP_buffer[33 + j];   /* legal/illegal in sfb 12 same as in sfb 11 */
423d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
424d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        else if (sfbTemp == sfb)
425d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            /* only sfb 12 in intensity mode, use factors corresponding to is_pos[12] == 0 */
426d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
427d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            (scalefac_R->s[j][12]) = 0;
428d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            scalefac_IIP_buffer[36 + j] = 1;    /* the scf value 0 in sfb12 is "legal" */
429d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
430d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* if sfbTemp > sfb (no sfb in intensity mode): do nothing */
431d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
432d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
433d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* 4. do normal stereo or MS stereo from sfb 3 to < sfbTemp: */
434d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        for (sfb = 3; sfb < sfbTemp; sfb++)
435d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
436d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            sfbNo = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb];
437d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sfb] + j * sfbNo;
438d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
439d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            if (ms_stereo)
440d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
441d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
442d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
443d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
444d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
445d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* 5. now intensity stereo processing of the remaining sfb's: */
446d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
447d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        for (sfb = sfbTemp; sfb < 13; sfb++)
448d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
449d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            sfbNo = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb]; /* No of lines to process */
450d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sfb] + j * sfbNo;
451d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            if ((uint32)(scalefac_R->s[j][sfb]) != scalefac_IIP_buffer[3*sfb + j])
452d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
453d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                pvmp3_st_intensity_ver2(xr, xl, io, scalefac_R->s[j][sfb], sfbStart, sfbNo);
454d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
455d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            else if (ms_stereo)
456d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
457d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
458d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
459d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
460d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /*  end of correction by efs 2003-07-04 */
461d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    } /* for (j = 0; j < 3; j++) */
462d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
463d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
464d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* long blocks 0 up to sfb band 6: no intensity */
465d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
466d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    sfbNo = mp3_sfBandIndex[sfreq].l[6];        /* number of lines to process */
467d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (ms_stereo)
468d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
469d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        pvmp3_st_mid_side(xr, xl, 0, sfbNo);
470d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
471d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
472d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }  /* if intensity bound inside or outside long blocks */
473d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }  /* if (gr_info->mixed_block_flag) */
474d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            else
475d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
476d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                /*
477d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                 *  short block processing
478d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                 */
479d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                for (j = 0; j < 3; j++)
480d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
481d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    int32 sfbcnt = -1;
482d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
483d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for (sfb = 12; sfb >= 0; sfb--)
484d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
485d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        int32 lines = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb];
486d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        i = 3 * mp3_sfBandIndex[sfreq].s[sfb] + (j + 1) * lines - 1;
487d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
488d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        while (lines > 0)
489d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
490d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            if (xl[i])
491d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            {
492d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                sfbcnt = sfb;
493d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                sfb = -10;
494d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                                lines = -10;
495d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            }
496d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            lines--;
497d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            i--;
498d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
499d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
500d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
501d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    sfbcnt += 1;
502d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
503d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /*  start of corrected version by efs 2003-07-04  */
504d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    sfbTemp = sfbcnt; /* from this (short) sfb on we have intensity mode        */
505d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* can have values between 3 (all short sfb in intensity) */
506d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* and 13 (no short sfb in intensity mode)                */
507d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
508d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* first calculate directional factors for intensity stereo,
509d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for all sfb in intensity mode, but only
510d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if they do not have "illegal" position: */
511d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
512d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* to do this for all sfb we have to get information for last scale factor band: */
513d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* get factors for last scale factor band: */
514d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* more than one sfb in intensity mode,
515d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    copy factors and legal/illegal information from sfb11 to sfb12 */
516d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (sfbTemp < 12)
517d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
518d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        (scalefac_R->s[j][12]) = (scalefac_R->s[j][11]);
519d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        scalefac_IIP_buffer[36 + j] = scalefac_IIP_buffer[33 + j];  /* legal/illegal in sfb 12 same as in sfb 11 */
520d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
521d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    else if (sfbTemp == 12)
522d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        /* only sfb 12 in intensity mode, use factors corresponding to is_pos[12] == 0 */
523d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
524d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        (scalefac_R->s[j][12]) = 0;
525d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        scalefac_IIP_buffer[36 + j] = 1;    /* the scf value 0 in sfb12 is "legal" */
526d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
527d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* if sfbTemp > sfb (no sfb in intensity mode): do nothing */
528d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
529d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
530d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* Now process audio samples */
531d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* first process lower sfb's not in intensity mode */
532d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for (sfb = 0; sfb < sfbTemp; sfb++)
533d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
534d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sfbNo = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb];
535d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sfb] + j * sfbNo;
536d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
537d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if (ms_stereo)
538d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
539d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
540d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
541d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
542d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
543d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /* now intensity stereo processing of the remaining sfb's: */
544d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    for (sfb = sfbTemp; sfb < 13; sfb++)
545d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
546d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sfbNo = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb]; /* No of lines to process */
547d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sfb] + j * sfbNo;
548d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
549d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        if ((uint32)(scalefac_R->s[j][sfb]) != scalefac_IIP_buffer[3*sfb + j])
550d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
551d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            pvmp3_st_intensity_ver2(xr, xl, io, scalefac_R->s[j][sfb], sfbStart, sfbNo);
552d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
553d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        else if (ms_stereo)
554d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        {
555d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                            pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
556d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        }
557d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
558d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
559d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                } /* for (j = 0; j < 3; j++) */
560d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
561d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            } /* end of else ( gr_info->mixed_block_flag) */
562d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
563d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }  /* if (gr_info->window_switching_flag && (gr_info->block_type == 2)) */
564d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        else
565d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
566d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /*
567d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber             *  long block processing
568d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber             */
569d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            i = 31;
570d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            ss = 17;
571d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            sb = 0;
572d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
573d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            while (i >= 0)
574d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
575d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if (xl[(i*FILTERBANK_BANDS) + ss])
576d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
577d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    sb = (i << 4) + (i << 1) + ss;
578d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /*  i = -1     patched RF    24-09-2002   */
579d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    i = -2;
580d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
581d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else
582d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
583d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    ss--;
584d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    if (ss < 0)
585d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    {
586d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        i--;
587d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                        ss = 17;
588d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    }
589d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
590d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
591d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
592d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /*  patched RF    24-09-2002   */
593d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            if (sb)
594d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
595d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if (mp3_sfBandIndex[sfreq].l[14] <= sb)
596d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
597d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    i = 14;
598d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
599d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else if (mp3_sfBandIndex[sfreq].l[7] <= sb)
600d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
601d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    i = 7;
602d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
603d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else
604d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
605d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    i = 0;
606d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
607d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
608d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                while (mp3_sfBandIndex[sfreq].l[i] <= sb)
609d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
610d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    i++;
611d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
612d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
613d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
614d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            else
615d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
616d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if (i == -1)
617d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
618d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /*  all xr[1][][] are 0: set IS bound sfb to 0  */
619d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    i = 0;
620d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
621d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else
622d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
623d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    /*  xr[1][0][0] is unequal 0 and all others are 0: set IS bound sfb to 1 */
624d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    i = 1;
625d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
626d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
627d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /*  corrected version by efs 2003-07-04  */
628d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            sfbTemp = i;  /* from this (long) sfb on we have intensity mode        */
629d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* can have values between 0 (all long sfb in intensity) */
630d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* and 22 (no long sfb in intensity mode)                */
631d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
632d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* first calculate directional factors for intensity stereo,
633d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            for all sfb in intensity mode, but only if they
634d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            do not have "illegal" position: */
635d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
636d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* to do this for all sfb we have to get information for last scale factor band: */
637d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            if (sfbTemp < 21)
638d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                /* more than one sfb in intensity mode, */
639d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                /* copy factors and legal/illegal information from sfb20 to sfb21 */
640d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
641d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                (scalefac_R->l[21]) = (scalefac_R->l[20]);
642d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                scalefac_IIP_buffer[21] = scalefac_IIP_buffer[20];  /* legal/illegal in sfb 21 same as in sfb 20 */
643d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
644d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            else if (sfbTemp == 21)
645d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                /* only sfb 21 in intensity mode, is_pos[21] = 0 */
646d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
647d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                (scalefac_R->l[21]) = 0;
648d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                scalefac_IIP_buffer[21] = 1;    /* the scf value 0 in sfb21 is "legal" */
649d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
650d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* if sfbTemp > 21 (no sfb in intensity mode): do nothing */
651d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
652d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
653d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* Now process audio samples */
654d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* first process lower sfb's not in intensity mode */
655d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
656d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            sfbNo = mp3_sfBandIndex[sfreq].l[sfbTemp] - mp3_sfBandIndex[sfreq].l[0];
657d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            sfbStart = mp3_sfBandIndex[sfreq].l[0];
658d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
659d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            if (ms_stereo)
660d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
661d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
662d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }
663d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
664d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            /* now intensity stereo processing of the remaining sfb's: */
665d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            for (sfb = sfbTemp; sfb < 22; sfb++)
666d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            {
667d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                sfbNo = mp3_sfBandIndex[sfreq].l[sfb+1] - mp3_sfBandIndex[sfreq].l[sfb]; /* number of lines to process */
668d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                sfbStart = mp3_sfBandIndex[sfreq].l[sfb];                          /* start of sfb */
669d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
670d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                if ((uint32)(scalefac_R->l[sfb]) != scalefac_IIP_buffer[sfb]) /* "legal" position ? */
671d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
672d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    pvmp3_st_intensity_ver2(xr, xl, io, scalefac_R->l[sfb], sfbStart, sfbNo);
673d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
674d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                else if (ms_stereo)
675d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                {
676d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                    pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
677d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber                }
678d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
679d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            }  /* for (sfb = sfbTemp; sfb < 22; sfb++) */
680d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
681d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }  /* if (gr_info->window_switching_flag && (gr_info->block_type == 2)) */
682d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
683d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }  /* if (i_stereo) */
684d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
685d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
686d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        /*
687d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber         *  normal or ms stereo processing
688d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber         */
689d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if (ms_stereo)
690d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
691d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            pvmp3_st_mid_side(xr, xl, 0, used_freq_lines);
692d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
693d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
694d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    } /* if (i_stereo) */
695d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
696d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
697d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
698d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
699d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
700d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
701