Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * AC-3 tables
3
 * copyright (c) 2001 Fabrice Bellard
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
 
22
/**
23
 * @file
24
 * tables taken directly from the AC-3 spec.
25
 */
26
 
27
#include "libavutil/channel_layout.h"
28
#include "avcodec.h"
29
#include "ac3tab.h"
30
 
31
/**
32
 * Possible frame sizes.
33
 * from ATSC A/52 Table 5.18 Frame Size Code Table.
34
 */
35
const uint16_t ff_ac3_frame_size_tab[38][3] = {
36
    { 64,   69,   96   },
37
    { 64,   70,   96   },
38
    { 80,   87,   120  },
39
    { 80,   88,   120  },
40
    { 96,   104,  144  },
41
    { 96,   105,  144  },
42
    { 112,  121,  168  },
43
    { 112,  122,  168  },
44
    { 128,  139,  192  },
45
    { 128,  140,  192  },
46
    { 160,  174,  240  },
47
    { 160,  175,  240  },
48
    { 192,  208,  288  },
49
    { 192,  209,  288  },
50
    { 224,  243,  336  },
51
    { 224,  244,  336  },
52
    { 256,  278,  384  },
53
    { 256,  279,  384  },
54
    { 320,  348,  480  },
55
    { 320,  349,  480  },
56
    { 384,  417,  576  },
57
    { 384,  418,  576  },
58
    { 448,  487,  672  },
59
    { 448,  488,  672  },
60
    { 512,  557,  768  },
61
    { 512,  558,  768  },
62
    { 640,  696,  960  },
63
    { 640,  697,  960  },
64
    { 768,  835,  1152 },
65
    { 768,  836,  1152 },
66
    { 896,  975,  1344 },
67
    { 896,  976,  1344 },
68
    { 1024, 1114, 1536 },
69
    { 1024, 1115, 1536 },
70
    { 1152, 1253, 1728 },
71
    { 1152, 1254, 1728 },
72
    { 1280, 1393, 1920 },
73
    { 1280, 1394, 1920 },
74
};
75
 
76
/**
77
 * Map audio coding mode (acmod) to number of full-bandwidth channels.
78
 * from ATSC A/52 Table 5.8 Audio Coding Mode
79
 */
80
const uint8_t ff_ac3_channels_tab[8] = {
81
    2, 1, 2, 3, 3, 4, 4, 5
82
};
83
 
84
/**
85
 * Map audio coding mode (acmod) to channel layout mask.
86
 */
87
const uint16_t avpriv_ac3_channel_layout_tab[8] = {
88
    AV_CH_LAYOUT_STEREO,
89
    AV_CH_LAYOUT_MONO,
90
    AV_CH_LAYOUT_STEREO,
91
    AV_CH_LAYOUT_SURROUND,
92
    AV_CH_LAYOUT_2_1,
93
    AV_CH_LAYOUT_4POINT0,
94
    AV_CH_LAYOUT_2_2,
95
    AV_CH_LAYOUT_5POINT0
96
};
97
 
98
#define COMMON_CHANNEL_MAP \
99
    { { 0, 1,          }, { 0, 1, 2,         } },\
100
    { { 0,             }, { 0, 1,            } },\
101
    { { 0, 1,          }, { 0, 1, 2,         } },\
102
    { { 0, 2, 1,       }, { 0, 2, 1, 3,      } },\
103
    { { 0, 1, 2,       }, { 0, 1, 3, 2,      } },\
104
    { { 0, 2, 1, 3,    }, { 0, 2, 1, 4, 3,   } },
105
 
106
/**
107
 * Table to remap channels from SMPTE order to AC-3 order.
108
 * [channel_mode][lfe][ch]
109
 */
110
const uint8_t ff_ac3_enc_channel_map[8][2][6] = {
111
    COMMON_CHANNEL_MAP
112
    { { 0, 1, 2, 3,    }, { 0, 1, 3, 4, 2,   } },
113
    { { 0, 2, 1, 3, 4, }, { 0, 2, 1, 4, 5, 3 } },
114
};
115
 
116
/**
117
 * Table to remap channels from AC-3 order to SMPTE order.
118
 * [channel_mode][lfe][ch]
119
 */
120
const uint8_t ff_ac3_dec_channel_map[8][2][6] = {
121
    COMMON_CHANNEL_MAP
122
    { { 0, 1, 2, 3,    }, { 0, 1, 4, 2, 3,   } },
123
    { { 0, 2, 1, 3, 4, }, { 0, 2, 1, 5, 3, 4 } },
124
};
125
 
126
/* possible frequencies */
127
const uint16_t ff_ac3_sample_rate_tab[3] = { 48000, 44100, 32000 };
128
 
