aboutsummaryrefslogtreecommitdiff
path: root/decdata.c
blob: 79f360d8bf5894c1a2ed9545e88b6945361c4962 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
/************************* MPEG-2 NBC Audio Decoder **************************
 *                                                                           *
"This software module was originally developed by
AT&T, Dolby Laboratories, Fraunhofer Gesellschaft IIS and edited by
Yoshiaki Oikawa (Sony Corporation)
,Mitsuyuki Hatanaka (Sony Corporation),
in the course of development of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7,
14496-1,2 and 3. This software module is an implementation of a part of one or more
MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4
Audio standard. ISO/IEC  gives users of the MPEG-2 NBC/MPEG-4 Audio
standards free license to this software module or modifications thereof for use in
hardware or software products claiming conformance to the MPEG-2 NBC/MPEG-4
Audio  standards. Those intending to use this software module in hardware or
software products are advised that this use may infringe existing patents.
The original developer of this software module and his/her company, the subsequent
editors and their companies, and ISO/IEC have no liability for use of this software
module or modifications thereof in an implementation. Copyright is not released for
non MPEG-2 NBC/MPEG-4 Audio conforming products.The original developer
retains full right to use the code for his/her  own purpose, assign or donate the
code to a third party and to inhibit third party from using the code for non
MPEG-2 NBC/MPEG-4 Audio conforming products. This copyright notice must
be included in all copies or derivative works."
Copyright(c)1996.
 *                                                                           *
 ****************************************************************************/

#include "all.h"

Hcb book[NSPECBOOKS+2];
int sfbwidth128[(1<<LEN_MAX_SFBS)];

const int SampleRates[] = {
    96000,88200,64000,48000,44100,32000,24000,22050,16000,12000,11025,8000,7350,0,0,0
};

/* Returns the sample rate index */
int get_sr_index(unsigned int sampleRate)
{
    if (92017 <= sampleRate) return 0;
    if (75132 <= sampleRate) return 1;
    if (55426 <= sampleRate) return 2;
    if (46009 <= sampleRate) return 3;
    if (37566 <= sampleRate) return 4;
    if (27713 <= sampleRate) return 5;
    if (23004 <= sampleRate) return 6;
    if (18783 <= sampleRate) return 7;
    if (13856 <= sampleRate) return 8;
    if (11502 <= sampleRate) return 9;
    if (9391 <= sampleRate) return 10;

    return 11;
}
static int sfb_96_1024[] =
{
  4, 8, 12, 16, 20, 24, 28,
  32, 36, 40, 44, 48, 52, 56,
  64, 72, 80, 88, 96, 108, 120,
  132, 144, 156, 172, 188, 212, 240,
  276, 320, 384, 448, 512, 576, 640,
  704, 768, 832, 896, 960, 1024
};   /* 41 scfbands */

static int sfb_96_128[] =
{
  4, 8, 12, 16, 20, 24, 32,
  40, 48, 64, 92, 128
};   /* 12 scfbands */

static int sfb_64_1024[] =
{
  4, 8, 12, 16, 20, 24, 28,
  32, 36, 40, 44, 48, 52, 56,
  64, 72, 80, 88, 100, 112, 124,
  140, 156, 172, 192, 216, 240, 268,
  304, 344, 384, 424, 464, 504, 544,
  584, 624, 664, 704, 744, 784, 824,
  864, 904, 944, 984, 1024
};   /* 41 scfbands 47 */

static int sfb_64_128[] =
{
  4, 8, 12, 16, 20, 24, 32,
  40, 48, 64, 92, 128
};   /* 12 scfbands */


static int sfb_48_1024[] =
{
  4, 8, 12, 16, 20, 24, 28,
  32,   36, 40, 48, 56, 64, 72,
  80,   88, 96, 108,    120,    132,    144,
  160,  176,    196,    216,    240,    264,    292,
  320,  352,    384,    416,    448,    480,    512,
  544,  576,    608,    640,    672,    704,    736,
  768,  800,    832,    864,    896,    928,    1024
};

static int sfb_48_128[] =
{
          4,    8,  12, 16, 20, 28, 36,
          44,   56, 68, 80, 96, 112,    128
};

static int sfb_32_1024[] =
{
        4,  8,  12, 16, 20, 24, 28,
        32, 36, 40, 48, 56, 64, 72,
        80, 88, 96, 108,    120,    132,    144,
        160,    176,    196,    216,    240,    264,    292,
        320,    352,    384,    416,    448,    480,    512,
        544,    576,    608,    640,    672,    704,    736,
        768,    800,    832,    864,    896,    928,    960,
        992,    1024
};

