FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
truespeech_data.h
Go to the documentation of this file.
1 /*
2  * DSP Group TrueSpeech compatible decoder
3  * copyright (c) 2005 Konstantin Shishkov
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_TRUESPEECH_DATA_H
23 #define AVCODEC_TRUESPEECH_DATA_H
24 
25 #include <stdint.h>
26 
27 /* codebooks fo expanding input filter */
28 static const int16_t ts_cb_0[32] = {
29  0x8240, 0x8364, 0x84CE, 0x865D, 0x8805, 0x89DE, 0x8BD7, 0x8DF4,
30  0x9051, 0x92E2, 0x95DE, 0x990F, 0x9C81, 0xA079, 0xA54C, 0xAAD2,
31  0xB18A, 0xB90A, 0xC124, 0xC9CC, 0xD339, 0xDDD3, 0xE9D6, 0xF893,
32  0x096F, 0x1ACA, 0x29EC, 0x381F, 0x45F9, 0x546A, 0x63C3, 0x73B5,
33 };
34 
35 static const int16_t ts_cb_1[32] = {
36  0x9F65, 0xB56B, 0xC583, 0xD371, 0xE018, 0xEBB4, 0xF61C, 0xFF59,
37  0x085B, 0x1106, 0x1952, 0x214A, 0x28C9, 0x2FF8, 0x36E6, 0x3D92,
38  0x43DF, 0x49BB, 0x4F46, 0x5467, 0x5930, 0x5DA3, 0x61EC, 0x65F9,
39  0x69D4, 0x6D5A, 0x709E, 0x73AD, 0x766B, 0x78F0, 0x7B5A, 0x7DA5,
40 };
41 
42 static const int16_t ts_cb_2[16] = {
43  0x96F8, 0xA3B4, 0xAF45, 0xBA53, 0xC4B1, 0xCECC, 0xD86F, 0xE21E,
44  0xEBF3, 0xF640, 0x00F7, 0x0C20, 0x1881, 0x269A, 0x376B, 0x4D60,
45 };
46 
47 static const int16_t ts_cb_3[16] = {
48  0xC654, 0xDEF2, 0xEFAA, 0xFD94, 0x096A, 0x143F, 0x1E7B, 0x282C,
49  0x3176, 0x3A89, 0x439F, 0x4CA2, 0x557F, 0x5E50, 0x6718, 0x6F8D,
50 };
51 
52 static const int16_t ts_cb_4[16] = {
53  0xABE7, 0xBBA8, 0xC81C, 0xD326, 0xDD0E, 0xE5D4, 0xEE22, 0xF618,
54  0xFE28, 0x064F, 0x0EB7, 0x17B8, 0x21AA, 0x2D8B, 0x3BA2, 0x4DF9,
55 };
56 
57 static const int16_t ts_cb_5[8] = {
58  0xD51B, 0xF12E, 0x042E, 0x13C7, 0x2260, 0x311B, 0x40DE, 0x5385,
59 };
60 
61 static const int16_t ts_cb_6[8] = {
62  0xB550, 0xC825, 0xD980, 0xE997, 0xF883, 0x0752, 0x1811, 0x2E18,
63 };
64 
65 static const int16_t ts_cb_7[8] = {
66  0xCEF0, 0xE4F9, 0xF6BB, 0x0646, 0x14F5, 0x23FF, 0x356F, 0x4A8D,
67 };
68 
69 static const int16_t * const ts_codebook[8] = {
71 };
72 
73 /* table used for decoding pulse positions */
74 static const int16_t ts_pulse_values[120] = {
75  0x0E46, 0x0CCC, 0x0B6D, 0x0A28, 0x08FC, 0x07E8, 0x06EB, 0x0604,
76  0x0532, 0x0474, 0x03C9, 0x0330, 0x02A8, 0x0230, 0x01C7, 0x016C,
77  0x011E, 0x00DC, 0x00A5, 0x0078, 0x0054, 0x0038, 0x0023, 0x0014,
78  0x000A, 0x0004, 0x0001, 0x0000, 0x0000, 0x0000,
79 
80  0x0196, 0x017A, 0x015F, 0x0145, 0x012C, 0x0114, 0x00FD, 0x00E7,
81  0x00D2, 0x00BE, 0x00AB, 0x0099, 0x0088, 0x0078, 0x0069, 0x005B,
82  0x004E, 0x0042, 0x0037, 0x002D, 0x0024, 0x001C, 0x0015, 0x000F,
83  0x000A, 0x0006, 0x0003, 0x0001, 0x0000, 0x0000,
84 
85  0x001D, 0x001C, 0x001B, 0x001A, 0x0019, 0x0018, 0x0017, 0x0016,
86  0x0015, 0x0014, 0x0013, 0x0012, 0x0011, 0x0010, 0x000F, 0x000E,
87  0x000D, 0x000C, 0x000B, 0x000A, 0x0009, 0x0008, 0x0007, 0x0006,
88  0x0005, 0x0004, 0x0003, 0x0002, 0x0001, 0x0000,
89 
90  0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
91  0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
92  0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
93  0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001
94 };
95 
96 /* filter for correlated input filter */
97 static const int16_t ts_decay_994_1000[8] =
98  { 0x7F3B, 0x7E78, 0x7DB6, 0x7CF5, 0x7C35, 0x7B76, 0x7AB8, 0x79FC };
99 
100 /* two-point filters table */
101 static const int16_t ts_order2_coeffs[25 * 2] = {
102  0xED2F, 0x5239,
103  0x54F1, 0xE4A9,
104  0x2620, 0xEE3E,
105  0x09D6, 0x2C40,
106  0xEFB5, 0x2BE0,
107 
108  0x3FE1, 0x3339,
109  0x442F, 0xE6FE,
110  0x4458, 0xF9DF,
111  0xF231, 0x43DB,
112  0x3DB0, 0xF705,
113 
114  0x4F7B, 0xFEFB,
115  0x26AD, 0x0CDC,
116  0x33C2, 0x0739,
117  0x12BE, 0x43A2,
118  0x1BDF, 0x1F3E,
119 
120  0x0211, 0x0796,
121  0x2AEB, 0x163F,
122  0x050D, 0x3A38,
123  0x0D1E, 0x0D78,
124  0x150F, 0x3346,
125 
126  0x38A4, 0x0B7D,
127  0x2D5D, 0x1FDF,
128  0x19B7, 0x2822,
129  0x0D99, 0x1F12,
130  0x194C, 0x0CE6
131 };
132 
133 /* possible pulse values */
134 static const int16_t ts_pulse_scales[64] = {
135  0x0002, 0x0006, 0xFFFE, 0xFFFA,
136  0x0004, 0x000C, 0xFFFC, 0xFFF4,
137  0x0006, 0x0012, 0xFFFA, 0xFFEE,
138  0x000A, 0x001E, 0xFFF6, 0xFFE2,
139  0x0010, 0x0030, 0xFFF0, 0xFFD0,
140  0x0019, 0x004B, 0xFFE7, 0xFFB5,
141  0x0028, 0x0078, 0xFFD8, 0xFF88,
142  0x0040, 0x00C0, 0xFFC0, 0xFF40,
143  0x0065, 0x012F, 0xFF9B, 0xFED1,
144  0x00A1, 0x01E3, 0xFF5F, 0xFE1D,
145  0x0100, 0x0300, 0xFF00, 0xFD00,
146  0x0196, 0x04C2, 0xFE6A, 0xFB3E,
147  0x0285, 0x078F, 0xFD7B, 0xF871,
148  0x0400, 0x0C00, 0xFC00, 0xF400,
149  0x0659, 0x130B, 0xF9A7, 0xECF5,
150  0x0A14, 0x1E3C, 0xF5EC, 0xE1C4
151 };
152 
153 /* filters used in final output calculations */
154 static const int16_t ts_decay_35_64[8] =
155  { 0x4666, 0x26B8, 0x154C, 0x0BB6, 0x0671, 0x038B, 0x01F3, 0x0112 };
156 static const int16_t ts_decay_3_4[8] =
157  { 0x6000, 0x4800, 0x3600, 0x2880, 0x1E60, 0x16C8, 0x1116, 0x0CD1 };
158 
159 #endif /* AVCODEC_TRUESPEECH_DATA_H */