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