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