1250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* ------------------------------------------------------------------
2250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Copyright (C) 1998-2009 PacketVideo
3250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *
4250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * you may not use this file except in compliance with the License.
6250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * You may obtain a copy of the License at
7250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *
8250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *
10250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Unless required by applicable law or agreed to in writing, software
11250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * express or implied.
14250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * See the License for the specific language governing permissions
15250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * and limitations under the License.
16250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * -------------------------------------------------------------------
17250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber */
18250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*
19250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
20250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
21250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   PacketVideo Corp.
22250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   MP3 Decoder Library
23250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
24250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   Filename: pvmp3_stereo_proc.cpp
25250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
26250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   Functions:
27250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
28250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    pvmp3_st_mid_side
29250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    pvmp3_st_intensity
30250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    pvmp3_stereo_proc
31250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
32250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
33250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
34250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberpvmp3_st_mid_side
35250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
36250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber INPUT AND OUTPUT DEFINITIONS
37250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
38250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas HuberInput
39250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
40250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xr[],      input channel
41250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xl[],
42250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 Start,     Location of first element where stereo intensity is applied
43250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 Number     number of elements affected
44250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
45250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Returns
46250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
47250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xl[],      generated stereo channel
48250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
49250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
50250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
51250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
52250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberpvmp3_st_intensity
53250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
54250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber INPUT AND OUTPUT DEFINITIONS
55250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
56250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas HuberInput
57250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
58250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xr[],      input channel
59250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xl[],
60250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 is_pos,    index to table is_ratio_factor[]
61250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 Start,     Location of first element where stereo intensity is applied
62250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 Number     number of elements affected
63250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
64250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Returns
65250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
66250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xl[],      generated stereo channel
67250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
68250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
69250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
70250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
71250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberpvmp3_stereo_proc
72250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
73250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber INPUT AND OUTPUT DEFINITIONS
74250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
75250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas HuberInput
76250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
77250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xr[],                    input channel
78250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xl[],
79250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   mp3ScaleFactors  *scalefac,    scale factors structure
80250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   struct gr_info_s *gr_info,     granule structure
81250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   mp3Header *info                mp3 header info
82250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Returns
83250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
84250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber   int32 xl[],      generated stereo channel
85250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
86250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
87250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
88250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber FUNCTION DESCRIPTION
89250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
90250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    stereo processing for mpeg1 layer III
91250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    After requantization, the reconstructed values are processed for ms_stereo
92250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    or intensity_stereo modes or both, before passing them to the synthesis
93250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    filterbank
94250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
95250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    In ms_stereo mode the values of the normalized middle/side channels
96250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    M[l] and S[l] are transmitted instead of the left/right channel values
97250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    L[l] and R[l]. From here, L[l] and R[l] are reconstructed
98250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
99250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    Intensity_stereo is done by specifying the magnitude (via the
100250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    scalefactors of the left channel) and a stereo position is_pos[sfb],
101250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    which is transmitted instead of scalefactors of the right channel.
102250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    The stereo position is used to derive the left and right channel signals
103250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
104250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
105250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REQUIREMENTS
106250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
107250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
108250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
109250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REFERENCES
110250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
111250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996)
112250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber     ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension
113250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
114250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
115250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber PSEUDO-CODE
116250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
117250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------
118250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber*/
119250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
120250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
121250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
122250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; INCLUDES
123250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
124250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
125250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pvmp3_stereo_proc.h"
126250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pv_mp3dec_fxd_op.h"
127250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pvmp3_tables.h"
128250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
129250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
130250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
131250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; MACROS
132250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Define module specific macros here
133250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
134250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
135250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
136250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
137250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; DEFINES
138250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Include all pre-processor statements here. Include conditional
139250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; compile variables also.
140250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
141250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#define N31 31
142250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
143250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#define Q31_fmt(a)    (int32(double(0x7FFFFFFF)*a))
144250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
145250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
146250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; LOCAL FUNCTION DEFINITIONS
147250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Function Prototype declaration
148250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
149250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
150250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
151250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS
152250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Variable declaration - defined here and used outside this module
153250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
154250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*
155250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *  TmpFac= tan(is_pos * (PI /12));
156250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *
157250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *  TmpFac /= (1 + TmpFac);
158250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber *
159250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber */
160250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
161250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberconst int32  is_ratio_factor[8] = {0,
162250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                   Q31_fmt(0.21132486540519),   Q31_fmt(0.36602540378444),   Q31_fmt(0.50000000000000),
163250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                   Q31_fmt(0.63397459621556),   Q31_fmt(0.78867513459481),   Q31_fmt(1.00000000000000),
164250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                   0
165250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                  };
166250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
167250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
168250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL FUNCTION REFERENCES
169250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Declare functions defined elsewhere and referenced in this module
170250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
171250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
172250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
173250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
174250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Declare variables used in this module but defined elsewhere
175250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
176250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
177250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
178250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE
179250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
180250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
181250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubervoid pvmp3_st_mid_side(int32 xr[SUBBANDS_NUMBER*FILTERBANK_BANDS],
182250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                       int32 xl[SUBBANDS_NUMBER*FILTERBANK_BANDS],
183250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                       int32 Start,
184250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                       int32 Number)
185250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{
186250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
187250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 *pt_xr  = &xr[Start];
188250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 *pt_xl  = &xl[Start];
189250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
190250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    for (int32 i = Number >> 1; i != 0; i--)
191250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    {
192250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        int32 xxr = *(pt_xr) << 1;
193250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        int32 xxl = *(pt_xl) << 1;
194250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xr++)  = fxp_mul32_Q32((xxr + xxl), Q31_fmt(0.70710678118655));   /* Sum */
195250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xl++)  = fxp_mul32_Q32((xxr - xxl), Q31_fmt(0.70710678118655));   /* Diff */
196250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        xxr = *(pt_xr) << 1;
197250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        xxl = *(pt_xl) << 1;
198250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xr++)  = fxp_mul32_Q32((xxr + xxl), Q31_fmt(0.70710678118655));   /* Sum */
199250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xl++)  = fxp_mul32_Q32((xxr - xxl), Q31_fmt(0.70710678118655));   /* Diff */
200250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    }
201250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
202250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
203250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    if (Number&1)
204250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    {
205250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        int32 xxr = *(pt_xr) << 1;
206250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        int32 xxl = *(pt_xl) << 1;
207250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xr)  = fxp_mul32_Q32((xxr + xxl), Q31_fmt(0.70710678118655));   /* Sum */
208250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xl)  = fxp_mul32_Q32((xxr - xxl), Q31_fmt(0.70710678118655));   /* Diff */
209250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    }
210250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
211250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber}
212250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
213250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
214250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
215250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE
216250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
217250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
218250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubervoid pvmp3_st_intensity(int32 xr[SUBBANDS_NUMBER*FILTERBANK_BANDS],
219250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        int32 xl[SUBBANDS_NUMBER*FILTERBANK_BANDS],
220250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        int32 is_pos,
221250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        int32 Start,
222250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        int32 Number)
223250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{
224250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
225250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 TmpFac = is_ratio_factor[ is_pos & 7];
226250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
227250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 *pt_xr  = &xr[Start];
228250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 *pt_xl  = &xl[Start];
229250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
230250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    for (int32 i = Number >> 1; i != 0; i--)
231250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    {
232250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        int32 tmp = fxp_mul32_Q32((*pt_xr) << 1, TmpFac);
233250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xl++) = (*pt_xr) - tmp;
234250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xr++) = tmp;
235250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        tmp = fxp_mul32_Q32((*pt_xr) << 1, TmpFac);
236250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xl++) = (*pt_xr) - tmp;
237250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xr++) = tmp;
238250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    }
239250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
240250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    if (Number&1)
241250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    {
242250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        int32 tmp = fxp_mul32_Q32((*pt_xr) << 1, TmpFac);
243250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xl) = (*pt_xr) - tmp;
244250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        *(pt_xr) = tmp;
245250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    }
246250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
247250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber}
248250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
249250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*----------------------------------------------------------------------------
250250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE
251250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/
252250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubervoid pvmp3_stereo_proc(int32 xr[SUBBANDS_NUMBER*FILTERBANK_BANDS],
253250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                       int32 xl[SUBBANDS_NUMBER*FILTERBANK_BANDS],
254250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                       mp3ScaleFactors *scalefac,
255250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                       granuleInfo *gr_info,
256250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                       int32 used_freq_lines,
257250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                       mp3Header *info)
258250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{
259250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
260250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
261250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 sb;
262250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 ss;
263250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 sfbNo;
264250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 sfbStart;
265250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
266250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 sfb;
267250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 sfbTemp;
268250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 i;
269250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 j;
270250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
271250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
272250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 i_stereo  = (info->mode == MPG_MD_JOINT_STEREO) &&
273250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                      (info->mode_ext & 0x1);
274250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
275250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 ms_stereo = (info->mode == MPG_MD_JOINT_STEREO) &&
276250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                      (info->mode_ext & 0x2);
277250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
278250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    int32 sfreq  = info->version_x + (info->version_x << 1);
279250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    sfreq += info->sampling_frequency;
280250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
281250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
282250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
283250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
284250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    if (i_stereo)
285250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    {
286250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        if (gr_info->window_switching_flag && (gr_info->block_type == 2))
287250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        {
288250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            if (gr_info->mixed_block_flag)
289250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
290250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                /*
291250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                 * mixed blocks processing
292250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                 */
293250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                i = 31;
294250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                ss = 17;
295250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                sb = 0;
296250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                while (i >= 0)
297250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
298250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    if (xl[(i*FILTERBANK_BANDS) + ss])
299250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
300250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sb = (i << 4) + (i << 1) + ss;
301250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        i = -1;
302250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
303250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    else
304250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
305250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        ss--;
306250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        if (ss < 0)
307250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
308250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            i--;
309250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            ss = 17;
310250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
311250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
312250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
313250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
314250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                if (sb < 36)
315250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
316250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /*
317250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                     * mixed blocks processing: intensity bound inside long blocks
318250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                     */
319250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* 1. long blocks up to intensity border: not intensity */
320250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
321250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    if (mp3_sfBandIndex[sfreq].l[4] <= sb)
322250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
323250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfb = 4;
324250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
325250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    else
326250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
327250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfb = 0;
328250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
329250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
330250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    while (mp3_sfBandIndex[sfreq].l[sfb] < sb)
331250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
332250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfb++;
333250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
334250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
335250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* from that sfb on intensity stereo */
336250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfbTemp = sfb;  /* save for later use */
337250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
338250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfbStart = mp3_sfBandIndex[sfreq].l[sfb];
339250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
340250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* from 0 up to sfbStart do ms_stereo or normal stereo */
341250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
342250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    if (ms_stereo)
343250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
344250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        pvmp3_st_mid_side(xr, xl, 0, sfbStart);
345250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
346250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
347250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* 2. long blocks from intensity border up to sfb band 8: intensity */
348250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* calc. is_ratio */
349250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
350250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
351250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* Start of intensity stereo of remaining sfc bands: */
352250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    for (; sfbTemp < 8; sfbTemp++)
353250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
354250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbStart = mp3_sfBandIndex[sfreq].l[sfbTemp];  /* = Start in 0 ... 575 */
355250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbNo = mp3_sfBandIndex[sfreq].l[sfbTemp+1] - mp3_sfBandIndex[sfreq].l[sfbTemp]; /* No of lines to process */
356250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
357250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        if (scalefac->l[sfbTemp] != 7)
358250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
359250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            pvmp3_st_intensity(xr, xl, scalefac->l[sfbTemp], sfbStart, sfbNo);
360250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
361250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        else if (ms_stereo)
362250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
363250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
364250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
365250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
366250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }  /* for (; sfbTemp < 8; sfbTemp++) */
367250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
368250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    for (j = 0; j < 3; j++)
369250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
370250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        /* 3. short blocks from sfbcnt to last sfb do intensity stereo */
371250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        for (sfbTemp = 3; sfbTemp < 13; sfbTemp++)
372250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
373250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            sfbNo = mp3_sfBandIndex[sfreq].s[sfbTemp+1] - mp3_sfBandIndex[sfreq].s[sfbTemp]; /* No of lines to process */
374250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sfbTemp] + j * sfbNo;
375250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
376250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            if (scalefac->s[j][sfbTemp] != 7)
377250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            {
378250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                pvmp3_st_intensity(xr, xl, scalefac->s[j][sfbTemp], sfbStart, sfbNo);
379250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            }
380250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            else if (ms_stereo)
381250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            {
382250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
383250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            }
384250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
385250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }  /* for (; sfbTemp < 22; sfbTemp++) */
386250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    } /* for (j = 0; j < 3; j++) */
387250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
388250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                else   /* else for (sb >= 36) */
389250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
390250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /*
391250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                     * mixed blocks processing: intensity bound outside long blocks
392250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                     */
393250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
394250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
395250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /*
396250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                     * 2. short blocks from sfb band 3 up to intensity border: normal stereo, ms stereo and intensity
397250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                     */
398250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    for (j = 0; j < 3; j++)
399250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
400250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        int32 sfbcnt;
401250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbcnt = -1;
402250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
403250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        for (sfb = 12; sfb >= 3; sfb--)
404250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
405250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            int32 lines;
406250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            lines = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb];
407250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            i = 3 * mp3_sfBandIndex[sfreq].s[sfb] + (j + 1) * lines - 1;
408250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
409250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            while (lines > 0)
410250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            {
411250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                if (xl[i])
412250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                {
413250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                    sfbcnt = sfb;
414250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                    sfb = -10;
415250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                    lines = -10;
416250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                }
417250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                lines--;
418250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                i--;
419250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            }
420250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
421250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
422250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbcnt += 1;
423250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        if (sfbcnt < 3)
424250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
425250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            sfbcnt = 3;
426250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
427250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
428250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbTemp = sfbcnt;        /* for later use */
429250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
430250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
431250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        /*
432250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                         *   do normal stereo or MS stereo from sfb 3 to < sfbcnt:
433250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                         */
434250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        for (sb = 3; sb < sfbcnt; sb++)
435250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
436250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            sfbNo = mp3_sfBandIndex[sfreq].s[sb+1] - mp3_sfBandIndex[sfreq].s[sb];
437250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sb] + j * sfbNo;
438250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
439250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            if (ms_stereo)
440250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            {
441250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
442250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            }
443250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
444250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
445250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
446250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        /* from sfbcnt to last sfb do intensity stereo */
447250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        for (; sfbTemp < 13; sfbTemp++)
448250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
449250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            sfbNo = mp3_sfBandIndex[sfreq].s[sfbTemp+1] - mp3_sfBandIndex[sfreq].s[sfbTemp]; /* No of lines to process */
450250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sfbTemp] + j * sfbNo;
451250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
452250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            if (scalefac->s[j][sfbTemp] != 7)
453250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            {
454250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                pvmp3_st_intensity(xr, xl, scalefac->s[j][sfbTemp], sfbStart, sfbNo);
455250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            }
456250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            else if (ms_stereo)
457250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            {
458250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
459250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            }
460250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
461250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }  /* for (; sfbTemp < 22; sfbTemp++) */
462250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
463250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    } /* for (j = 0; j < 3; j++) */
464250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
465250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* 1. long blocks up to sfb band 8: not intensity */
466250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* from 0 to sfb 8 ms_stereo or normal stereo */
467250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
468250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfbStart = mp3_sfBandIndex[sfreq].l[8];
469250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
470250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    if (ms_stereo)
471250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
472250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        pvmp3_st_mid_side(xr, xl, 0, sfbStart);
473250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
474250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
475250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
476250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            }  /* if (gr_info->mixed_block_flag) */
477250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            else
478250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
479250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                /*
480250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                 * short block processing
481250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                 */
482250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                for (j = 0; j < 3; j++)
483250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
484250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    int32 sfbcnt = -1;
485250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
486250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    for (sfb = 12; sfb >= 0; sfb--)
487250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
488250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        int32 lines = mp3_sfBandIndex[sfreq].s[sfb+1] - mp3_sfBandIndex[sfreq].s[sfb];
489250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        i = 3 * mp3_sfBandIndex[sfreq].s[sfb] + (j + 1) * lines - 1;
490250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
491250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        while (lines > 0)
492250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
493250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            if (xl[i])
494250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            {
495250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                sfbcnt = sfb;
496250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                sfb = -10;
497250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                                lines = -10;
498250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            }
499250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            lines--;
500250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            i--;
501250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
502250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
503250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
504250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfbcnt += 1;
505250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfbTemp = sfbcnt;        /* for later use */
506250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
507250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* do normal stereo or MS stereo from 0 to sfbcnt */
508250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    for (sb = 0; sb < sfbcnt; sb++)
509250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
510250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbNo = mp3_sfBandIndex[sfreq].s[sb+1] - mp3_sfBandIndex[sfreq].s[sb];
511250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sb] + j * sfbNo;
512250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
513250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        if (ms_stereo)
514250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
515250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
516250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
517250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
518250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
519250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
520250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /* from sfbcnt to last sfb do intensity stereo */
521250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    for (; sfbTemp < 13; sfbTemp++)
522250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
523250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbNo = mp3_sfBandIndex[sfreq].s[sfbTemp+1] - mp3_sfBandIndex[sfreq].s[sfbTemp]; /* No of lines to process */
524250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        sfbStart = 3 * mp3_sfBandIndex[sfreq].s[sfbTemp] + j * sfbNo;
525250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
526250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        if (scalefac->s[j][sfbTemp] != 7)
527250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
528250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            pvmp3_st_intensity(xr, xl, scalefac->s[j][sfbTemp], sfbStart, sfbNo);
529250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
530250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        else if (ms_stereo)
531250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        {
532250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                            pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
533250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        }
534250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
535250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }  /* for (; sfbTemp < 22; sfbTemp++) */
536250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
537250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                } /* for (j = 0; j < 3; j++) */
538250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
539250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            } /* if( gr_info->mixed_block_flag) */
540250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
541250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
542250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
543250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        }  /* if (gr_info->window_switching_flag && (gr_info->block_type == 2)) */
544250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        else
545250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        {
546250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            /*
547250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber             *   long block processing
548250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber             */
549250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            i = 31;
550250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            ss = 17;
551250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            sb = 0;
552250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
553250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            while (i >= 0)
554250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
555250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                if (xl[(i*FILTERBANK_BANDS) + ss] != 0)
556250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
557250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sb = (i << 4) + (i << 1) + ss;
558250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    i = -2;
559250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
560250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                else
561250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
562250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    ss--;
563250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    if (ss < 0)
564250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    {
565250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        i--;
566250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                        ss = 17;
567250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    }
568250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
569250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            }
570250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
571250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            if (sb)
572250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
573250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                if (mp3_sfBandIndex[sfreq].l[14] <= sb)
574250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
575250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfb = 14;
576250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
577250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                else if (mp3_sfBandIndex[sfreq].l[7] <= sb)
578250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
579250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfb = 7;
580250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
581250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                else
582250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
583250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfb = 0;
584250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
585250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
586250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
587250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                while (mp3_sfBandIndex[sfreq].l[sfb] <= sb)
588250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
589250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfb++;
590250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
591250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            }
592250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            else
593250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
594250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                if (i == -1)
595250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
596250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /*  all xr[1][][] are 0: set IS bound sfb to 0  */
597250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfb = 0;
598250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
599250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                else
600250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
601250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    /*  xr[1][0][0] is unequal 0 and all others are 0: set IS bound sfb to 1 */
602250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfb = 1;
603250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
604250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            }
605250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
606250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            sfbTemp = sfb;  /* save for later use */
607250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
608250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
609250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            sfbStart = mp3_sfBandIndex[sfreq].l[sfb];
610250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
611250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            /* from 0 to sfbStart ms_stereo or normal stereo */
612250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            if (ms_stereo)
613250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
614250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                pvmp3_st_mid_side(xr, xl, 0, sfbStart);
615250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            }
616250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
617250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            /* now intensity stereo of the remaining sfb's: */
618250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            for (; sfb < 21; sfb++)
619250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
620250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                sfbStart = mp3_sfBandIndex[sfreq].l[sfb];
621250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                sfbNo = mp3_sfBandIndex[sfreq].l[sfb+1] - mp3_sfBandIndex[sfreq].l[sfb]; /* No of lines to process */
622250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
623250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                if (scalefac->l[sfb] != 7)
624250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
625250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    pvmp3_st_intensity(xr, xl, scalefac->l[sfb], sfbStart, sfbNo);
626250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
627250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                else if (ms_stereo)
628250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
629250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
630250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
631250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
632250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            }  /* for (; sfbTemp < 22; sfbTemp++) */
633250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
634250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
635250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
636250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            sfbStart = mp3_sfBandIndex[sfreq].l[21];
637250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            sfbNo = mp3_sfBandIndex[sfreq].l[22] - mp3_sfBandIndex[sfreq].l[21]; /* No of lines to process */
638250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
639250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            if (scalefac->l[21] != 7)
640250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
641250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                if (sfbTemp < 21)
642250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
643250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfbTemp = scalefac->l[20];
644250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
645250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                else
646250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                {
647250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                    sfbTemp = 0;  /* if scalefac[20] is not an intensity position, is_pos = 0 */
648250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                }
649250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
650250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                pvmp3_st_intensity(xr, xl, sfbTemp, sfbStart, sfbNo);
651250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            }
652250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            else if (ms_stereo)
653250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            {
654250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber                pvmp3_st_mid_side(xr, xl, sfbStart, sfbNo);
655250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            }
656250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
657250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        }  /* if (gr_info->window_switching_flag && (gr_info->block_type == 2)) */
658250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
659250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
660250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    }  /* if (i_stereo)  */
661250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    else
662250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    {
663250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        /*
664250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber         * normal or ms stereo processing
665250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber         */
666250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        if (ms_stereo)
667250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        {
668250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
669250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber            pvmp3_st_mid_side(xr, xl, 0, used_freq_lines);
670250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
671250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        }
672250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
673250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber    } /* if (i_stereo) */
674250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
675250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber}
676250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
677