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 */
28static 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
35static 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
42static 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
47static 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
52static 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
57static const int16_t ts_cb_5[8] = {
58    0xD51B, 0xF12E, 0x042E, 0x13C7, 0x2260, 0x311B, 0x40DE, 0x5385,
59};
60
61static const int16_t ts_cb_6[8] = {
62    0xB550, 0xC825, 0xD980, 0xE997, 0xF883, 0x0752, 0x1811, 0x2E18,
63};
64
65static const int16_t ts_cb_7[8] = {
66    0xCEF0, 0xE4F9, 0xF6BB, 0x0646, 0x14F5, 0x23FF, 0x356F, 0x4A8D,
67};
68
69static const int16_t * const ts_codebook[8] = {
70    ts_cb_0, ts_cb_1, ts_cb_2, ts_cb_3, ts_cb_4, ts_cb_5, ts_cb_6, ts_cb_7
71};
72
73/* table used for decoding pulse positions */
74static const int16_t ts_140[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 */
97static const int16_t ts_230[8] =
98    { 0x7F3B, 0x7E78, 0x7DB6, 0x7CF5, 0x7C35, 0x7B76, 0x7AB8, 0x79FC };
99
100/* two-point filters table */
101static const int16_t ts_240[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 */
134static const int16_t ts_562[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 */
154static const int16_t ts_5E2[8] =
155    { 0x4666, 0x26B8, 0x154C, 0x0BB6, 0x0671, 0x038B, 0x01F3, 0x0112 };
156static const int16_t ts_5F2[8] =
157    { 0x6000, 0x4800, 0x3600, 0x2880, 0x1E60, 0x16C8, 0x1116, 0x0CD1 };
158
159#endif /* AVCODEC_TRUESPEECH_DATA_H */
160