58 static u16 *table_dec;
62 static u8 alaw_to_ulaw[256] =
64 0xab, 0x2b, 0xe3, 0x63, 0x8b, 0x0b, 0xc9, 0x49,
65 0xba, 0x3a, 0xf6, 0x76, 0x9b, 0x1b, 0xd7, 0x57,
66 0xa3, 0x23, 0xdd, 0x5d, 0x83, 0x03, 0xc1, 0x41,
67 0xb2, 0x32, 0xeb, 0x6b, 0x93, 0x13, 0xcf, 0x4f,
68 0xaf, 0x2f, 0xe7, 0x67, 0x8f, 0x0f, 0xcd, 0x4d,
69 0xbe, 0x3e, 0xfe, 0x7e, 0x9f, 0x1f, 0xdb, 0x5b,
70 0xa7, 0x27, 0xdf, 0x5f, 0x87, 0x07, 0xc5, 0x45,
71 0xb6, 0x36, 0xef, 0x6f, 0x97, 0x17, 0xd3, 0x53,
72 0xa9, 0x29, 0xe1, 0x61, 0x89, 0x09, 0xc7, 0x47,
73 0xb8, 0x38, 0xf2, 0x72, 0x99, 0x19, 0xd5, 0x55,
74 0xa1, 0x21, 0xdc, 0x5c, 0x81, 0x01, 0xbf, 0x3f,
75 0xb0, 0x30, 0xe9, 0x69, 0x91, 0x11, 0xce, 0x4e,
76 0xad, 0x2d, 0xe5, 0x65, 0x8d, 0x0d, 0xcb, 0x4b,
77 0xbc, 0x3c, 0xfa, 0x7a, 0x9d, 0x1d, 0xd9, 0x59,
78 0xa5, 0x25, 0xde, 0x5e, 0x85, 0x05, 0xc3, 0x43,
79 0xb4, 0x34, 0xed, 0x6d, 0x95, 0x15, 0xd1, 0x51,
80 0xac, 0x2c, 0xe4, 0x64, 0x8c, 0x0c, 0xca, 0x4a,
81 0xbb, 0x3b, 0xf8, 0x78, 0x9c, 0x1c, 0xd8, 0x58,
82 0xa4, 0x24, 0xde, 0x5e, 0x84, 0x04, 0xc2, 0x42,
83 0xb3, 0x33, 0xec, 0x6c, 0x94, 0x14, 0xd0, 0x50,
84 0xb0, 0x30, 0xe8, 0x68, 0x90, 0x10, 0xce, 0x4e,
85 0xbf, 0x3f, 0xfe, 0x7e, 0xa0, 0x20, 0xdc, 0x5c,
86 0xa8, 0x28, 0xe0, 0x60, 0x88, 0x08, 0xc6, 0x46,
87 0xb7, 0x37, 0xf0, 0x70, 0x98, 0x18, 0xd4, 0x54,
88 0xaa, 0x2a, 0xe2, 0x62, 0x8a, 0x0a, 0xc8, 0x48,
89 0xb9, 0x39, 0xf4, 0x74, 0x9a, 0x1a, 0xd6, 0x56,
90 0xa2, 0x22, 0xdd, 0x5d, 0x82, 0x02, 0xc0, 0x40,
91 0xb1, 0x31, 0xea, 0x6a, 0x92, 0x12, 0xcf, 0x4f,
92 0xae, 0x2e, 0xe6, 0x66, 0x8e, 0x0e, 0xcc, 0x4c,
93 0xbd, 0x3d, 0xfc, 0x7c, 0x9e, 0x1e, 0xda, 0x5a,
94 0xa6, 0x26, 0xdf, 0x5f, 0x86, 0x06, 0xc4, 0x44,
95 0xb5, 0x35, 0xee, 0x6e, 0x96, 0x16, 0xd2, 0x52
99 static u8 ulaw_to_alaw[256] =
101 0xab, 0x55, 0xd5, 0x15, 0x95, 0x75, 0xf5, 0x35,
102 0xb5, 0x45, 0xc5, 0x05, 0x85, 0x65, 0xe5, 0x25,
103 0xa5, 0x5d, 0xdd, 0x1d, 0x9d, 0x7d, 0xfd, 0x3d,
104 0xbd, 0x4d, 0xcd, 0x0d, 0x8d, 0x6d, 0xed, 0x2d,
105 0xad, 0x51, 0xd1, 0x11, 0x91, 0x71, 0xf1, 0x31,
106 0xb1, 0x41, 0xc1, 0x01, 0x81, 0x61, 0xe1, 0x21,
107 0x59, 0xd9, 0x19, 0x99, 0x79, 0xf9, 0x39, 0xb9,
108 0x49, 0xc9, 0x09, 0x89, 0x69, 0xe9, 0x29, 0xa9,
109 0xd7, 0x17, 0x97, 0x77, 0xf7, 0x37, 0xb7, 0x47,
110 0xc7, 0x07, 0x87, 0x67, 0xe7, 0x27, 0xa7, 0xdf,
111 0x9f, 0x7f, 0xff, 0x3f, 0xbf, 0x4f, 0xcf, 0x0f,
112 0x8f, 0x6f, 0xef, 0x2f, 0x53, 0x13, 0x73, 0x33,
113 0xb3, 0x43, 0xc3, 0x03, 0x83, 0x63, 0xe3, 0x23,
114 0xa3, 0x5b, 0xdb, 0x1b, 0x9b, 0x7b, 0xfb, 0x3b,
115 0xbb, 0xbb, 0x4b, 0x4b, 0xcb, 0xcb, 0x0b, 0x0b,
116 0x8b, 0x8b, 0x6b, 0x6b, 0xeb, 0xeb, 0x2b, 0x2b,
117 0xab, 0x54, 0xd4, 0x14, 0x94, 0x74, 0xf4, 0x34,
118 0xb4, 0x44, 0xc4, 0x04, 0x84, 0x64, 0xe4, 0x24,
119 0xa4, 0x5c, 0xdc, 0x1c, 0x9c, 0x7c, 0xfc, 0x3c,
120 0xbc, 0x4c, 0xcc, 0x0c, 0x8c, 0x6c, 0xec, 0x2c,
121 0xac, 0x50, 0xd0, 0x10, 0x90, 0x70, 0xf0, 0x30,
122 0xb0, 0x40, 0xc0, 0x00, 0x80, 0x60, 0xe0, 0x20,
123 0x58, 0xd8, 0x18, 0x98, 0x78, 0xf8, 0x38, 0xb8,
124 0x48, 0xc8, 0x08, 0x88, 0x68, 0xe8, 0x28, 0xa8,
125 0xd6, 0x16, 0x96, 0x76, 0xf6, 0x36, 0xb6, 0x46,
126 0xc6, 0x06, 0x86, 0x66, 0xe6, 0x26, 0xa6, 0xde,
127 0x9e, 0x7e, 0xfe, 0x3e, 0xbe, 0x4e, 0xce, 0x0e,
128 0x8e, 0x6e, 0xee, 0x2e, 0x52, 0x12, 0x72, 0x32,
129 0xb2, 0x42, 0xc2, 0x02, 0x82, 0x62, 0xe2, 0x22,
130 0xa2, 0x5a, 0xda, 0x1a, 0x9a, 0x7a, 0xfa, 0x3a,
131 0xba, 0xba, 0x4a, 0x4a, 0xca, 0xca, 0x0a, 0x0a,
132 0x8a, 0x8a, 0x6a, 0x6a, 0xea, 0xea, 0x2a, 0x2a
136 static u8 alaw_to_4bit[256] = {
137 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
138 0x0d, 0x02, 0x08, 0x07, 0x0f, 0x00, 0x0b, 0x04,
139 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
140 0x0d, 0x02, 0x09, 0x06, 0x0f, 0x00, 0x0b, 0x04,
141 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
142 0x0d, 0x02, 0x08, 0x07, 0x0f, 0x00, 0x0b, 0x04,
143 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
144 0x0d, 0x02, 0x09, 0x06, 0x0f, 0x00, 0x0b, 0x04,
145 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
146 0x0d, 0x02, 0x08, 0x07, 0x0f, 0x00, 0x0b, 0x04,
147 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0d, 0x02,
148 0x0e, 0x02, 0x09, 0x06, 0x0f, 0x00, 0x0b, 0x04,
149 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
150 0x0d, 0x02, 0x08, 0x07, 0x0f, 0x00, 0x0b, 0x04,
151 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
152 0x0d, 0x02, 0x09, 0x06, 0x0f, 0x00, 0x0b, 0x04,
153 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
154 0x0d, 0x02, 0x08, 0x07, 0x0f, 0x00, 0x0b, 0x04,
155 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
156 0x0d, 0x02, 0x09, 0x06, 0x0f, 0x00, 0x0b, 0x04,
157 0x0e, 0x02, 0x09, 0x06, 0x0f, 0x00, 0x0b, 0x04,
158 0x0d, 0x02, 0x08, 0x07, 0x0f, 0x01, 0x0a, 0x05,
159 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
160 0x0d, 0x02, 0x09, 0x07, 0x0f, 0x00, 0x0b, 0x04,
161 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
162 0x0d, 0x02, 0x08, 0x07, 0x0f, 0x00, 0x0b, 0x04,
163 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
164 0x0d, 0x02, 0x09, 0x06, 0x0f, 0x00, 0x0b, 0x04,
165 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
166 0x0d, 0x02, 0x08, 0x07, 0x0f, 0x00, 0x0b, 0x04,
167 0x0e, 0x01, 0x0a, 0x05, 0x0f, 0x00, 0x0c, 0x03,
168 0x0d, 0x02, 0x09, 0x06, 0x0f, 0x00, 0x0b, 0x04,
172 static u8 _4bit_to_alaw[16] = {
173 0x5d, 0x51, 0xd9, 0xd7, 0x5f, 0x53, 0xa3, 0x4b,
174 0x2a, 0x3a, 0x22, 0x2e, 0x26, 0x56, 0x20, 0x2c,
178 static u8 ulaw_to_4bit[256] = {
179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
184 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
185 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
186 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
187 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
188 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04,
189 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
190 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05,
191 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
192 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
193 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
194 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08,
195 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
196 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
197 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
198 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
199 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
200 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
201 0x0e, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d,
202 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d,
203 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
204 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0b, 0x0b,
205 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
206 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a,
207 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
208 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
209 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
210 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
214 static u8 _4bit_to_ulaw[16] = {
215 0x11, 0x21, 0x31, 0x40, 0x4e, 0x5c, 0x68, 0x71,
216 0xfe, 0xef, 0xe7, 0xdb, 0xcd, 0xbf, 0xaf, 0x9f,
228 int ii,
i = 0, o = 0;
235 *result++ = table_com[(((*state) << 8) & 0xff00) | (*data++)];
243 *result++ = table_com[(data[0]<<8) | (data[1])];
251 *state = 0x100 + *
data;
269 r = table_dec[*data++];
288 *result++ = alaw_to_ulaw[*data++];
301 *result++ = ulaw_to_alaw[*data++];
335 if (!table_com || !table_dec) {
343 c = ulaw_to_4bit[i1];
345 c = alaw_to_4bit[i1];
348 table_com[(i1 << 8) | i2] |= (c << 4);
349 table_com[(i2 << 8) | i1] |= c;
359 sample = _4bit_to_ulaw[i1];
361 sample = _4bit_to_alaw[i1];
364 table_dec[(i1 << 4) | i2] |= (sample << 8);
365 table_dec[(i2 << 4) | i1] |= sample;