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