129
/* possible bitrates */
130
const uint16_t ff_ac3_bitrate_tab[19] = {
131
    32, 40, 48, 56, 64, 80, 96, 112, 128,
132
    160, 192, 224, 256, 320, 384, 448, 512, 576, 640
133
};
134
 
135
/**
136
 * Table of bin locations for rematrixing bands
137
 * reference: Section 7.5.2 Rematrixing : Frequency Band Definitions
138
 */
139
const uint8_t ff_ac3_rematrix_band_tab[5] = { 13, 25, 37, 61, 253 };
140
 
141
/**
142
 * Table E2.16 Default Coupling Banding Structure
143
 */
144
const uint8_t ff_eac3_default_cpl_band_struct[18] = {
145
    0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1
146
};
147
 
148
/* AC-3 MDCT window */
149
 
150
/* MDCT window */
151
DECLARE_ALIGNED(16, const int16_t, ff_ac3_window)[AC3_WINDOW_SIZE/2] = {
152
    4,    7,   12,   16,   21,   28,   34,   42,
153
   51,   61,   72,   84,   97,  111,  127,  145,
154
  164,  184,  207,  231,  257,  285,  315,  347,
155
  382,  419,  458,  500,  544,  591,  641,  694,
156
  750,  810,  872,  937, 1007, 1079, 1155, 1235,
157
 1318, 1406, 1497, 1593, 1692, 1796, 1903, 2016,
158
 2132, 2253, 2379, 2509, 2644, 2783, 2927, 3076,
159
 3230, 3389, 3552, 3721, 3894, 4072, 4255, 4444,
160
 4637, 4835, 5038, 5246, 5459, 5677, 5899, 6127,
161
 6359, 6596, 6837, 7083, 7334, 7589, 7848, 8112,
162
 8380, 8652, 8927, 9207, 9491, 9778,10069,10363,
163
10660,10960,11264,11570,11879,12190,12504,12820,
164
13138,13458,13780,14103,14427,14753,15079,15407,
165
15735,16063,16392,16720,17049,17377,17705,18032,
166
18358,18683,19007,19330,19651,19970,20287,20602,
167
20914,21225,21532,21837,22139,22438,22733,23025,
168
23314,23599,23880,24157,24430,24699,24964,25225,
169
25481,25732,25979,26221,26459,26691,26919,27142,
170
27359,27572,27780,27983,28180,28373,28560,28742,
171
28919,29091,29258,29420,29577,29729,29876,30018,
172
30155,30288,30415,30538,30657,30771,30880,30985,
173
31086,31182,31274,31363,31447,31528,31605,31678,
174
31747,31814,31877,31936,31993,32046,32097,32145,
175
32190,32232,32272,32310,32345,32378,32409,32438,
176
32465,32490,32513,32535,32556,32574,32592,32608,
177
32623,32636,32649,32661,32671,32681,32690,32698,
178
32705,32712,32718,32724,32729,32733,32737,32741,
179
32744,32747,32750,32752,32754,32756,32757,32759,
180
32760,32761,32762,32763,32764,32764,32765,32765,
181
32766,32766,32766,32766,32767,32767,32767,32767,
182
32767,32767,32767,32767,32767,32767,32767,32767,
183
32767,32767,32767,32767,32767,32767,32767,32767,
184
};
185
 
186
const uint8_t ff_ac3_log_add_tab[260]= {
187
0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,
188
0x36,0x35,0x34,0x34,0x33,0x32,0x31,0x30,0x2f,0x2f,
189
0x2e,0x2d,0x2c,0x2c,0x2b,0x2a,0x29,0x29,0x28,0x27,
190
0x26,0x26,0x25,0x24,0x24,0x23,0x23,0x22,0x21,0x21,
191
0x20,0x20,0x1f,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,
192
0x1b,0x1a,0x1a,0x19,0x19,0x18,0x18,0x17,0x17,0x16,
193
0x16,0x15,0x15,0x15,0x14,0x14,0x13,0x13,0x13,0x12,
194
0x12,0x12,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,
195
0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,
196
0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,
197
0x0a,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,
198
0x08,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,
199
0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,
200
0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x04,
201
0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,
202
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x02,
203
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
204
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,
205
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
206
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
207
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
208
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
209
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
210
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
211
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
212
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
213
};
214
 
