comparison qdm2.c @ 11488:424b8482f316 libavcodec

Allow hard-coding several QDM2 tables (about 32 kB size).
author reimar
date Sun, 14 Mar 2010 19:30:25 +0000
parents 4c7afa50df6f
children 8a4984c5cacc
comparison
equal deleted inserted replaced
11487:62da6bfd50fd 11488:424b8482f316
40 #include "dsputil.h" 40 #include "dsputil.h"
41 #include "fft.h" 41 #include "fft.h"
42 #include "mpegaudio.h" 42 #include "mpegaudio.h"
43 43
44 #include "qdm2data.h" 44 #include "qdm2data.h"
45 #include "qdm2_tablegen.h"
45 46
46 #undef NDEBUG 47 #undef NDEBUG
47 #include <assert.h> 48 #include <assert.h>
48
49
50 #define SOFTCLIP_THRESHOLD 27600
51 #define HARDCLIP_THRESHOLD 35716
52 49
53 50
54 #define QDM2_LIST_ADD(list, size, packet) \ 51 #define QDM2_LIST_ADD(list, size, packet) \
55 do { \ 52 do { \
56 if (size > 0) { \ 53 if (size > 0) { \
211 static VLC vlc_tab_tone_level_idx_mid; 208 static VLC vlc_tab_tone_level_idx_mid;
212 static VLC vlc_tab_tone_level_idx_hi2; 209 static VLC vlc_tab_tone_level_idx_hi2;
213 static VLC vlc_tab_type30; 210 static VLC vlc_tab_type30;
214 static VLC vlc_tab_type34; 211 static VLC vlc_tab_type34;
215 static VLC vlc_tab_fft_tone_offset[5]; 212 static VLC vlc_tab_fft_tone_offset[5];
216
217 static uint16_t softclip_table[HARDCLIP_THRESHOLD - SOFTCLIP_THRESHOLD + 1];
218 static float noise_table[4096];
219 static uint8_t random_dequant_index[256][5];
220 static uint8_t random_dequant_type24[128][3];
221 static float noise_samples[128];
222
223
224 static av_cold void softclip_table_init(void) {
225 int i;
226 double dfl = SOFTCLIP_THRESHOLD - 32767;
227 float delta = 1.0 / -dfl;
228 for (i = 0; i < HARDCLIP_THRESHOLD - SOFTCLIP_THRESHOLD + 1; i++)
229 softclip_table[i] = SOFTCLIP_THRESHOLD - ((int)(sin((float)i * delta) * dfl) & 0x0000FFFF);
230 }
231
232
233 // random generated table
234 static av_cold void rnd_table_init(void) {
235 int i,j;
236 uint32_t ldw,hdw;
237 uint64_t tmp64_1;
238 uint64_t random_seed = 0;
239 float delta = 1.0 / 16384.0;
240 for(i = 0; i < 4096 ;i++) {
241 random_seed = random_seed * 214013 + 2531011;
242 noise_table[i] = (delta * (float)(((int32_t)random_seed >> 16) & 0x00007FFF)- 1.0) * 1.3;
243 }
244
245 for (i = 0; i < 256 ;i++) {
246 random_seed = 81;
247 ldw = i;
248 for (j = 0; j < 5 ;j++) {
249 random_dequant_index[i][j] = (uint8_t)((ldw / random_seed) & 0xFF);
250 ldw = (uint32_t)ldw % (uint32_t)random_seed;
251 tmp64_1 = (random_seed * 0x55555556);
252 hdw = (uint32_t)(tmp64_1 >> 32);
253 random_seed = (uint64_t)(hdw + (ldw >> 31));
254 }
255 }
256 for (i = 0; i < 128 ;i++) {
257 random_seed = 25;
258 ldw = i;
259 for (j = 0; j < 3 ;j++) {
260 random_dequant_type24[i][j] = (uint8_t)((ldw / random_seed) & 0xFF);
261 ldw = (uint32_t)ldw % (uint32_t)random_seed;
262 tmp64_1 = (random_seed * 0x66666667);
263 hdw = (uint32_t)(tmp64_1 >> 33);
264 random_seed = hdw + (ldw >> 31);
265 }
266 }
267 }
268
269
270 static av_cold void init_noise_samples(void) {
271 int i;
272 int random_seed = 0;
273 float delta = 1.0 / 16384.0;
274 for (i = 0; i < 128;i++) {
275 random_seed = random_seed * 214013 + 2531011;
276 noise_samples[i] = (delta * (float)((random_seed >> 16) & 0x00007fff) - 1.0);
277 }
278 }
279 213
280 static const uint16_t qdm2_vlc_offs[] = { 214 static const uint16_t qdm2_vlc_offs[] = {
281 0,260,566,598,894,1166,1230,1294,1678,1950,2214,2278,2310,2570,2834,3124,3448,3838, 215 0,260,566,598,894,1166,1230,1294,1678,1950,2214,2278,2310,2570,2834,3124,3448,3838,
282 }; 216 };
283 217