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