1/* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13 * express or implied.
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
17 */
18/*
19
20 Pathname: ./src/sfb.c
21
22
23------------------------------------------------------------------------------
24 REVISION HISTORY
25
26 Description: created to define the scalefactor bands for all sampling rates
27
28 Description: Change short to Int16
29
30 Description: Modified structure to avoid assigning addresses to constant
31              tables. This solve linking problem when using the
32              /ropi option (Read-only position independent) for some
33              compilers
34              - Eliminated redundant vector sfb_96_128.
35              - Eliminated references to contant vector addresses in
36                samp_rate_info
37
38 Who:                              Date:
39 Description:
40
41------------------------------------------------------------------------------
42 INPUT AND OUTPUT DEFINITIONS
43
44 Inputs:
45
46 Local Stores/Buffers/Pointers Needed:
47
48 Global Stores/Buffers/Pointers Needed:
49
50 Outputs:
51
52 Pointers and Buffers Modified:
53
54
55 Local Stores Modified:
56
57 Global Stores Modified:
58
59------------------------------------------------------------------------------
60 FUNCTION DESCRIPTION
61
62 This function defines the scalefactor bands for all sampling rates
63
64------------------------------------------------------------------------------
65 REQUIREMENTS
66
67
68------------------------------------------------------------------------------
69 REFERENCES
70
71 (1) ISO/IEC 14496-3: 1999(E)
72    Subpart 4       p66     (sfb tables)
73                    p111    (4.6.10)
74                    p200    (Annex 4.B.5)
75
76------------------------------------------------------------------------------
77 PSEUDO-CODE
78
79------------------------------------------------------------------------------
80 RESOURCES USED
81   When the code is written for a specific target processor the
82     the resources used should be documented below.
83
84 STACK USAGE: [stack count for this module] + [variable to represent
85          stack usage for each subroutine called]
86
87     where: [stack usage variable] = stack usage for [subroutine
88         name] (see [filename].ext)
89
90 DATA MEMORY USED: x words
91
92 PROGRAM MEMORY USED: x words
93
94 CLOCK CYCLES: [cycle count equation for this module] + [variable
95           used to represent cycle count for each subroutine
96           called]
97
98     where: [cycle count variable] = cycle count for [subroutine
99        name] (see [filename].ext)
100
101------------------------------------------------------------------------------
102*/
103
104
105/*----------------------------------------------------------------------------
106; INCLUDES
107----------------------------------------------------------------------------*/
108#include    "pv_audio_type_defs.h"
109#include    "sfb.h"
110
111/*----------------------------------------------------------------------------
112; MACROS
113; Define module specific macros here
114----------------------------------------------------------------------------*/
115
116/*----------------------------------------------------------------------------
117; DEFINES
118; Include all pre-processor statements here. Include conditional
119; compile variables also.
120----------------------------------------------------------------------------*/
121
122/*----------------------------------------------------------------------------
123; LOCAL FUNCTION DEFINITIONS
124; Function Prototype declaration
125----------------------------------------------------------------------------*/
126
127/*----------------------------------------------------------------------------
128; LOCAL STORE/BUFFER/POINTER DEFINITIONS
129; Variable declaration - defined here and used outside this module
130----------------------------------------------------------------------------*/
131const Int16 sfb_96_1024[] =
132{
133    4, 8, 12, 16, 20, 24, 28,
134    32, 36, 40, 44, 48, 52, 56,
135    64, 72, 80, 88, 96, 108, 120,
136    132, 144, 156, 172, 188, 212, 240,
137    276, 320, 384, 448, 512, 576, 640,
138    704, 768, 832, 896, 960, 1024
139};         /* 41 scfbands */
140
141const Int16 sfb_64_1024[] =
142{
143    4, 8, 12, 16, 20, 24, 28,
144    32, 36, 40, 44, 48, 52, 56,
145    64, 72, 80, 88, 100, 112, 124,
146    140, 156, 172, 192, 216, 240, 268,
147    304, 344, 384, 424, 464, 504, 544,
148    584, 624, 664, 704, 744, 784, 824,
149    864, 904, 944, 984, 1024
150};               /* 41 scfbands 47 */
151
152const Int16 sfb_64_128[] =
153{
154    4, 8, 12, 16, 20, 24, 32,
155    40, 48, 64, 92, 128
156};                   /* 12 scfbands */
157
158
159const Int16 sfb_48_1024[] =
160{
161    4,  8,  12, 16, 20, 24, 28,
162    32, 36, 40, 48, 56, 64, 72,
163    80, 88, 96, 108,    120,    132,    144,
164    160,    176,    196,    216,    240,    264,    292,
165    320,    352,    384,    416,    448,    480,    512,
166    544,    576,    608,    640,    672,    704,    736,
167    768,    800,    832,    864,    896,    928,    1024
168};
169/* 49  scfbands*/
170
171const Int16 sfb_48_128[] =
172{
173    4,  8,  12, 16, 20, 28, 36,
174    44, 56, 68, 80, 96, 112, 128
175};         /* 14 scfbands */
176
177const Int16 sfb_32_1024[] =
178{
179    4,  8,  12, 16, 20, 24, 28,
180    32, 36, 40, 48, 56, 64, 72,
181    80, 88, 96, 108,    120,    132,    144,
182    160,    176,    196,    216,    240,    264,    292,
183    320,    352,    384,    416,    448,    480,    512,
184    544,    576,    608,    640,    672,    704,    736,
185    768,    800,    832,    864,    896,    928,    960,
186    992,    1024
187};                         /* 51 scfbands */
188
189const Int16 sfb_24_1024[] =
190{
191    4, 8, 12, 16, 20, 24, 28,
192    32, 36, 40, 44, 52, 60, 68,
193    76, 84, 92, 100, 108, 116, 124,
194    136, 148, 160, 172, 188, 204, 220,
195    240, 260, 284, 308, 336, 364, 396,
196    432, 468, 508, 552, 600, 652, 704,
197    768, 832, 896, 960, 1024
198};              /* 47 scfbands */
199
200const Int16 sfb_24_128[] =
201{
202    4, 8, 12, 16, 20, 24, 28,
203    36, 44, 52, 64, 76, 92, 108,
204    128
205};                                   /* 15 scfbands */
206
207const Int16 sfb_16_1024[] =
208{
209    8, 16, 24, 32, 40, 48, 56,
210    64, 72, 80, 88, 100, 112, 124,
211    136, 148, 160, 172, 184, 196, 212,
212    228, 244, 260, 280, 300, 320, 344,
213    368, 396, 424, 456, 492, 532, 572,
214    616, 664, 716, 772, 832, 896, 960,
215    1024
216};                                  /* 43 scfbands */
217
218const Int16 sfb_16_128[] =
219{
220    4, 8, 12, 16, 20, 24, 28,
221    32, 40, 48, 60, 72, 88, 108,
222    128
223};                                   /* 15 scfbands */
224
225const Int16 sfb_8_1024[] =
226{
227    12, 24, 36, 48, 60, 72, 84,
228    96, 108, 120, 132, 144, 156, 172,
229    188, 204, 220, 236, 252, 268, 288,
230    308, 328, 348, 372, 396, 420, 448,
231    476, 508, 544, 580, 620, 664, 712,
232    764, 820, 880, 944, 1024
233};               /* 40 scfbands */
234
235const Int16 sfb_8_128[] =
236{
237    4, 8, 12, 16, 20, 24, 28,
238    36, 44, 52, 60, 72, 88, 108,
239    128
240};                                   /* 15 scfbands */
241
242const SR_Info samp_rate_info[12] =
243{
244    /* sampling_frequency, #long sfb, #short sfb */
245    /* samp_rate, nsfb1024, nsfb128 */
246    {96000, 41, 12},       /* 96000 */
247    {88200, 41, 12},       /* 88200 */
248    {64000, 47, 12},       /* 64000 */
249    {48000, 49, 14},       /* 48000 */
250    {44100, 49, 14},       /* 44100 */
251    {32000, 51, 14},       /* 32000 */
252    {24000, 47, 15},       /* 24000 */
253    {22050, 47, 15},       /* 22050 */
254    {16000, 43, 15},       /* 16000 */
255    {12000, 43, 15},       /* 12000 */
256    {11025, 43, 15},       /* 11025 */
257    { 8000, 40, 15},       /* 8000  */
258};
259
260
261/*----------------------------------------------------------------------------
262; EXTERNAL FUNCTION REFERENCES
263; Declare functions defined elsewhere and referenced in this module
264----------------------------------------------------------------------------*/
265
266/*----------------------------------------------------------------------------
267; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
268; Declare variables used in this module but defined elsewhere
269----------------------------------------------------------------------------*/
270
271/*----------------------------------------------------------------------------
272; FUNCTION CODE
273----------------------------------------------------------------------------*/
274
275
276