215
const uint16_t ff_ac3_hearing_threshold_tab[AC3_CRITICAL_BANDS][3]= {
216
{ 0x04d0,0x04f0,0x0580 },
217
{ 0x04d0,0x04f0,0x0580 },
218
{ 0x0440,0x0460,0x04b0 },
219
{ 0x0400,0x0410,0x0450 },
220
{ 0x03e0,0x03e0,0x0420 },
221
{ 0x03c0,0x03d0,0x03f0 },
222
{ 0x03b0,0x03c0,0x03e0 },
223
{ 0x03b0,0x03b0,0x03d0 },
224
{ 0x03a0,0x03b0,0x03c0 },
225
{ 0x03a0,0x03a0,0x03b0 },
226
{ 0x03a0,0x03a0,0x03b0 },
227
{ 0x03a0,0x03a0,0x03b0 },
228
{ 0x03a0,0x03a0,0x03a0 },
229
{ 0x0390,0x03a0,0x03a0 },
230
{ 0x0390,0x0390,0x03a0 },
231
{ 0x0390,0x0390,0x03a0 },
232
{ 0x0380,0x0390,0x03a0 },
233
{ 0x0380,0x0380,0x03a0 },
234
{ 0x0370,0x0380,0x03a0 },
235
{ 0x0370,0x0380,0x03a0 },
236
{ 0x0360,0x0370,0x0390 },
237
{ 0x0360,0x0370,0x0390 },
238
{ 0x0350,0x0360,0x0390 },
239
{ 0x0350,0x0360,0x0390 },
240
{ 0x0340,0x0350,0x0380 },
241
{ 0x0340,0x0350,0x0380 },
242
{ 0x0330,0x0340,0x0380 },
243
{ 0x0320,0x0340,0x0370 },
244
{ 0x0310,0x0320,0x0360 },
245
{ 0x0300,0x0310,0x0350 },
246
{ 0x02f0,0x0300,0x0340 },
247
{ 0x02f0,0x02f0,0x0330 },
248
{ 0x02f0,0x02f0,0x0320 },
249
{ 0x02f0,0x02f0,0x0310 },
250
{ 0x0300,0x02f0,0x0300 },
251
{ 0x0310,0x0300,0x02f0 },
252
{ 0x0340,0x0320,0x02f0 },
253
{ 0x0390,0x0350,0x02f0 },
254
{ 0x03e0,0x0390,0x0300 },
255
{ 0x0420,0x03e0,0x0310 },
256
{ 0x0460,0x0420,0x0330 },
257
{ 0x0490,0x0450,0x0350 },
258
{ 0x04a0,0x04a0,0x03c0 },
259
{ 0x0460,0x0490,0x0410 },
260
{ 0x0440,0x0460,0x0470 },
261
{ 0x0440,0x0440,0x04a0 },
262
{ 0x0520,0x0480,0x0460 },
263
{ 0x0800,0x0630,0x0440 },
264
{ 0x0840,0x0840,0x0450 },
265
{ 0x0840,0x0840,0x04e0 },
266
};
267
 
268
const uint8_t ff_ac3_bap_tab[64]= {
269
    0, 1, 1, 1, 1, 1, 2, 2, 3, 3,
270
    3, 4, 4, 5, 5, 6, 6, 6, 6, 7,
271
    7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
272
    9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
273
    12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
274
    14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
275
    15, 15, 15, 15,
276
};
277
 
278
const uint8_t ff_ac3_slow_decay_tab[4]={
279
    0x0f, 0x11, 0x13, 0x15,
280
};
281
 
282
const uint8_t ff_ac3_fast_decay_tab[4]={
283
    0x3f, 0x53, 0x67, 0x7b,
284
};
285
 
286
const uint16_t ff_ac3_slow_gain_tab[4]= {
287
    0x540, 0x4d8, 0x478, 0x410,
288
};
289
 
290
const uint16_t ff_ac3_db_per_bit_tab[4]= {
291
    0x000, 0x700, 0x900, 0xb00,
292
};
293
 
294
const int16_t ff_ac3_floor_tab[8]= {
295
    0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
296
};
297
 
298
const uint16_t ff_ac3_fast_gain_tab[8]= {
299
    0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
300
};
301
 
302
/**
303
 * Default channel map for a dependent substream defined by acmod
304
 */
305
const uint16_t ff_eac3_default_chmap[8] = {
306
    AC3_CHMAP_L |               AC3_CHMAP_R, // FIXME Ch1+Ch2
307
                  AC3_CHMAP_C,
308
    AC3_CHMAP_L |               AC3_CHMAP_R,
309
    AC3_CHMAP_L | AC3_CHMAP_C | AC3_CHMAP_R,
310
    AC3_CHMAP_L |               AC3_CHMAP_R |                   AC3_CHMAP_C_SUR,
311
    AC3_CHMAP_L | AC3_CHMAP_C | AC3_CHMAP_R |                   AC3_CHMAP_C_SUR,
312
    AC3_CHMAP_L |               AC3_CHMAP_R | AC3_CHMAP_L_SUR |                  AC3_CHMAP_R_SUR,
313
    AC3_CHMAP_L | AC3_CHMAP_C | AC3_CHMAP_R | AC3_CHMAP_L_SUR |                  AC3_CHMAP_R_SUR
314
};