static int sfb_24_1024[] =
{
  4, 8, 12, 16, 20, 24, 28,
  32, 36, 40, 44, 52, 60, 68,
  76, 84, 92, 100, 108, 116, 124,
  136, 148, 160, 172, 188, 204, 220,
  240, 260, 284, 308, 336, 364, 396,
  432, 468, 508, 552, 600, 652, 704,
  768, 832, 896, 960, 1024
};   /* 47 scfbands */

static int sfb_24_128[] =
{
  4, 8, 12, 16, 20, 24, 28,
  36, 44, 52, 64, 76, 92, 108,
  128
};   /* 15 scfbands */

static int sfb_16_1024[] =
{
  8, 16, 24, 32, 40, 48, 56,
  64, 72, 80, 88, 100, 112, 124,
  136, 148, 160, 172, 184, 196, 212,
  228, 244, 260, 280, 300, 320, 344,
  368, 396, 424, 456, 492, 532, 572,
  616, 664, 716, 772, 832, 896, 960,
  1024
};   /* 43 scfbands */

static int sfb_16_128[] =
{
  4, 8, 12, 16, 20, 24, 28,
  32, 40, 48, 60, 72, 88, 108,
  128
};   /* 15 scfbands */

static int sfb_8_1024[] =
{
  12, 24, 36, 48, 60, 72, 84,
  96, 108, 120, 132, 144, 156, 172,
  188, 204, 220, 236, 252, 268, 288,
  308, 328, 348, 372, 396, 420, 448,
  476, 508, 544, 580, 620, 664, 712,
  764, 820, 880, 944, 1024
};   /* 40 scfbands */

static int sfb_8_128[] =
{
  4, 8, 12, 16, 20, 24, 28,
  36, 44, 52, 60, 72, 88, 108,
  128
};   /* 15 scfbands */

SR_Info samp_rate_info[(1<<LEN_SAMP_IDX)] =
{
    /* sampling_frequency, #long sfb, long sfb, #short sfb, short sfb */
    /* samp_rate, nsfb1024, SFbands1024, nsfb128, SFbands128 */
    {96000, 41, sfb_96_1024, 12, sfb_96_128},       /* 96000 */
    {88200, 41, sfb_96_1024, 12, sfb_96_128},       /* 88200 */
    {64000, 47, sfb_64_1024, 12, sfb_64_128},       /* 64000 */
    {48000, 49, sfb_48_1024, 14, sfb_48_128},       /* 48000 */
    {44100, 49, sfb_48_1024, 14, sfb_48_128},       /* 44100 */
    {32000, 51, sfb_32_1024, 14, sfb_48_128},       /* 32000 */
    {24000, 47, sfb_24_1024, 15, sfb_24_128},       /* 24000 */
    {22050, 47, sfb_24_1024, 15, sfb_24_128},       /* 22050 */
    {16000, 43, sfb_16_1024, 15, sfb_16_128},       /* 16000 */
    {12000, 43, sfb_16_1024, 15, sfb_16_128},       /* 12000 */
    {11025, 43, sfb_16_1024, 15, sfb_16_128},       /* 11025 */
    {8000,  40, sfb_8_1024,  15, sfb_8_128 },       /* 8000  */
    {0,0,0,0,0},
    {0,0,0,0,0},
    {0,0,0,0,0},
    {0,0,0,0,0}
};

int tns_max_bands_tbl[(1<<LEN_SAMP_IDX)][4] =
{
    /* entry for each sampling rate
     * 1    Main/LC long window
     * 2    Main/LC short window
     * 3    SSR long window
     * 4    SSR short window
     */
    {31,  9, 28,  7},       /* 96000 */
    {31,  9, 28,  7},       /* 88200 */
    {34, 10, 27,  7},       /* 64000 */
    {40, 14, 26,  6},       /* 48000 */
    {42, 14, 26,  6},       /* 44100 */
    {51, 14, 26,  6},       /* 32000 */
    {46, 14, 29,  7},       /* 24000 */
    {46, 14, 29,  7},       /* 22050 */
    {42, 14, 23,  8},       /* 16000 */
    {42, 14, 23,  8},       /* 12000 */
    {42, 14, 23,  8},       /* 11025 */
    {39, 14, 19,  7},       /* 8000  */
    {0,0,0,0},
    {0,0,0,0},
    {0,0,0,0},
    {0,0,0,0}
};

int pred_max_bands_tbl[(1<<LEN_SAMP_IDX)] = {
  33,     /* 96000 */
  33,     /* 88200 */
  38,     /* 64000 */
  40,     /* 48000 */
  40,     /* 44100 */
  40,     /* 32000 */
  41,     /* 24000 */
  41,     /* 22050 */
  37,     /* 16000 */
  37,     /* 12000 */
  37,     /* 11025 */
  34,     /* 8000  */
  0,
  0,
  0,
  0
};