qdm2: use init_static_data
[ffmpeg.git] / libavcodec / qdm2.c
1 /*
2  * QDM2 compatible decoder
3  * Copyright (c) 2003 Ewald Snel
4  * Copyright (c) 2005 Benjamin Larsson
5  * Copyright (c) 2005 Alex Beregszaszi
6  * Copyright (c) 2005 Roberto Togni
7  *
8  * This file is part of Libav.
9  *
10  * Libav is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * Libav is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with Libav; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  */
24
25 /**
26  * @file
27  * QDM2 decoder
28  * @author Ewald Snel, Benjamin Larsson, Alex Beregszaszi, Roberto Togni
29  *
30  * The decoder is not perfect yet, there are still some distortions
31  * especially on files encoded with 16 or 8 subbands.
32  */
33
34 #include <math.h>
35 #include <stddef.h>
36 #include <stdio.h>
37
38 #define BITSTREAM_READER_LE
39 #include "libavutil/channel_layout.h"
40 #include "avcodec.h"
41 #include "get_bits.h"
42 #include "internal.h"
43 #include "rdft.h"
44 #include "mpegaudiodsp.h"
45 #include "mpegaudio.h"
46
47 #include "qdm2data.h"
48 #include "qdm2_tablegen.h"
49
50 #undef NDEBUG
51 #include <assert.h>
52
53
54 #define QDM2_LIST_ADD(list, size, packet) \
55 do { \
56       if (size > 0) { \
57     list[size - 1].next = &list[size]; \
58       } \
59       list[size].packet = packet; \
60       list[size].next = NULL; \
61       size++; \
62 } while(0)
63
64 // Result is 8, 16 or 30
65 #define QDM2_SB_USED(sub_sampling) (((sub_sampling) >= 2) ? 30 : 8 << (sub_sampling))
66
67 #define FIX_NOISE_IDX(noise_idx) \
68   if ((noise_idx) >= 3840) \
69     (noise_idx) -= 3840; \
70
71 #define SB_DITHERING_NOISE(sb,noise_idx) (noise_table[(noise_idx)++] * sb_noise_attenuation[(sb)])
72
73 #define SAMPLES_NEEDED \
74      av_log (NULL,AV_LOG_INFO,"This file triggers some untested code. Please contact the developers.\n");
75
76 #define SAMPLES_NEEDED_2(why) \
77      av_log (NULL,AV_LOG_INFO,"This file triggers some missing code. Please contact the developers.\nPosition: %s\n",why);
78
79 #define QDM2_MAX_FRAME_SIZE 512
80
81 typedef int8_t sb_int8_array[2][30][64];
82
83 /**
84  * Subpacket
85  */
86 typedef struct {
87     int type;            ///< subpacket type
88     unsigned int size;   ///< subpacket size
89     const uint8_t *data; ///< pointer to subpacket data (points to input data buffer, it's not a private copy)
90 } QDM2SubPacket;
91
92 /**
93  * A node in the subpacket list
94  */
95 typedef struct QDM2SubPNode {
96     QDM2SubPacket *packet;      ///< packet
97     struct QDM2SubPNode *next; ///< pointer to next packet in the list, NULL if leaf node
98 } QDM2SubPNode;
99
100 typedef struct {
101     float re;
102     float im;
103 } QDM2Complex;
104
105 typedef struct {
106     float level;
107     QDM2Complex *complex;
108     const float *table;
109     int   phase;
110     int   phase_shift;
111     int   duration;
112     short time_index;
113     short cutoff;
114 } FFTTone;
115
116 typedef struct {
117     int16_t sub_packet;
118     uint8_t channel;
119     int16_t offset;
120     int16_t exp;
121     uint8_t phase;
122 } FFTCoefficient;
123
124 typedef struct {
125     DECLARE_ALIGNED(32, QDM2Complex, complex)[MPA_MAX_CHANNELS][256];
126 } QDM2FFT;
127
128 /**
129  * QDM2 decoder context
130  */
131 typedef struct {
132     /// Parameters from codec header, do not change during playback
133     int nb_channels;         ///< number of channels
134     int channels;            ///< number of channels
135     int group_size;          ///< size of frame group (16 frames per group)
136     int fft_size;            ///< size of FFT, in complex numbers
137     int checksum_size;       ///< size of data block, used also for checksum
138
139     /// Parameters built from header parameters, do not change during playback
140     int group_order;         ///< order of frame group
141     int fft_order;           ///< order of FFT (actually fftorder+1)
142     int frame_size;          ///< size of data frame
143     int frequency_range;
144     int sub_sampling;        ///< subsampling: 0=25%, 1=50%, 2=100% */
145     int coeff_per_sb_select; ///< selector for "num. of coeffs. per subband" tables. Can be 0, 1, 2
146     int cm_table_select;     ///< selector for "coding method" tables. Can be 0, 1 (from init: 0-4)
147
148     /// Packets and packet lists
149     QDM2SubPacket sub_packets[16];      ///< the packets themselves
150     QDM2SubPNode sub_packet_list_A[16]; ///< list of all packets
151     QDM2SubPNode sub_packet_list_B[16]; ///< FFT packets B are on list
152     int sub_packets_B;                  ///< number of packets on 'B' list
153     QDM2SubPNode sub_packet_list_C[16]; ///< packets with errors?
154     QDM2SubPNode sub_packet_list_D[16]; ///< DCT packets
155
156     /// FFT and tones
157     FFTTone fft_tones[1000];
158     int fft_tone_start;
159     int fft_tone_end;
160     FFTCoefficient fft_coefs[1000];
161     int fft_coefs_index;
162     int fft_coefs_min_index[5];
163     int fft_coefs_max_index[5];
164     int fft_level_exp[6];
165     RDFTContext rdft_ctx;
166     QDM2FFT fft;
167
168     /// I/O data
169     const uint8_t *compressed_data;
170     int compressed_size;
171     float output_buffer[QDM2_MAX_FRAME_SIZE * 2];
172
173     /// Synthesis filter
174     MPADSPContext mpadsp;
175     DECLARE_ALIGNED(32, float, synth_buf)[MPA_MAX_CHANNELS][512*2];
176     int synth_buf_offset[MPA_MAX_CHANNELS];
177     DECLARE_ALIGNED(32, float, sb_samples)[MPA_MAX_CHANNELS][128][SBLIMIT];
178     DECLARE_ALIGNED(32, float, samples)[MPA_MAX_CHANNELS * MPA_FRAME_SIZE];
179
180     /// Mixed temporary data used in decoding
181     float tone_level[MPA_MAX_CHANNELS][30][64];
182     int8_t coding_method[MPA_MAX_CHANNELS][30][64];
183     int8_t quantized_coeffs[MPA_MAX_CHANNELS][10][8];
184     int8_t tone_level_idx_base[MPA_MAX_CHANNELS][30][8];
185     int8_t tone_level_idx_hi1[MPA_MAX_CHANNELS][3][8][8];
186     int8_t tone_level_idx_mid[MPA_MAX_CHANNELS][26][8];
187     int8_t tone_level_idx_hi2[MPA_MAX_CHANNELS][26];
188     int8_t tone_level_idx[MPA_MAX_CHANNELS][30][64];
189     int8_t tone_level_idx_temp[MPA_MAX_CHANNELS][30][64];
190
191     // Flags
192     int has_errors;         ///< packet has errors
193     int superblocktype_2_3; ///< select fft tables and some algorithm based on superblock type
194     int do_synth_filter;    ///< used to perform or skip synthesis filter
195
196     int sub_packet;
197     int noise_idx; ///< index for dithering noise table
198 } QDM2Context;
199
200
201 static VLC vlc_tab_level;
202 static VLC vlc_tab_diff;
203 static VLC vlc_tab_run;
204 static VLC fft_level_exp_alt_vlc;
205 static VLC fft_level_exp_vlc;
206 static VLC fft_stereo_exp_vlc;
207 static VLC fft_stereo_phase_vlc;
208 static VLC vlc_tab_tone_level_idx_hi1;
209 static VLC vlc_tab_tone_level_idx_mid;
210 static VLC vlc_tab_tone_level_idx_hi2;
211 static VLC vlc_tab_type30;
212 static VLC vlc_tab_type34;
213 static VLC vlc_tab_fft_tone_offset[5];
214
215 static const uint16_t qdm2_vlc_offs[] = {
216     0,260,566,598,894,1166,1230,1294,1678,1950,2214,2278,2310,2570,2834,3124,3448,3838,
217 };
218
219 static av_cold void qdm2_init_vlc(void)
220 {
221     static VLC_TYPE qdm2_table[3838][2];
222
223     vlc_tab_level.table           = &qdm2_table[qdm2_vlc_offs[0]];
224     vlc_tab_level.table_allocated = qdm2_vlc_offs[1] - qdm2_vlc_offs[0];
225     init_vlc(&vlc_tab_level, 8, 24,
226              vlc_tab_level_huffbits, 1, 1,
227              vlc_tab_level_huffcodes, 2, 2,
228              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
229
230     vlc_tab_diff.table           = &qdm2_table[qdm2_vlc_offs[1]];
231     vlc_tab_diff.table_allocated = qdm2_vlc_offs[2] - qdm2_vlc_offs[1];
232     init_vlc(&vlc_tab_diff, 8, 37,
233              vlc_tab_diff_huffbits, 1, 1,
234              vlc_tab_diff_huffcodes, 2, 2,
235              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
236
237     vlc_tab_run.table           = &qdm2_table[qdm2_vlc_offs[2]];
238     vlc_tab_run.table_allocated = qdm2_vlc_offs[3] - qdm2_vlc_offs[2];
239     init_vlc(&vlc_tab_run, 5, 6,
240              vlc_tab_run_huffbits, 1, 1,
241              vlc_tab_run_huffcodes, 1, 1,
242              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
243
244     fft_level_exp_alt_vlc.table           = &qdm2_table[qdm2_vlc_offs[3]];
245     fft_level_exp_alt_vlc.table_allocated = qdm2_vlc_offs[4] -
246                                             qdm2_vlc_offs[3];
247     init_vlc(&fft_level_exp_alt_vlc, 8, 28,
248              fft_level_exp_alt_huffbits, 1, 1,
249              fft_level_exp_alt_huffcodes, 2, 2,
250              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
251
252     fft_level_exp_vlc.table           = &qdm2_table[qdm2_vlc_offs[4]];
253     fft_level_exp_vlc.table_allocated = qdm2_vlc_offs[5] - qdm2_vlc_offs[4];
254     init_vlc(&fft_level_exp_vlc, 8, 20,
255              fft_level_exp_huffbits, 1, 1,
256              fft_level_exp_huffcodes, 2, 2,
257              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
258
259     fft_stereo_exp_vlc.table           = &qdm2_table[qdm2_vlc_offs[5]];
260     fft_stereo_exp_vlc.table_allocated = qdm2_vlc_offs[6] -
261                                          qdm2_vlc_offs[5];
262     init_vlc(&fft_stereo_exp_vlc, 6, 7,
263              fft_stereo_exp_huffbits, 1, 1,
264              fft_stereo_exp_huffcodes, 1, 1,
265              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
266
267     fft_stereo_phase_vlc.table           = &qdm2_table[qdm2_vlc_offs[6]];
268     fft_stereo_phase_vlc.table_allocated = qdm2_vlc_offs[7] -
269                                            qdm2_vlc_offs[6];
270     init_vlc(&fft_stereo_phase_vlc, 6, 9,
271              fft_stereo_phase_huffbits, 1, 1,
272              fft_stereo_phase_huffcodes, 1, 1,
273              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
274
275     vlc_tab_tone_level_idx_hi1.table =
276         &qdm2_table[qdm2_vlc_offs[7]];
277     vlc_tab_tone_level_idx_hi1.table_allocated = qdm2_vlc_offs[8] -
278                                                  qdm2_vlc_offs[7];
279     init_vlc(&vlc_tab_tone_level_idx_hi1, 8, 20,
280              vlc_tab_tone_level_idx_hi1_huffbits, 1, 1,
281              vlc_tab_tone_level_idx_hi1_huffcodes, 2, 2,
282              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
283
284     vlc_tab_tone_level_idx_mid.table =
285         &qdm2_table[qdm2_vlc_offs[8]];
286     vlc_tab_tone_level_idx_mid.table_allocated = qdm2_vlc_offs[9] -
287                                                  qdm2_vlc_offs[8];
288     init_vlc(&vlc_tab_tone_level_idx_mid, 8, 24,
289              vlc_tab_tone_level_idx_mid_huffbits, 1, 1,
290              vlc_tab_tone_level_idx_mid_huffcodes, 2, 2,
291              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
292
293     vlc_tab_tone_level_idx_hi2.table =
294         &qdm2_table[qdm2_vlc_offs[9]];
295     vlc_tab_tone_level_idx_hi2.table_allocated = qdm2_vlc_offs[10] -
296                                                  qdm2_vlc_offs[9];
297     init_vlc(&vlc_tab_tone_level_idx_hi2, 8, 24,
298              vlc_tab_tone_level_idx_hi2_huffbits, 1, 1,
299              vlc_tab_tone_level_idx_hi2_huffcodes, 2, 2,
300              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
301
302     vlc_tab_type30.table           = &qdm2_table[qdm2_vlc_offs[10]];
303     vlc_tab_type30.table_allocated = qdm2_vlc_offs[11] - qdm2_vlc_offs[10];
304     init_vlc(&vlc_tab_type30, 6, 9,
305              vlc_tab_type30_huffbits, 1, 1,
306              vlc_tab_type30_huffcodes, 1, 1,
307              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
308
309     vlc_tab_type34.table           = &qdm2_table[qdm2_vlc_offs[11]];
310     vlc_tab_type34.table_allocated = qdm2_vlc_offs[12] - qdm2_vlc_offs[11];
311     init_vlc(&vlc_tab_type34, 5, 10,
312              vlc_tab_type34_huffbits, 1, 1,
313              vlc_tab_type34_huffcodes, 1, 1,
314              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
315
316     vlc_tab_fft_tone_offset[0].table =
317         &qdm2_table[qdm2_vlc_offs[12]];
318     vlc_tab_fft_tone_offset[0].table_allocated = qdm2_vlc_offs[13] -
319                                                  qdm2_vlc_offs[12];
320     init_vlc(&vlc_tab_fft_tone_offset[0], 8, 23,
321              vlc_tab_fft_tone_offset_0_huffbits, 1, 1,
322              vlc_tab_fft_tone_offset_0_huffcodes, 2, 2,
323              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
324
325     vlc_tab_fft_tone_offset[1].table =
326         &qdm2_table[qdm2_vlc_offs[13]];
327     vlc_tab_fft_tone_offset[1].table_allocated = qdm2_vlc_offs[14] -
328                                                  qdm2_vlc_offs[13];
329     init_vlc(&vlc_tab_fft_tone_offset[1], 8, 28,
330              vlc_tab_fft_tone_offset_1_huffbits, 1, 1,
331              vlc_tab_fft_tone_offset_1_huffcodes, 2, 2,
332              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
333
334     vlc_tab_fft_tone_offset[2].table =
335         &qdm2_table[qdm2_vlc_offs[14]];
336     vlc_tab_fft_tone_offset[2].table_allocated = qdm2_vlc_offs[15] -
337                                                  qdm2_vlc_offs[14];
338     init_vlc(&vlc_tab_fft_tone_offset[2], 8, 32,
339              vlc_tab_fft_tone_offset_2_huffbits, 1, 1,
340              vlc_tab_fft_tone_offset_2_huffcodes, 2, 2,
341              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
342
343     vlc_tab_fft_tone_offset[3].table =
344         &qdm2_table[qdm2_vlc_offs[15]];
345     vlc_tab_fft_tone_offset[3].table_allocated = qdm2_vlc_offs[16] -
346                                                  qdm2_vlc_offs[15];
347     init_vlc(&vlc_tab_fft_tone_offset[3], 8, 35,
348              vlc_tab_fft_tone_offset_3_huffbits, 1, 1,
349              vlc_tab_fft_tone_offset_3_huffcodes, 2, 2,
350              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
351
352     vlc_tab_fft_tone_offset[4].table =
353         &qdm2_table[qdm2_vlc_offs[16]];
354     vlc_tab_fft_tone_offset[4].table_allocated = qdm2_vlc_offs[17] -
355                                                  qdm2_vlc_offs[16];
356     init_vlc(&vlc_tab_fft_tone_offset[4], 8, 38,
357              vlc_tab_fft_tone_offset_4_huffbits, 1, 1,
358              vlc_tab_fft_tone_offset_4_huffcodes, 2, 2,
359              INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
360 }
361
362 static int qdm2_get_vlc (GetBitContext *gb, VLC *vlc, int flag, int depth)
363 {
364     int value;
365
366     value = get_vlc2(gb, vlc->table, vlc->bits, depth);
367
368     /* stage-2, 3 bits exponent escape sequence */
369     if (value-- == 0)
370         value = get_bits (gb, get_bits (gb, 3) + 1);
371
372     /* stage-3, optional */
373     if (flag) {
374         int tmp = vlc_stage3_values[value];
375
376         if ((value & ~3) > 0)
377             tmp += get_bits (gb, (value >> 2));
378         value = tmp;
379     }
380
381     return value;
382 }
383
384
385 static int qdm2_get_se_vlc (VLC *vlc, GetBitContext *gb, int depth)
386 {
387     int value = qdm2_get_vlc (gb, vlc, 0, depth);
388
389     return (value & 1) ? ((value + 1) >> 1) : -(value >> 1);
390 }
391
392
393 /**
394  * QDM2 checksum
395  *
396  * @param data      pointer to data to be checksum'ed
397  * @param length    data length
398  * @param value     checksum value
399  *
400  * @return          0 if checksum is OK
401  */
402 static uint16_t qdm2_packet_checksum (const uint8_t *data, int length, int value) {
403     int i;
404
405     for (i=0; i < length; i++)
406         value -= data[i];
407
408     return (uint16_t)(value & 0xffff);
409 }
410
411
412 /**
413  * Fill a QDM2SubPacket structure with packet type, size, and data pointer.
414  *
415  * @param gb            bitreader context
416  * @param sub_packet    packet under analysis
417  */
418 static void qdm2_decode_sub_packet_header (GetBitContext *gb, QDM2SubPacket *sub_packet)
419 {
420     sub_packet->type = get_bits (gb, 8);
421
422     if (sub_packet->type == 0) {
423         sub_packet->size = 0;
424         sub_packet->data = NULL;
425     } else {
426         sub_packet->size = get_bits (gb, 8);
427
428       if (sub_packet->type & 0x80) {
429           sub_packet->size <<= 8;
430           sub_packet->size  |= get_bits (gb, 8);
431           sub_packet->type  &= 0x7f;
432       }
433
434       if (sub_packet->type == 0x7f)
435           sub_packet->type |= (get_bits (gb, 8) << 8);
436
437       sub_packet->data = &gb->buffer[get_bits_count(gb) / 8]; // FIXME: this depends on bitreader internal data
438     }
439
440     av_log(NULL,AV_LOG_DEBUG,"Subpacket: type=%d size=%d start_offs=%x\n",
441         sub_packet->type, sub_packet->size, get_bits_count(gb) / 8);
442 }
443
444
445 /**
446  * Return node pointer to first packet of requested type in list.
447  *
448  * @param list    list of subpackets to be scanned
449  * @param type    type of searched subpacket
450  * @return        node pointer for subpacket if found, else NULL
451  */
452 static QDM2SubPNode* qdm2_search_subpacket_type_in_list (QDM2SubPNode *list, int type)
453 {
454     while (list != NULL && list->packet != NULL) {
455         if (list->packet->type == type)
456             return list;
457         list = list->next;
458     }
459     return NULL;
460 }
461
462
463 /**
464  * Replace 8 elements with their average value.
465  * Called by qdm2_decode_superblock before starting subblock decoding.
466  *
467  * @param q       context
468  */
469 static void average_quantized_coeffs (QDM2Context *q)
470 {
471     int i, j, n, ch, sum;
472
473     n = coeff_per_sb_for_avg[q->coeff_per_sb_select][QDM2_SB_USED(q->sub_sampling) - 1] + 1;
474
475     for (ch = 0; ch < q->nb_channels; ch++)
476         for (i = 0; i < n; i++) {
477             sum = 0;
478
479             for (j = 0; j < 8; j++)
480                 sum += q->quantized_coeffs[ch][i][j];
481
482             sum /= 8;
483             if (sum > 0)
484                 sum--;
485
486             for (j=0; j < 8; j++)
487                 q->quantized_coeffs[ch][i][j] = sum;
488         }
489 }
490
491
492 /**
493  * Build subband samples with noise weighted by q->tone_level.
494  * Called by synthfilt_build_sb_samples.
495  *
496  * @param q     context
497  * @param sb    subband index
498  */
499 static void build_sb_samples_from_noise (QDM2Context *q, int sb)
500 {
501     int ch, j;
502
503     FIX_NOISE_IDX(q->noise_idx);
504
505     if (!q->nb_channels)
506         return;
507
508     for (ch = 0; ch < q->nb_channels; ch++)
509         for (j = 0; j < 64; j++) {
510             q->sb_samples[ch][j * 2][sb] = SB_DITHERING_NOISE(sb,q->noise_idx) * q->tone_level[ch][sb][j];
511             q->sb_samples[ch][j * 2 + 1][sb] = SB_DITHERING_NOISE(sb,q->noise_idx) * q->tone_level[ch][sb][j];
512         }
513 }
514
515
516 /**
517  * Called while processing data from subpackets 11 and 12.
518  * Used after making changes to coding_method array.
519  *
520  * @param sb               subband index
521  * @param channels         number of channels
522  * @param coding_method    q->coding_method[0][0][0]
523  */
524 static void fix_coding_method_array (int sb, int channels, sb_int8_array coding_method)
525 {
526     int j,k;
527     int ch;
528     int run, case_val;
529     static const int switchtable[23] = {0,5,1,5,5,5,5,5,2,5,5,5,5,5,5,5,3,5,5,5,5,5,4};
530
531     for (ch = 0; ch < channels; ch++) {
532         for (j = 0; j < 64; ) {
533             if((coding_method[ch][sb][j] - 8) > 22) {
534                 run = 1;
535                 case_val = 8;
536             } else {
537                 switch (switchtable[coding_method[ch][sb][j]-8]) {
538                     case 0: run = 10; case_val = 10; break;
539                     case 1: run = 1; case_val = 16; break;
540                     case 2: run = 5; case_val = 24; break;
541                     case 3: run = 3; case_val = 30; break;
542                     case 4: run = 1; case_val = 30; break;
543                     case 5: run = 1; case_val = 8; break;
544                     default: run = 1; case_val = 8; break;
545                 }
546             }
547             for (k = 0; k < run; k++)
548                 if (j + k < 128)
549                     if (coding_method[ch][sb + (j + k) / 64][(j + k) % 64] > coding_method[ch][sb][j])
550                         if (k > 0) {
551                            SAMPLES_NEEDED
552                             //not debugged, almost never used
553                             memset(&coding_method[ch][sb][j + k], case_val, k * sizeof(int8_t));
554                             memset(&coding_method[ch][sb][j + k], case_val, 3 * sizeof(int8_t));
555                         }
556             j += run;
557         }
558     }
559 }
560
561
562 /**
563  * Related to synthesis filter
564  * Called by process_subpacket_10
565  *
566  * @param q       context
567  * @param flag    1 if called after getting data from subpacket 10, 0 if no subpacket 10
568  */
569 static void fill_tone_level_array (QDM2Context *q, int flag)
570 {
571     int i, sb, ch, sb_used;
572     int tmp, tab;
573
574     for (ch = 0; ch < q->nb_channels; ch++)
575         for (sb = 0; sb < 30; sb++)
576             for (i = 0; i < 8; i++) {
577                 if ((tab=coeff_per_sb_for_dequant[q->coeff_per_sb_select][sb]) < (last_coeff[q->coeff_per_sb_select] - 1))
578                     tmp = q->quantized_coeffs[ch][tab + 1][i] * dequant_table[q->coeff_per_sb_select][tab + 1][sb]+
579                           q->quantized_coeffs[ch][tab][i] * dequant_table[q->coeff_per_sb_select][tab][sb];
580                 else
581                     tmp = q->quantized_coeffs[ch][tab][i] * dequant_table[q->coeff_per_sb_select][tab][sb];
582                 if(tmp < 0)
583                     tmp += 0xff;
584                 q->tone_level_idx_base[ch][sb][i] = (tmp / 256) & 0xff;
585             }
586
587     sb_used = QDM2_SB_USED(q->sub_sampling);
588
589     if ((q->superblocktype_2_3 != 0) && !flag) {
590         for (sb = 0; sb < sb_used; sb++)
591             for (ch = 0; ch < q->nb_channels; ch++)
592                 for (i = 0; i < 64; i++) {
593                     q->tone_level_idx[ch][sb][i] = q->tone_level_idx_base[ch][sb][i / 8];
594                     if (q->tone_level_idx[ch][sb][i] < 0)
595                         q->tone_level[ch][sb][i] = 0;
596                     else
597                         q->tone_level[ch][sb][i] = fft_tone_level_table[0][q->tone_level_idx[ch][sb][i] & 0x3f];
598                 }
599     } else {
600         tab = q->superblocktype_2_3 ? 0 : 1;
601         for (sb = 0; sb < sb_used; sb++) {
602             if ((sb >= 4) && (sb <= 23)) {
603                 for (ch = 0; ch < q->nb_channels; ch++)
604                     for (i = 0; i < 64; i++) {
605                         tmp = q->tone_level_idx_base[ch][sb][i / 8] -
606                               q->tone_level_idx_hi1[ch][sb / 8][i / 8][i % 8] -
607                               q->tone_level_idx_mid[ch][sb - 4][i / 8] -
608                               q->tone_level_idx_hi2[ch][sb - 4];
609                         q->tone_level_idx[ch][sb][i] = tmp & 0xff;
610                         if ((tmp < 0) || (!q->superblocktype_2_3 && !tmp))
611                             q->tone_level[ch][sb][i] = 0;
612                         else
613                             q->tone_level[ch][sb][i] = fft_tone_level_table[tab][tmp & 0x3f];
614                 }
615             } else {
616                 if (sb > 4) {
617                     for (ch = 0; ch < q->nb_channels; ch++)
618                         for (i = 0; i < 64; i++) {
619                             tmp = q->tone_level_idx_base[ch][sb][i / 8] -
620                                   q->tone_level_idx_hi1[ch][2][i / 8][i % 8] -
621                                   q->tone_level_idx_hi2[ch][sb - 4];
622                             q->tone_level_idx[ch][sb][i] = tmp & 0xff;
623                             if ((tmp < 0) || (!q->superblocktype_2_3 && !tmp))
624                                 q->tone_level[ch][sb][i] = 0;
625                             else
626                                 q->tone_level[ch][sb][i] = fft_tone_level_table[tab][tmp & 0x3f];
627                     }
628                 } else {
629                     for (ch = 0; ch < q->nb_channels; ch++)
630                         for (i = 0; i < 64; i++) {
631                             tmp = q->tone_level_idx[ch][sb][i] = q->tone_level_idx_base[ch][sb][i / 8];
632                             if ((tmp < 0) || (!q->superblocktype_2_3 && !tmp))
633                                 q->tone_level[ch][sb][i] = 0;
634                             else
635                                 q->tone_level[ch][sb][i] = fft_tone_level_table[tab][tmp & 0x3f];
636                         }
637                 }
638             }
639         }
640     }
641
642     return;
643 }
644
645
646 /**
647  * Related to synthesis filter
648  * Called by process_subpacket_11
649  * c is built with data from subpacket 11
650  * Most of this function is used only if superblock_type_2_3 == 0, never seen it in samples
651  *
652  * @param tone_level_idx
653  * @param tone_level_idx_temp
654  * @param coding_method        q->coding_method[0][0][0]
655  * @param nb_channels          number of channels
656  * @param c                    coming from subpacket 11, passed as 8*c
657  * @param superblocktype_2_3   flag based on superblock packet type
658  * @param cm_table_select      q->cm_table_select
659  */
660 static void fill_coding_method_array (sb_int8_array tone_level_idx, sb_int8_array tone_level_idx_temp,
661                 sb_int8_array coding_method, int nb_channels,
662                 int c, int superblocktype_2_3, int cm_table_select)
663 {
664     int ch, sb, j;
665     int tmp, acc, esp_40, comp;
666     int add1, add2, add3, add4;
667     int64_t multres;
668
669     if (!superblocktype_2_3) {
670         /* This case is untested, no samples available */
671         SAMPLES_NEEDED
672         for (ch = 0; ch < nb_channels; ch++)
673             for (sb = 0; sb < 30; sb++) {
674                 for (j = 1; j < 63; j++) {  // The loop only iterates to 63 so the code doesn't overflow the buffer
675                     add1 = tone_level_idx[ch][sb][j] - 10;
676                     if (add1 < 0)
677                         add1 = 0;
678                     add2 = add3 = add4 = 0;
679                     if (sb > 1) {
680                         add2 = tone_level_idx[ch][sb - 2][j] + tone_level_idx_offset_table[sb][0] - 6;
681                         if (add2 < 0)
682                             add2 = 0;
683                     }
684                     if (sb > 0) {
685                         add3 = tone_level_idx[ch][sb - 1][j] + tone_level_idx_offset_table[sb][1] - 6;
686                         if (add3 < 0)
687                             add3 = 0;
688                     }
689                     if (sb < 29) {
690                         add4 = tone_level_idx[ch][sb + 1][j] + tone_level_idx_offset_table[sb][3] - 6;
691                         if (add4 < 0)
692                             add4 = 0;
693                     }
694                     tmp = tone_level_idx[ch][sb][j + 1] * 2 - add4 - add3 - add2 - add1;
695                     if (tmp < 0)
696                         tmp = 0;
697                     tone_level_idx_temp[ch][sb][j + 1] = tmp & 0xff;
698                 }
699                 tone_level_idx_temp[ch][sb][0] = tone_level_idx_temp[ch][sb][1];
700             }
701             acc = 0;
702             for (ch = 0; ch < nb_channels; ch++)
703                 for (sb = 0; sb < 30; sb++)
704                     for (j = 0; j < 64; j++)
705                         acc += tone_level_idx_temp[ch][sb][j];
706
707             multres = 0x66666667 * (acc * 10);
708             esp_40 = (multres >> 32) / 8 + ((multres & 0xffffffff) >> 31);
709             for (ch = 0;  ch < nb_channels; ch++)
710                 for (sb = 0; sb < 30; sb++)
711                     for (j = 0; j < 64; j++) {
712                         comp = tone_level_idx_temp[ch][sb][j]* esp_40 * 10;
713                         if (comp < 0)
714                             comp += 0xff;
715                         comp /= 256; // signed shift
716                         switch(sb) {
717                             case 0:
718                                 if (comp < 30)
719                                     comp = 30;
720                                 comp += 15;
721                                 break;
722                             case 1:
723                                 if (comp < 24)
724                                     comp = 24;
725                                 comp += 10;
726                                 break;
727                             case 2:
728                             case 3:
729                             case 4:
730                                 if (comp < 16)
731                                     comp = 16;
732                         }
733                         if (comp <= 5)
734                             tmp = 0;
735                         else if (comp <= 10)
736                             tmp = 10;
737                         else if (comp <= 16)
738                             tmp = 16;
739                         else if (comp <= 24)
740                             tmp = -1;
741                         else
742                             tmp = 0;
743                         coding_method[ch][sb][j] = ((tmp & 0xfffa) + 30 )& 0xff;
744                     }
745             for (sb = 0; sb < 30; sb++)
746                 fix_coding_method_array(sb, nb_channels, coding_method);
747             for (ch = 0; ch < nb_channels; ch++)
748                 for (sb = 0; sb < 30; sb++)
749                     for (j = 0; j < 64; j++)
750                         if (sb >= 10) {
751                             if (coding_method[ch][sb][j] < 10)
752                                 coding_method[ch][sb][j] = 10;
753                         } else {
754                             if (sb >= 2) {
755                                 if (coding_method[ch][sb][j] < 16)
756                                     coding_method[ch][sb][j] = 16;
757                             } else {
758                                 if (coding_method[ch][sb][j] < 30)
759                                     coding_method[ch][sb][j] = 30;
760                             }
761                         }
762     } else { // superblocktype_2_3 != 0
763         for (ch = 0; ch < nb_channels; ch++)
764             for (sb = 0; sb < 30; sb++)
765                 for (j = 0; j < 64; j++)
766                     coding_method[ch][sb][j] = coding_method_table[cm_table_select][sb];
767     }
768
769     return;
770 }
771
772
773 /**
774  *
775  * Called by process_subpacket_11 to process more data from subpacket 11 with sb 0-8
776  * Called by process_subpacket_12 to process data from subpacket 12 with sb 8-sb_used
777  *
778  * @param q         context
779  * @param gb        bitreader context
780  * @param length    packet length in bits
781  * @param sb_min    lower subband processed (sb_min included)
782  * @param sb_max    higher subband processed (sb_max excluded)
783  */
784 static void synthfilt_build_sb_samples (QDM2Context *q, GetBitContext *gb, int length, int sb_min, int sb_max)
785 {
786     int sb, j, k, n, ch, run, channels;
787     int joined_stereo, zero_encoding, chs;
788     int type34_first;
789     float type34_div = 0;
790     float type34_predictor;
791     float samples[10], sign_bits[16];
792
793     if (length == 0) {
794         // If no data use noise
795         for (sb=sb_min; sb < sb_max; sb++)
796             build_sb_samples_from_noise (q, sb);
797
798         return;
799     }
800
801     for (sb = sb_min; sb < sb_max; sb++) {
802         FIX_NOISE_IDX(q->noise_idx);
803
804         channels = q->nb_channels;
805
806         if (q->nb_channels <= 1 || sb < 12)
807             joined_stereo = 0;
808         else if (sb >= 24)
809             joined_stereo = 1;
810         else
811             joined_stereo = (get_bits_left(gb) >= 1) ? get_bits1 (gb) : 0;
812
813         if (joined_stereo) {
814             if (get_bits_left(gb) >= 16)
815                 for (j = 0; j < 16; j++)
816                     sign_bits[j] = get_bits1 (gb);
817
818             for (j = 0; j < 64; j++)
819                 if (q->coding_method[1][sb][j] > q->coding_method[0][sb][j])
820                     q->coding_method[0][sb][j] = q->coding_method[1][sb][j];
821
822             fix_coding_method_array(sb, q->nb_channels, q->coding_method);
823             channels = 1;
824         }
825
826         for (ch = 0; ch < channels; ch++) {
827             zero_encoding = (get_bits_left(gb) >= 1) ? get_bits1(gb) : 0;
828             type34_predictor = 0.0;
829             type34_first = 1;
830
831             for (j = 0; j < 128; ) {
832                 switch (q->coding_method[ch][sb][j / 2]) {
833                     case 8:
834                         if (get_bits_left(gb) >= 10) {
835                             if (zero_encoding) {
836                                 for (k = 0; k < 5; k++) {
837                                     if ((j + 2 * k) >= 128)
838                                         break;
839                                     samples[2 * k] = get_bits1(gb) ? dequant_1bit[joined_stereo][2 * get_bits1(gb)] : 0;
840                                 }
841                             } else {
842                                 n = get_bits(gb, 8);
843                                 for (k = 0; k < 5; k++)
844                                     samples[2 * k] = dequant_1bit[joined_stereo][random_dequant_index[n][k]];
845                             }
846                             for (k = 0; k < 5; k++)
847                                 samples[2 * k + 1] = SB_DITHERING_NOISE(sb,q->noise_idx);
848                         } else {
849                             for (k = 0; k < 10; k++)
850                                 samples[k] = SB_DITHERING_NOISE(sb,q->noise_idx);
851                         }
852                         run = 10;
853                         break;
854
855                     case 10:
856                         if (get_bits_left(gb) >= 1) {
857                             float f = 0.81;
858
859                             if (get_bits1(gb))
860                                 f = -f;
861                             f -= noise_samples[((sb + 1) * (j +5 * ch + 1)) & 127] * 9.0 / 40.0;
862                             samples[0] = f;
863                         } else {
864                             samples[0] = SB_DITHERING_NOISE(sb,q->noise_idx);
865                         }
866                         run = 1;
867                         break;
868
869                     case 16:
870                         if (get_bits_left(gb) >= 10) {
871                             if (zero_encoding) {
872                                 for (k = 0; k < 5; k++) {
873                                     if ((j + k) >= 128)
874                                         break;
875                                     samples[k] = (get_bits1(gb) == 0) ? 0 : dequant_1bit[joined_stereo][2 * get_bits1(gb)];
876                                 }
877                             } else {
878                                 n = get_bits (gb, 8);
879                                 for (k = 0; k < 5; k++)
880                                     samples[k] = dequant_1bit[joined_stereo][random_dequant_index[n][k]];
881                             }
882                         } else {
883                             for (k = 0; k < 5; k++)
884                                 samples[k] = SB_DITHERING_NOISE(sb,q->noise_idx);
885                         }
886                         run = 5;
887                         break;
888
889                     case 24:
890                         if (get_bits_left(gb) >= 7) {
891                             n = get_bits(gb, 7);
892                             for (k = 0; k < 3; k++)
893                                 samples[k] = (random_dequant_type24[n][k] - 2.0) * 0.5;
894                         } else {
895                             for (k = 0; k < 3; k++)
896                                 samples[k] = SB_DITHERING_NOISE(sb,q->noise_idx);
897                         }
898                         run = 3;
899                         break;
900
901                     case 30:
902                         if (get_bits_left(gb) >= 4) {
903                             unsigned index = qdm2_get_vlc(gb, &vlc_tab_type30, 0, 1);
904                             if (index < FF_ARRAY_ELEMS(type30_dequant)) {
905                                 samples[0] = type30_dequant[index];
906                             } else
907                                 samples[0] = SB_DITHERING_NOISE(sb,q->noise_idx);
908                         } else
909                             samples[0] = SB_DITHERING_NOISE(sb,q->noise_idx);
910
911                         run = 1;
912                         break;
913
914                     case 34:
915                         if (get_bits_left(gb) >= 7) {
916                             if (type34_first) {
917                                 type34_div = (float)(1 << get_bits(gb, 2));
918                                 samples[0] = ((float)get_bits(gb, 5) - 16.0) / 15.0;
919                                 type34_predictor = samples[0];
920                                 type34_first = 0;
921                             } else {
922                                 unsigned index = qdm2_get_vlc(gb, &vlc_tab_type34, 0, 1);
923                                 if (index < FF_ARRAY_ELEMS(type34_delta)) {
924                                     samples[0] = type34_delta[index] / type34_div + type34_predictor;
925                                     type34_predictor = samples[0];
926                                 } else
927                                     samples[0] = SB_DITHERING_NOISE(sb,q->noise_idx);
928                             }
929                         } else {
930                             samples[0] = SB_DITHERING_NOISE(sb,q->noise_idx);
931                         }
932                         run = 1;
933                         break;
934
935                     default:
936                         samples[0] = SB_DITHERING_NOISE(sb,q->noise_idx);
937                         run = 1;
938                         break;
939                 }
940
941                 if (joined_stereo) {
942                     float tmp[10][MPA_MAX_CHANNELS];
943
944                     for (k = 0; k < run; k++) {
945                         tmp[k][0] = samples[k];
946                         tmp[k][1] = (sign_bits[(j + k) / 8]) ? -samples[k] : samples[k];
947                     }
948                     for (chs = 0; chs < q->nb_channels; chs++)
949                         for (k = 0; k < run; k++)
950                             if ((j + k) < 128)
951                                 q->sb_samples[chs][j + k][sb] = q->tone_level[chs][sb][((j + k)/2)] * tmp[k][chs];
952                 } else {
953                     for (k = 0; k < run; k++)
954                         if ((j + k) < 128)
955                             q->sb_samples[ch][j + k][sb] = q->tone_level[ch][sb][(j + k)/2] * samples[k];
956                 }
957
958                 j += run;
959             } // j loop
960         } // channel loop
961     } // subband loop
962 }
963
964
965 /**
966  * Init the first element of a channel in quantized_coeffs with data from packet 10 (quantized_coeffs[ch][0]).
967  * This is similar to process_subpacket_9, but for a single channel and for element [0]
968  * same VLC tables as process_subpacket_9 are used.
969  *
970  * @param quantized_coeffs    pointer to quantized_coeffs[ch][0]
971  * @param gb        bitreader context
972  */
973 static void init_quantized_coeffs_elem0 (int8_t *quantized_coeffs, GetBitContext *gb)
974 {
975     int i, k, run, level, diff;
976
977     if (get_bits_left(gb) < 16)
978         return;
979     level = qdm2_get_vlc(gb, &vlc_tab_level, 0, 2);
980
981     quantized_coeffs[0] = level;
982
983     for (i = 0; i < 7; ) {
984         if (get_bits_left(gb) < 16)
985             break;
986         run = qdm2_get_vlc(gb, &vlc_tab_run, 0, 1) + 1;
987
988         if (get_bits_left(gb) < 16)
989             break;
990         diff = qdm2_get_se_vlc(&vlc_tab_diff, gb, 2);
991
992         for (k = 1; k <= run; k++)
993             quantized_coeffs[i + k] = (level + ((k * diff) / run));
994
995         level += diff;
996         i += run;
997     }
998 }
999
1000
1001 /**
1002  * Related to synthesis filter, process data from packet 10
1003  * Init part of quantized_coeffs via function init_quantized_coeffs_elem0
1004  * Init tone_level_idx_hi1, tone_level_idx_hi2, tone_level_idx_mid with data from packet 10
1005  *
1006  * @param q         context
1007  * @param gb        bitreader context
1008  */
1009 static void init_tone_level_dequantization (QDM2Context *q, GetBitContext *gb)
1010 {
1011     int sb, j, k, n, ch;
1012
1013     for (ch = 0; ch < q->nb_channels; ch++) {
1014         init_quantized_coeffs_elem0(q->quantized_coeffs[ch][0], gb);
1015
1016         if (get_bits_left(gb) < 16) {
1017             memset(q->quantized_coeffs[ch][0], 0, 8);
1018             break;
1019         }
1020     }
1021
1022     n = q->sub_sampling + 1;
1023
1024     for (sb = 0; sb < n; sb++)
1025         for (ch = 0; ch < q->nb_channels; ch++)
1026             for (j = 0; j < 8; j++) {
1027                 if (get_bits_left(gb) < 1)
1028                     break;
1029                 if (get_bits1(gb)) {
1030                     for (k=0; k < 8; k++) {
1031                         if (get_bits_left(gb) < 16)
1032                             break;
1033                         q->tone_level_idx_hi1[ch][sb][j][k] = qdm2_get_vlc(gb, &vlc_tab_tone_level_idx_hi1, 0, 2);
1034                     }
1035                 } else {
1036                     for (k=0; k < 8; k++)
1037                         q->tone_level_idx_hi1[ch][sb][j][k] = 0;
1038                 }
1039             }
1040
1041     n = QDM2_SB_USED(q->sub_sampling) - 4;
1042
1043     for (sb = 0; sb < n; sb++)
1044         for (ch = 0; ch < q->nb_channels; ch++) {
1045             if (get_bits_left(gb) < 16)
1046                 break;
1047             q->tone_level_idx_hi2[ch][sb] = qdm2_get_vlc(gb, &vlc_tab_tone_level_idx_hi2, 0, 2);
1048             if (sb > 19)
1049                 q->tone_level_idx_hi2[ch][sb] -= 16;
1050             else
1051                 for (j = 0; j < 8; j++)
1052                     q->tone_level_idx_mid[ch][sb][j] = -16;
1053         }
1054
1055     n = QDM2_SB_USED(q->sub_sampling) - 5;
1056
1057     for (sb = 0; sb < n; sb++)
1058         for (ch = 0; ch < q->nb_channels; ch++)
1059             for (j = 0; j < 8; j++) {
1060                 if (get_bits_left(gb) < 16)
1061                     break;
1062                 q->tone_level_idx_mid[ch][sb][j] = qdm2_get_vlc(gb, &vlc_tab_tone_level_idx_mid, 0, 2) - 32;
1063             }
1064 }
1065
1066 /**
1067  * Process subpacket 9, init quantized_coeffs with data from it
1068  *
1069  * @param q       context
1070  * @param node    pointer to node with packet
1071  */
1072 static void process_subpacket_9 (QDM2Context *q, QDM2SubPNode *node)
1073 {
1074     GetBitContext gb;
1075     int i, j, k, n, ch, run, level, diff;
1076
1077     init_get_bits(&gb, node->packet->data, node->packet->size*8);
1078
1079     n = coeff_per_sb_for_avg[q->coeff_per_sb_select][QDM2_SB_USED(q->sub_sampling) - 1] + 1; // same as averagesomething function
1080
1081     for (i = 1; i < n; i++)
1082         for (ch=0; ch < q->nb_channels; ch++) {
1083             level = qdm2_get_vlc(&gb, &vlc_tab_level, 0, 2);
1084             q->quantized_coeffs[ch][i][0] = level;
1085
1086             for (j = 0; j < (8 - 1); ) {
1087                 run = qdm2_get_vlc(&gb, &vlc_tab_run, 0, 1) + 1;
1088                 diff = qdm2_get_se_vlc(&vlc_tab_diff, &gb, 2);
1089
1090                 for (k = 1; k <= run; k++)
1091                     q->quantized_coeffs[ch][i][j + k] = (level + ((k*diff) / run));
1092
1093                 level += diff;
1094                 j += run;
1095             }
1096         }
1097
1098     for (ch = 0; ch < q->nb_channels; ch++)
1099         for (i = 0; i < 8; i++)
1100             q->quantized_coeffs[ch][0][i] = 0;
1101 }
1102
1103
1104 /**
1105  * Process subpacket 10 if not null, else
1106  *
1107  * @param q         context
1108  * @param node      pointer to node with packet
1109  */
1110 static void process_subpacket_10 (QDM2Context *q, QDM2SubPNode *node)
1111 {
1112     GetBitContext gb;
1113
1114     if (node) {
1115         init_get_bits(&gb, node->packet->data, node->packet->size * 8);
1116         init_tone_level_dequantization(q, &gb);
1117         fill_tone_level_array(q, 1);
1118     } else {
1119         fill_tone_level_array(q, 0);
1120     }
1121 }
1122
1123
1124 /**
1125  * Process subpacket 11
1126  *
1127  * @param q         context
1128  * @param node      pointer to node with packet
1129  */
1130 static void process_subpacket_11 (QDM2Context *q, QDM2SubPNode *node)
1131 {
1132     GetBitContext gb;
1133     int length = 0;
1134
1135     if (node) {
1136         length = node->packet->size * 8;
1137         init_get_bits(&gb, node->packet->data, length);
1138     }
1139
1140     if (length >= 32) {
1141         int c = get_bits (&gb, 13);
1142
1143         if (c > 3)
1144             fill_coding_method_array (q->tone_level_idx, q->tone_level_idx_temp, q->coding_method,
1145                                       q->nb_channels, 8*c, q->superblocktype_2_3, q->cm_table_select);
1146     }
1147
1148     synthfilt_build_sb_samples(q, &gb, length, 0, 8);
1149 }
1150
1151
1152 /**
1153  * Process subpacket 12
1154  *
1155  * @param q         context
1156  * @param node      pointer to node with packet
1157  */
1158 static void process_subpacket_12 (QDM2Context *q, QDM2SubPNode *node)
1159 {
1160     GetBitContext gb;
1161     int length = 0;
1162
1163     if (node) {
1164         length = node->packet->size * 8;
1165         init_get_bits(&gb, node->packet->data, length);
1166     }
1167
1168     synthfilt_build_sb_samples(q, &gb, length, 8, QDM2_SB_USED(q->sub_sampling));
1169 }
1170
1171 /*
1172  * Process new subpackets for synthesis filter
1173  *
1174  * @param q       context
1175  * @param list    list with synthesis filter packets (list D)
1176  */
1177 static void process_synthesis_subpackets (QDM2Context *q, QDM2SubPNode *list)
1178 {
1179     QDM2SubPNode *nodes[4];
1180
1181     nodes[0] = qdm2_search_subpacket_type_in_list(list, 9);
1182     if (nodes[0] != NULL)
1183         process_subpacket_9(q, nodes[0]);
1184
1185     nodes[1] = qdm2_search_subpacket_type_in_list(list, 10);
1186     if (nodes[1] != NULL)
1187         process_subpacket_10(q, nodes[1]);
1188     else
1189         process_subpacket_10(q, NULL);
1190
1191     nodes[2] = qdm2_search_subpacket_type_in_list(list, 11);
1192     if (nodes[0] != NULL && nodes[1] != NULL && nodes[2] != NULL)
1193         process_subpacket_11(q, nodes[2]);
1194     else
1195         process_subpacket_11(q, NULL);
1196
1197     nodes[3] = qdm2_search_subpacket_type_in_list(list, 12);
1198     if (nodes[0] != NULL && nodes[1] != NULL && nodes[3] != NULL)
1199         process_subpacket_12(q, nodes[3]);
1200     else
1201         process_subpacket_12(q, NULL);
1202 }
1203
1204
1205 /*
1206  * Decode superblock, fill packet lists.
1207  *
1208  * @param q    context
1209  */
1210 static void qdm2_decode_super_block (QDM2Context *q)
1211 {
1212     GetBitContext gb;
1213     QDM2SubPacket header, *packet;
1214     int i, packet_bytes, sub_packet_size, sub_packets_D;
1215     unsigned int next_index = 0;
1216
1217     memset(q->tone_level_idx_hi1, 0, sizeof(q->tone_level_idx_hi1));
1218     memset(q->tone_level_idx_mid, 0, sizeof(q->tone_level_idx_mid));
1219     memset(q->tone_level_idx_hi2, 0, sizeof(q->tone_level_idx_hi2));
1220
1221     q->sub_packets_B = 0;
1222     sub_packets_D = 0;
1223
1224     average_quantized_coeffs(q); // average elements in quantized_coeffs[max_ch][10][8]
1225
1226     init_get_bits(&gb, q->compressed_data, q->compressed_size*8);
1227     qdm2_decode_sub_packet_header(&gb, &header);
1228
1229     if (header.type < 2 || header.type >= 8) {
1230         q->has_errors = 1;
1231         av_log(NULL,AV_LOG_ERROR,"bad superblock type\n");
1232         return;
1233     }
1234
1235     q->superblocktype_2_3 = (header.type == 2 || header.type == 3);
1236     packet_bytes = (q->compressed_size - get_bits_count(&gb) / 8);
1237
1238     init_get_bits(&gb, header.data, header.size*8);
1239
1240     if (header.type == 2 || header.type == 4 || header.type == 5) {
1241         int csum  = 257 * get_bits(&gb, 8);
1242             csum +=   2 * get_bits(&gb, 8);
1243
1244         csum = qdm2_packet_checksum(q->compressed_data, q->checksum_size, csum);
1245
1246         if (csum != 0) {
1247             q->has_errors = 1;
1248             av_log(NULL,AV_LOG_ERROR,"bad packet checksum\n");
1249             return;
1250         }
1251     }
1252
1253     q->sub_packet_list_B[0].packet = NULL;
1254     q->sub_packet_list_D[0].packet = NULL;
1255
1256     for (i = 0; i < 6; i++)
1257         if (--q->fft_level_exp[i] < 0)
1258             q->fft_level_exp[i] = 0;
1259
1260     for (i = 0; packet_bytes > 0; i++) {
1261         int j;
1262
1263         if (i >= FF_ARRAY_ELEMS(q->sub_packet_list_A)) {
1264             SAMPLES_NEEDED_2("too many packet bytes");
1265             return;
1266         }
1267
1268         q->sub_packet_list_A[i].next = NULL;
1269
1270         if (i > 0) {
1271             q->sub_packet_list_A[i - 1].next = &q->sub_packet_list_A[i];
1272
1273             /* seek to next block */
1274             init_get_bits(&gb, header.data, header.size*8);
1275             skip_bits(&gb, next_index*8);
1276
1277             if (next_index >= header.size)
1278                 break;
1279         }
1280
1281         /* decode subpacket */
1282         packet = &q->sub_packets[i];
1283         qdm2_decode_sub_packet_header(&gb, packet);
1284         next_index = packet->size + get_bits_count(&gb) / 8;
1285         sub_packet_size = ((packet->size > 0xff) ? 1 : 0) + packet->size + 2;
1286
1287         if (packet->type == 0)
1288             break;
1289
1290         if (sub_packet_size > packet_bytes) {
1291             if (packet->type != 10 && packet->type != 11 && packet->type != 12)
1292                 break;
1293             packet->size += packet_bytes - sub_packet_size;
1294         }
1295
1296         packet_bytes -= sub_packet_size;
1297
1298         /* add subpacket to 'all subpackets' list */
1299         q->sub_packet_list_A[i].packet = packet;
1300
1301         /* add subpacket to related list */
1302         if (packet->type == 8) {
1303             SAMPLES_NEEDED_2("packet type 8");
1304             return;
1305         } else if (packet->type >= 9 && packet->type <= 12) {
1306             /* packets for MPEG Audio like Synthesis Filter */
1307             QDM2_LIST_ADD(q->sub_packet_list_D, sub_packets_D, packet);
1308         } else if (packet->type == 13) {
1309             for (j = 0; j < 6; j++)
1310                 q->fft_level_exp[j] = get_bits(&gb, 6);
1311         } else if (packet->type == 14) {
1312             for (j = 0; j < 6; j++)
1313                 q->fft_level_exp[j] = qdm2_get_vlc(&gb, &fft_level_exp_vlc, 0, 2);
1314         } else if (packet->type == 15) {
1315             SAMPLES_NEEDED_2("packet type 15")
1316             return;
1317         } else if (packet->type >= 16 && packet->type < 48 && !fft_subpackets[packet->type - 16]) {
1318             /* packets for FFT */
1319             QDM2_LIST_ADD(q->sub_packet_list_B, q->sub_packets_B, packet);
1320         }
1321     } // Packet bytes loop
1322
1323 /* **************************************************************** */
1324     if (q->sub_packet_list_D[0].packet != NULL) {
1325         process_synthesis_subpackets(q, q->sub_packet_list_D);
1326         q->do_synth_filter = 1;
1327     } else if (q->do_synth_filter) {
1328         process_subpacket_10(q, NULL);
1329         process_subpacket_11(q, NULL);
1330         process_subpacket_12(q, NULL);
1331     }
1332 /* **************************************************************** */
1333 }
1334
1335
1336 static void qdm2_fft_init_coefficient (QDM2Context *q, int sub_packet,
1337                        int offset, int duration, int channel,
1338                        int exp, int phase)
1339 {
1340     if (q->fft_coefs_min_index[duration] < 0)
1341         q->fft_coefs_min_index[duration] = q->fft_coefs_index;
1342
1343     q->fft_coefs[q->fft_coefs_index].sub_packet = ((sub_packet >= 16) ? (sub_packet - 16) : sub_packet);
1344     q->fft_coefs[q->fft_coefs_index].channel = channel;
1345     q->fft_coefs[q->fft_coefs_index].offset = offset;
1346     q->fft_coefs[q->fft_coefs_index].exp = exp;
1347     q->fft_coefs[q->fft_coefs_index].phase = phase;
1348     q->fft_coefs_index++;
1349 }
1350
1351
1352 static void qdm2_fft_decode_tones (QDM2Context *q, int duration, GetBitContext *gb, int b)
1353 {
1354     int channel, stereo, phase, exp;
1355     int local_int_4,  local_int_8,  stereo_phase,  local_int_10;
1356     int local_int_14, stereo_exp, local_int_20, local_int_28;
1357     int n, offset;
1358
1359     local_int_4 = 0;
1360     local_int_28 = 0;
1361     local_int_20 = 2;
1362     local_int_8 = (4 - duration);
1363     local_int_10 = 1 << (q->group_order - duration - 1);
1364     offset = 1;
1365
1366     while (1) {
1367         if (q->superblocktype_2_3) {
1368             while ((n = qdm2_get_vlc(gb, &vlc_tab_fft_tone_offset[local_int_8], 1, 2)) < 2) {
1369                 offset = 1;
1370                 if (n == 0) {
1371                     local_int_4 += local_int_10;
1372                     local_int_28 += (1 << local_int_8);
1373                 } else {
1374                     local_int_4 += 8*local_int_10;
1375                     local_int_28 += (8 << local_int_8);
1376                 }
1377             }
1378             offset += (n - 2);
1379         } else {
1380             offset += qdm2_get_vlc(gb, &vlc_tab_fft_tone_offset[local_int_8], 1, 2);
1381             while (offset >= (local_int_10 - 1)) {
1382                 offset += (1 - (local_int_10 - 1));
1383                 local_int_4  += local_int_10;
1384                 local_int_28 += (1 << local_int_8);
1385             }
1386         }
1387
1388         if (local_int_4 >= q->group_size)
1389             return;
1390
1391         local_int_14 = (offset >> local_int_8);
1392         if (local_int_14 >= FF_ARRAY_ELEMS(fft_level_index_table))
1393             return;
1394
1395         if (q->nb_channels > 1) {
1396             channel = get_bits1(gb);
1397             stereo = get_bits1(gb);
1398         } else {
1399             channel = 0;
1400             stereo = 0;
1401         }
1402
1403         exp = qdm2_get_vlc(gb, (b ? &fft_level_exp_vlc : &fft_level_exp_alt_vlc), 0, 2);
1404         exp += q->fft_level_exp[fft_level_index_table[local_int_14]];
1405         exp = (exp < 0) ? 0 : exp;
1406
1407         phase = get_bits(gb, 3);
1408         stereo_exp = 0;
1409         stereo_phase = 0;
1410
1411         if (stereo) {
1412             stereo_exp = (exp - qdm2_get_vlc(gb, &fft_stereo_exp_vlc, 0, 1));
1413             stereo_phase = (phase - qdm2_get_vlc(gb, &fft_stereo_phase_vlc, 0, 1));
1414             if (stereo_phase < 0)
1415                 stereo_phase += 8;
1416         }
1417
1418         if (q->frequency_range > (local_int_14 + 1)) {
1419             int sub_packet = (local_int_20 + local_int_28);
1420
1421             qdm2_fft_init_coefficient(q, sub_packet, offset, duration, channel, exp, phase);
1422             if (stereo)
1423                 qdm2_fft_init_coefficient(q, sub_packet, offset, duration, (1 - channel), stereo_exp, stereo_phase);
1424         }
1425
1426         offset++;
1427     }
1428 }
1429
1430
1431 static void qdm2_decode_fft_packets (QDM2Context *q)
1432 {
1433     int i, j, min, max, value, type, unknown_flag;
1434     GetBitContext gb;
1435
1436     if (q->sub_packet_list_B[0].packet == NULL)
1437         return;
1438
1439     /* reset minimum indexes for FFT coefficients */
1440     q->fft_coefs_index = 0;
1441     for (i=0; i < 5; i++)
1442         q->fft_coefs_min_index[i] = -1;
1443
1444     /* process subpackets ordered by type, largest type first */
1445     for (i = 0, max = 256; i < q->sub_packets_B; i++) {
1446         QDM2SubPacket *packet= NULL;
1447
1448         /* find subpacket with largest type less than max */
1449         for (j = 0, min = 0; j < q->sub_packets_B; j++) {
1450             value = q->sub_packet_list_B[j].packet->type;
1451             if (value > min && value < max) {
1452                 min = value;
1453                 packet = q->sub_packet_list_B[j].packet;
1454             }
1455         }
1456
1457         max = min;
1458
1459         /* check for errors (?) */
1460         if (!packet)
1461             return;
1462
1463         if (i == 0 && (packet->type < 16 || packet->type >= 48 || fft_subpackets[packet->type - 16]))
1464             return;
1465
1466         /* decode FFT tones */
1467         init_get_bits (&gb, packet->data, packet->size*8);
1468
1469         if (packet->type >= 32 && packet->type < 48 && !fft_subpackets[packet->type - 16])
1470             unknown_flag = 1;
1471         else
1472             unknown_flag = 0;
1473
1474         type = packet->type;
1475
1476         if ((type >= 17 && type < 24) || (type >= 33 && type < 40)) {
1477             int duration = q->sub_sampling + 5 - (type & 15);
1478
1479             if (duration >= 0 && duration < 4)
1480                 qdm2_fft_decode_tones(q, duration, &gb, unknown_flag);
1481         } else if (type == 31) {
1482             for (j=0; j < 4; j++)
1483                 qdm2_fft_decode_tones(q, j, &gb, unknown_flag);
1484         } else if (type == 46) {
1485             for (j=0; j < 6; j++)
1486                 q->fft_level_exp[j] = get_bits(&gb, 6);
1487             for (j=0; j < 4; j++)
1488             qdm2_fft_decode_tones(q, j, &gb, unknown_flag);
1489         }
1490     } // Loop on B packets
1491
1492     /* calculate maximum indexes for FFT coefficients */
1493     for (i = 0, j = -1; i < 5; i++)
1494         if (q->fft_coefs_min_index[i] >= 0) {
1495             if (j >= 0)
1496                 q->fft_coefs_max_index[j] = q->fft_coefs_min_index[i];
1497             j = i;
1498         }
1499     if (j >= 0)
1500         q->fft_coefs_max_index[j] = q->fft_coefs_index;
1501 }
1502
1503
1504 static void qdm2_fft_generate_tone (QDM2Context *q, FFTTone *tone)
1505 {
1506    float level, f[6];
1507    int i;
1508    QDM2Complex c;
1509    const double iscale = 2.0*M_PI / 512.0;
1510
1511     tone->phase += tone->phase_shift;
1512
1513     /* calculate current level (maximum amplitude) of tone */
1514     level = fft_tone_envelope_table[tone->duration][tone->time_index] * tone->level;
1515     c.im = level * sin(tone->phase*iscale);
1516     c.re = level * cos(tone->phase*iscale);
1517
1518     /* generate FFT coefficients for tone */
1519     if (tone->duration >= 3 || tone->cutoff >= 3) {
1520         tone->complex[0].im += c.im;
1521         tone->complex[0].re += c.re;
1522         tone->complex[1].im -= c.im;
1523         tone->complex[1].re -= c.re;
1524     } else {
1525         f[1] = -tone->table[4];
1526         f[0] =  tone->table[3] - tone->table[0];
1527         f[2] =  1.0 - tone->table[2] - tone->table[3];
1528         f[3] =  tone->table[1] + tone->table[4] - 1.0;
1529         f[4] =  tone->table[0] - tone->table[1];
1530         f[5] =  tone->table[2];
1531         for (i = 0; i < 2; i++) {
1532             tone->complex[fft_cutoff_index_table[tone->cutoff][i]].re += c.re * f[i];
1533             tone->complex[fft_cutoff_index_table[tone->cutoff][i]].im += c.im *((tone->cutoff <= i) ? -f[i] : f[i]);
1534         }
1535         for (i = 0; i < 4; i++) {
1536             tone->complex[i].re += c.re * f[i+2];
1537             tone->complex[i].im += c.im * f[i+2];
1538         }
1539     }
1540
1541     /* copy the tone if it has not yet died out */
1542     if (++tone->time_index < ((1 << (5 - tone->duration)) - 1)) {
1543       memcpy(&q->fft_tones[q->fft_tone_end], tone, sizeof(FFTTone));
1544       q->fft_tone_end = (q->fft_tone_end + 1) % 1000;
1545     }
1546 }
1547
1548
1549 static void qdm2_fft_tone_synthesizer (QDM2Context *q, int sub_packet)
1550 {
1551     int i, j, ch;
1552     const double iscale = 0.25 * M_PI;
1553
1554     for (ch = 0; ch < q->channels; ch++) {
1555         memset(q->fft.complex[ch], 0, q->fft_size * sizeof(QDM2Complex));
1556     }
1557
1558
1559     /* apply FFT tones with duration 4 (1 FFT period) */
1560     if (q->fft_coefs_min_index[4] >= 0)
1561         for (i = q->fft_coefs_min_index[4]; i < q->fft_coefs_max_index[4]; i++) {
1562             float level;
1563             QDM2Complex c;
1564
1565             if (q->fft_coefs[i].sub_packet != sub_packet)
1566                 break;
1567
1568             ch = (q->channels == 1) ? 0 : q->fft_coefs[i].channel;
1569             level = (q->fft_coefs[i].exp < 0) ? 0.0 : fft_tone_level_table[q->superblocktype_2_3 ? 0 : 1][q->fft_coefs[i].exp & 63];
1570
1571             c.re = level * cos(q->fft_coefs[i].phase * iscale);
1572             c.im = level * sin(q->fft_coefs[i].phase * iscale);
1573             q->fft.complex[ch][q->fft_coefs[i].offset + 0].re += c.re;
1574             q->fft.complex[ch][q->fft_coefs[i].offset + 0].im += c.im;
1575             q->fft.complex[ch][q->fft_coefs[i].offset + 1].re -= c.re;
1576             q->fft.complex[ch][q->fft_coefs[i].offset + 1].im -= c.im;
1577         }
1578
1579     /* generate existing FFT tones */
1580     for (i = q->fft_tone_end; i != q->fft_tone_start; ) {
1581         qdm2_fft_generate_tone(q, &q->fft_tones[q->fft_tone_start]);
1582         q->fft_tone_start = (q->fft_tone_start + 1) % 1000;
1583     }
1584
1585     /* create and generate new FFT tones with duration 0 (long) to 3 (short) */
1586     for (i = 0; i < 4; i++)
1587         if (q->fft_coefs_min_index[i] >= 0) {
1588             for (j = q->fft_coefs_min_index[i]; j < q->fft_coefs_max_index[i]; j++) {
1589                 int offset, four_i;
1590                 FFTTone tone;
1591
1592                 if (q->fft_coefs[j].sub_packet != sub_packet)
1593                     break;
1594
1595                 four_i = (4 - i);
1596                 offset = q->fft_coefs[j].offset >> four_i;
1597                 ch = (q->channels == 1) ? 0 : q->fft_coefs[j].channel;
1598
1599                 if (offset < q->frequency_range) {
1600                     if (offset < 2)
1601                         tone.cutoff = offset;
1602                     else
1603                         tone.cutoff = (offset >= 60) ? 3 : 2;
1604
1605                     tone.level = (q->fft_coefs[j].exp < 0) ? 0.0 : fft_tone_level_table[q->superblocktype_2_3 ? 0 : 1][q->fft_coefs[j].exp & 63];
1606                     tone.complex = &q->fft.complex[ch][offset];
1607                     tone.table = fft_tone_sample_table[i][q->fft_coefs[j].offset - (offset << four_i)];
1608                     tone.phase = 64 * q->fft_coefs[j].phase - (offset << 8) - 128;
1609                     tone.phase_shift = (2 * q->fft_coefs[j].offset + 1) << (7 - four_i);
1610                     tone.duration = i;
1611                     tone.time_index = 0;
1612
1613                     qdm2_fft_generate_tone(q, &tone);
1614                 }
1615             }
1616             q->fft_coefs_min_index[i] = j;
1617         }
1618 }
1619
1620
1621 static void qdm2_calculate_fft (QDM2Context *q, int channel, int sub_packet)
1622 {
1623     const float gain = (q->channels == 1 && q->nb_channels == 2) ? 0.5f : 1.0f;
1624     float *out = q->output_buffer + channel;
1625     int i;
1626     q->fft.complex[channel][0].re *= 2.0f;
1627     q->fft.complex[channel][0].im = 0.0f;
1628     q->rdft_ctx.rdft_calc(&q->rdft_ctx, (FFTSample *)q->fft.complex[channel]);
1629     /* add samples to output buffer */
1630     for (i = 0; i < FFALIGN(q->fft_size, 8); i++) {
1631         out[0]           += q->fft.complex[channel][i].re * gain;
1632         out[q->channels] += q->fft.complex[channel][i].im * gain;
1633         out += 2 * q->channels;
1634     }
1635 }
1636
1637
1638 /**
1639  * @param q        context
1640  * @param index    subpacket number
1641  */
1642 static void qdm2_synthesis_filter (QDM2Context *q, int index)
1643 {
1644     int i, k, ch, sb_used, sub_sampling, dither_state = 0;
1645
1646     /* copy sb_samples */
1647     sb_used = QDM2_SB_USED(q->sub_sampling);
1648
1649     for (ch = 0; ch < q->channels; ch++)
1650         for (i = 0; i < 8; i++)
1651             for (k=sb_used; k < SBLIMIT; k++)
1652                 q->sb_samples[ch][(8 * index) + i][k] = 0;
1653
1654     for (ch = 0; ch < q->nb_channels; ch++) {
1655         float *samples_ptr = q->samples + ch;
1656
1657         for (i = 0; i < 8; i++) {
1658             ff_mpa_synth_filter_float(&q->mpadsp,
1659                 q->synth_buf[ch], &(q->synth_buf_offset[ch]),
1660                 ff_mpa_synth_window_float, &dither_state,
1661                 samples_ptr, q->nb_channels,
1662                 q->sb_samples[ch][(8 * index) + i]);
1663             samples_ptr += 32 * q->nb_channels;
1664         }
1665     }
1666
1667     /* add samples to output buffer */
1668     sub_sampling = (4 >> q->sub_sampling);
1669
1670     for (ch = 0; ch < q->channels; ch++)
1671         for (i = 0; i < q->frame_size; i++)
1672             q->output_buffer[q->channels * i + ch] += (1 << 23) * q->samples[q->nb_channels * sub_sampling * i + ch];
1673 }
1674
1675
1676 /**
1677  * Init static data (does not depend on specific file)
1678  *
1679  * @param q    context
1680  */
1681 static av_cold void qdm2_init_static_data(AVCodec *codec) {
1682     qdm2_init_vlc();
1683     ff_mpa_synth_init_float(ff_mpa_synth_window_float);
1684     softclip_table_init();
1685     rnd_table_init();
1686     init_noise_samples();
1687 }
1688
1689
1690 /**
1691  * Init parameters from codec extradata
1692  */
1693 static av_cold int qdm2_decode_init(AVCodecContext *avctx)
1694 {
1695     QDM2Context *s = avctx->priv_data;
1696     uint8_t *extradata;
1697     int extradata_size;
1698     int tmp_val, tmp, size;
1699
1700     /* extradata parsing
1701
1702     Structure:
1703     wave {
1704         frma (QDM2)
1705         QDCA
1706         QDCP
1707     }
1708
1709     32  size (including this field)
1710     32  tag (=frma)
1711     32  type (=QDM2 or QDMC)
1712
1713     32  size (including this field, in bytes)
1714     32  tag (=QDCA) // maybe mandatory parameters
1715     32  unknown (=1)
1716     32  channels (=2)
1717     32  samplerate (=44100)
1718     32  bitrate (=96000)
1719     32  block size (=4096)
1720     32  frame size (=256) (for one channel)
1721     32  packet size (=1300)
1722
1723     32  size (including this field, in bytes)
1724     32  tag (=QDCP) // maybe some tuneable parameters
1725     32  float1 (=1.0)
1726     32  zero ?
1727     32  float2 (=1.0)
1728     32  float3 (=1.0)
1729     32  unknown (27)
1730     32  unknown (8)
1731     32  zero ?
1732     */
1733
1734     if (!avctx->extradata || (avctx->extradata_size < 48)) {
1735         av_log(avctx, AV_LOG_ERROR, "extradata missing or truncated\n");
1736         return -1;
1737     }
1738
1739     extradata = avctx->extradata;
1740     extradata_size = avctx->extradata_size;
1741
1742     while (extradata_size > 7) {
1743         if (!memcmp(extradata, "frmaQDM", 7))
1744             break;
1745         extradata++;
1746         extradata_size--;
1747     }
1748
1749     if (extradata_size < 12) {
1750         av_log(avctx, AV_LOG_ERROR, "not enough extradata (%i)\n",
1751                extradata_size);
1752         return -1;
1753     }
1754
1755     if (memcmp(extradata, "frmaQDM", 7)) {
1756         av_log(avctx, AV_LOG_ERROR, "invalid headers, QDM? not found\n");
1757         return -1;
1758     }
1759
1760     if (extradata[7] == 'C') {
1761 //        s->is_qdmc = 1;
1762         av_log(avctx, AV_LOG_ERROR, "stream is QDMC version 1, which is not supported\n");
1763         return -1;
1764     }
1765
1766     extradata += 8;
1767     extradata_size -= 8;
1768
1769     size = AV_RB32(extradata);
1770
1771     if(size > extradata_size){
1772         av_log(avctx, AV_LOG_ERROR, "extradata size too small, %i < %i\n",
1773                extradata_size, size);
1774         return -1;
1775     }
1776
1777     extradata += 4;
1778     av_log(avctx, AV_LOG_DEBUG, "size: %d\n", size);
1779     if (AV_RB32(extradata) != MKBETAG('Q','D','C','A')) {
1780         av_log(avctx, AV_LOG_ERROR, "invalid extradata, expecting QDCA\n");
1781         return -1;
1782     }
1783
1784     extradata += 8;
1785
1786     avctx->channels = s->nb_channels = s->channels = AV_RB32(extradata);
1787     extradata += 4;
1788     if (s->channels <= 0 || s->channels > MPA_MAX_CHANNELS)
1789         return AVERROR_INVALIDDATA;
1790     avctx->channel_layout = avctx->channels == 2 ? AV_CH_LAYOUT_STEREO :
1791                                                    AV_CH_LAYOUT_MONO;
1792
1793     avctx->sample_rate = AV_RB32(extradata);
1794     extradata += 4;
1795
1796     avctx->bit_rate = AV_RB32(extradata);
1797     extradata += 4;
1798
1799     s->group_size = AV_RB32(extradata);
1800     extradata += 4;
1801
1802     s->fft_size = AV_RB32(extradata);
1803     extradata += 4;
1804
1805     s->checksum_size = AV_RB32(extradata);
1806     if (s->checksum_size >= 1U << 28) {
1807         av_log(avctx, AV_LOG_ERROR, "data block size too large (%u)\n", s->checksum_size);
1808         return AVERROR_INVALIDDATA;
1809     }
1810
1811     s->fft_order = av_log2(s->fft_size) + 1;
1812
1813     // something like max decodable tones
1814     s->group_order = av_log2(s->group_size) + 1;
1815     s->frame_size = s->group_size / 16; // 16 iterations per super block
1816     if (s->frame_size > QDM2_MAX_FRAME_SIZE)
1817         return AVERROR_INVALIDDATA;
1818
1819     s->sub_sampling = s->fft_order - 7;
1820     s->frequency_range = 255 / (1 << (2 - s->sub_sampling));
1821
1822     switch ((s->sub_sampling * 2 + s->channels - 1)) {
1823         case 0: tmp = 40; break;
1824         case 1: tmp = 48; break;
1825         case 2: tmp = 56; break;
1826         case 3: tmp = 72; break;
1827         case 4: tmp = 80; break;
1828         case 5: tmp = 100;break;
1829         default: tmp=s->sub_sampling; break;
1830     }
1831     tmp_val = 0;
1832     if ((tmp * 1000) < avctx->bit_rate)  tmp_val = 1;
1833     if ((tmp * 1440) < avctx->bit_rate)  tmp_val = 2;
1834     if ((tmp * 1760) < avctx->bit_rate)  tmp_val = 3;
1835     if ((tmp * 2240) < avctx->bit_rate)  tmp_val = 4;
1836     s->cm_table_select = tmp_val;
1837
1838     if (s->sub_sampling == 0)
1839         tmp = 7999;
1840     else
1841         tmp = ((-(s->sub_sampling -1)) & 8000) + 20000;
1842     /*
1843     0: 7999 -> 0
1844     1: 20000 -> 2
1845     2: 28000 -> 2
1846     */
1847     if (tmp < 8000)
1848         s->coeff_per_sb_select = 0;
1849     else if (tmp <= 16000)
1850         s->coeff_per_sb_select = 1;
1851     else
1852         s->coeff_per_sb_select = 2;
1853
1854     // Fail on unknown fft order
1855     if ((s->fft_order < 7) || (s->fft_order > 9)) {
1856         av_log(avctx, AV_LOG_ERROR, "Unknown FFT order (%d), contact the developers!\n", s->fft_order);
1857         return -1;
1858     }
1859     if (s->fft_size != (1 << (s->fft_order - 1))) {
1860         av_log(avctx, AV_LOG_ERROR, "FFT size %d not power of 2.\n", s->fft_size);
1861         return AVERROR_INVALIDDATA;
1862     }
1863
1864     ff_rdft_init(&s->rdft_ctx, s->fft_order, IDFT_C2R);
1865     ff_mpadsp_init(&s->mpadsp);
1866
1867     avctx->sample_fmt = AV_SAMPLE_FMT_S16;
1868
1869     return 0;
1870 }
1871
1872
1873 static av_cold int qdm2_decode_close(AVCodecContext *avctx)
1874 {
1875     QDM2Context *s = avctx->priv_data;
1876
1877     ff_rdft_end(&s->rdft_ctx);
1878
1879     return 0;
1880 }
1881
1882
1883 static int qdm2_decode (QDM2Context *q, const uint8_t *in, int16_t *out)
1884 {
1885     int ch, i;
1886     const int frame_size = (q->frame_size * q->channels);
1887
1888     /* select input buffer */
1889     q->compressed_data = in;
1890     q->compressed_size = q->checksum_size;
1891
1892     /* copy old block, clear new block of output samples */
1893     memmove(q->output_buffer, &q->output_buffer[frame_size], frame_size * sizeof(float));
1894     memset(&q->output_buffer[frame_size], 0, frame_size * sizeof(float));
1895
1896     /* decode block of QDM2 compressed data */
1897     if (q->sub_packet == 0) {
1898         q->has_errors = 0; // zero it for a new super block
1899         av_log(NULL,AV_LOG_DEBUG,"Superblock follows\n");
1900         qdm2_decode_super_block(q);
1901     }
1902
1903     /* parse subpackets */
1904     if (!q->has_errors) {
1905         if (q->sub_packet == 2)
1906             qdm2_decode_fft_packets(q);
1907
1908         qdm2_fft_tone_synthesizer(q, q->sub_packet);
1909     }
1910
1911     /* sound synthesis stage 1 (FFT) */
1912     for (ch = 0; ch < q->channels; ch++) {
1913         qdm2_calculate_fft(q, ch, q->sub_packet);
1914
1915         if (!q->has_errors && q->sub_packet_list_C[0].packet != NULL) {
1916             SAMPLES_NEEDED_2("has errors, and C list is not empty")
1917             return -1;
1918         }
1919     }
1920
1921     /* sound synthesis stage 2 (MPEG audio like synthesis filter) */
1922     if (!q->has_errors && q->do_synth_filter)
1923         qdm2_synthesis_filter(q, q->sub_packet);
1924
1925     q->sub_packet = (q->sub_packet + 1) % 16;
1926
1927     /* clip and convert output float[] to 16bit signed samples */
1928     for (i = 0; i < frame_size; i++) {
1929         int value = (int)q->output_buffer[i];
1930
1931         if (value > SOFTCLIP_THRESHOLD)
1932             value = (value >  HARDCLIP_THRESHOLD) ?  32767 :  softclip_table[ value - SOFTCLIP_THRESHOLD];
1933         else if (value < -SOFTCLIP_THRESHOLD)
1934             value = (value < -HARDCLIP_THRESHOLD) ? -32767 : -softclip_table[-value - SOFTCLIP_THRESHOLD];
1935
1936         out[i] = value;
1937     }
1938
1939     return 0;
1940 }
1941
1942
1943 static int qdm2_decode_frame(AVCodecContext *avctx, void *data,
1944                              int *got_frame_ptr, AVPacket *avpkt)
1945 {
1946     AVFrame *frame     = data;
1947     const uint8_t *buf = avpkt->data;
1948     int buf_size = avpkt->size;
1949     QDM2Context *s = avctx->priv_data;
1950     int16_t *out;
1951     int i, ret;
1952
1953     if(!buf)
1954         return 0;
1955     if(buf_size < s->checksum_size)
1956         return -1;
1957
1958     /* get output buffer */
1959     frame->nb_samples = 16 * s->frame_size;
1960     if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
1961         av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1962         return ret;
1963     }
1964     out = (int16_t *)frame->data[0];
1965
1966     for (i = 0; i < 16; i++) {
1967         if (qdm2_decode(s, buf, out) < 0)
1968             return -1;
1969         out += s->channels * s->frame_size;
1970     }
1971
1972     *got_frame_ptr = 1;
1973
1974     return s->checksum_size;
1975 }
1976
1977 AVCodec ff_qdm2_decoder =
1978 {
1979     .name             = "qdm2",
1980     .type             = AVMEDIA_TYPE_AUDIO,
1981     .id               = AV_CODEC_ID_QDM2,
1982     .priv_data_size   = sizeof(QDM2Context),
1983     .init             = qdm2_decode_init,
1984     .init_static_data = qdm2_init_static_data,
1985     .close            = qdm2_decode_close,
1986     .decode           = qdm2_decode_frame,
1987     .capabilities     = CODEC_CAP_DR1,
1988     .long_name        = NULL_IF_CONFIG_SMALL("QDesign Music Codec 2"),
1989 };