]> git.sesse.net Git - ffmpeg/blob - libavcodec/dcaenc.h
Merge commit '2008f76054906e9ff6bf744800af0e5a5bfe61be'
[ffmpeg] / libavcodec / dcaenc.h
1 /*
2  * DCA encoder tables
3  * Copyright (C) 2008-2012 Alexander E. Patrakov
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 #ifndef AVCODEC_DCAENC_H
23 #define AVCODEC_DCAENC_H
24
25 #include <stdint.h>
26
27 typedef struct {
28     int32_t m;
29     int32_t e;
30 } softfloat;
31
32 static const int sample_rates[] = {
33     8000, 16000, 32000, 11025, 22050, 44100, 12000, 24000, 48000, 0,
34 };
35
36 static const uint8_t bitstream_sfreq[] = { 1, 2, 3, 6, 7, 8, 11, 12, 13 };
37
38 /* Auditory filter center frequencies and bandwidths, in Hz.
39  * The last two are made up, because there is no scientific data.
40  */
41 static const uint16_t fc[] = {
42     50, 150, 250, 350, 450, 570, 700, 840, 1000, 1170, 1370, 1600, 1850, 2150,
43     2500, 2900, 3400, 4000, 4800, 5800, 7000, 8500, 10500, 13500, 17000
44 };
45
46 static const uint16_t erb[] = {
47     80, 100, 100, 100, 110, 120, 140, 150, 160, 190, 210, 240, 280,
48     320, 380, 450, 550, 700, 900, 1100, 1300, 1800, 2500, 3500, 4500
49 };
50
51 static const softfloat stepsize_inv[27] = {
52     {0, 0}, {1342177360, 21}, {2147483647, 21}, {1342177360, 20},
53     {1819901661, 20}, {2147483647, 20}, {1278263843, 19}, {1579032492, 19},
54     {1412817763, 18}, {1220162327, 17}, {1118482133, 16}, {1917391412, 16},
55     {1766017772, 15}, {1525212826, 14}, {1290553940, 13}, {2097179000, 13},
56     {1677683200, 12}, {1497972244, 11}, {1310893147, 10}, {1165354136, 9},
57     {1748031204, 9}, {1542092044, 8}, {1636178017, 7}, {1636178017, 6},
58     {1636178017, 5}, {1636178017, 4}, {1636178017, 3},
59 };
60
61 static const softfloat scalefactor_inv[128] = {
62     {2147483647, 1}, {2147483647, 1}, {2147483647, 2}, {2147483647, 2},
63     {2147483647, 2}, {2147483647, 2}, {1431655765, 2}, {1431655765, 2},
64     {1431655765, 2}, {2147483647, 3}, {2147483647, 3}, {1717986918, 3},
65     {1431655765, 3}, {1227133513, 3}, {1227133513, 3}, {2147483647, 4},
66     {1717986918, 4}, {1561806289, 4}, {1431655765, 4}, {1227133513, 4},
67     {2147483647, 5}, {1908874353, 5}, {1717986918, 5}, {1493901668, 5},
68     {1321528398, 5}, {1145324612, 5}, {2021161080, 6}, {1808407282, 6},
69     {1561806289, 6}, {1374389534, 6}, {1227133513, 6}, {2147483647, 7},
70     {1908874353, 7}, {1676084798, 7}, {1477838209, 7}, {1296593900, 7},
71     {1145324612, 7}, {2021161080, 8}, {1773405851, 8}, {1561806289, 8},
72     {1374389534, 8}, {1216273924, 8}, {2139127680, 9}, {1882725390, 9},
73     {1660893697, 9}, {1462116526, 9}, {1287484341, 9}, {1135859119, 9},
74     {1999112050, 10}, {1762037865, 10}, {1552982525, 10}, {1367551775, 10},
75     {1205604855, 10}, {2124660150, 11}, {1871509153, 11}, {1648443220, 11},
76     {1452459217, 11}, {1279990253, 11}, {1127704233, 11}, {1987368509, 12},
77     {1750814693, 12}, {1542632939, 12}, {1359099663, 12}, {1197398995, 12},
78     {2109880792, 13}, {1858853132, 13}, {1638006149, 13}, {1443165385, 13},
79     {1271479187, 13}, {1120235993, 13}, {1973767086, 14}, {1739045674, 14},
80     {1532153461, 14}, {1349922194, 14}, {1189384493, 14}, {2095804865, 15},
81     {1846464029, 15}, {1626872524, 15}, {1433347133, 15}, {1262853884, 15},
82     {1112619678, 15}, {1960569045, 16}, {1727349015, 16}, {1521881227, 16},
83     {1340842289, 16}, {1181357555, 16}, {2081669156, 17}, {1834047752, 17},
84     {1615889229, 17}, {1423675973, 17}, {1254322457, 17}, {1105123583, 17},
85     {1947330755, 18}, {1715693602, 18}, {1511607799, 18}, {1331801790, 18},
86     {1173384427, 18}, {2067616532, 19}, {1821667648, 19}, {1604980024, 19},
87     {1414066955, 19}, {1245861410, 19}, {1097665748, 19}, {1934193616, 20},
88     {1704119624, 20}, {1501412075, 20}, {1322817107, 20}, {1165466323, 20},
89     {2053666205, 21}, {1809379407, 21}, {1594151671, 21}, {1404526328, 21},
90     {1237455941, 21}, {1090259329, 21}, {1921143210, 22}, {1692621231, 22},
91     {1491281857, 22}, {1313892269, 22}, {1157603482, 22}, {2039810470, 23},
92     {1797172644, 23}, {1583396912, 23}, {1395050052, 23}, {1229107276, 23},
93     {1082903494, 23}, {1082903494, 23}, {1082903494, 23}, {1082903494, 23},
94 };
95
96 /* manually derived from
97  * Table B.5: Selection of quantization levels and codebooks
98  * FIXME: will become invalid when Huffman codes are introduced.
99  */
100 static const int bit_consumption[27] = {
101     -8, 28, 40, 48, 52, 60, 68, 76, 80, 96,
102     112, 128, 144, 160, 176, 192, 208, 224, 240, 256,
103     272, 288, 304, 320, 336, 352, 368,
104 };
105
106 /* Table B.5: Selection of quantization levels and codebooks */
107 static const int quant_levels[27] = {
108     1, 3, 5, 7, 9, 13, 17, 25, 32, 64,
109     128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536,
110     131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608,
111 };
112
113 #endif /* AVCODEC_DCAENC_H */