libavcodec/takdec.c
Go to the documentation of this file.
1 /*
2  * TAK decoder
3  * Copyright (c) 2012 Paul B Mahol
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * TAK (Tom's lossless Audio Kompressor) decoder
25  * @author Paul B Mahol
26  */
27 
28 #include "libavutil/internal.h"
29 #include "libavutil/samplefmt.h"
30 #include "tak.h"
31 #include "avcodec.h"
32 #include "dsputil.h"
33 #include "internal.h"
34 #include "unary.h"
35 
36 #define MAX_SUBFRAMES 8 ///< max number of subframes per channel
37 #define MAX_PREDICTORS 256
38 
39 typedef struct MCDParam {
40  int8_t present; ///< decorrelation parameter availability for this channel
41  int8_t index; ///< index into array of decorrelation types
42  int8_t chan1;
43  int8_t chan2;
44 } MCDParam;
45 
46 typedef struct TAKDecContext {
47  AVCodecContext *avctx; ///< parent AVCodecContext
50  GetBitContext gb; ///< bitstream reader initialized to start at the current frame
51 
52  int uval;
53  int nb_samples; ///< number of samples in the current frame
55  unsigned int decode_buffer_size;
56  int32_t *decoded[TAK_MAX_CHANNELS]; ///< decoded samples for each channel
57 
58  int8_t lpc_mode[TAK_MAX_CHANNELS];
59  int8_t sample_shift[TAK_MAX_CHANNELS]; ///< shift applied to every sample in the channel
60  int16_t predictors[MAX_PREDICTORS];
61  int nb_subframes; ///< number of subframes in the current frame
62  int16_t subframe_len[MAX_SUBFRAMES]; ///< subframe length in samples
64 
65  int8_t dmode; ///< channel decorrelation type in the current frame
66 
67  MCDParam mcdparams[TAK_MAX_CHANNELS]; ///< multichannel decorrelation parameters
68 
69  int8_t coding_mode[128];
70  DECLARE_ALIGNED(16, int16_t, filter)[MAX_PREDICTORS];
71  DECLARE_ALIGNED(16, int16_t, residues)[544];
73 
74 static const int8_t mc_dmodes[] = { 1, 3, 4, 6, };
75 
76 static const uint16_t predictor_sizes[] = {
77  4, 8, 12, 16, 24, 32, 48, 64, 80, 96, 128, 160, 192, 224, 256, 0,
78 };
79 
80 static const struct CParam {
81  int init;
82  int escape;
83  int scale;
84  int aescape;
85  int bias;
86 } xcodes[50] = {
87  { 0x01, 0x0000001, 0x0000001, 0x0000003, 0x0000008 },
88  { 0x02, 0x0000003, 0x0000001, 0x0000007, 0x0000006 },
89  { 0x03, 0x0000005, 0x0000002, 0x000000E, 0x000000D },
90  { 0x03, 0x0000003, 0x0000003, 0x000000D, 0x0000018 },
91  { 0x04, 0x000000B, 0x0000004, 0x000001C, 0x0000019 },
92  { 0x04, 0x0000006, 0x0000006, 0x000001A, 0x0000030 },
93  { 0x05, 0x0000016, 0x0000008, 0x0000038, 0x0000032 },
94  { 0x05, 0x000000C, 0x000000C, 0x0000034, 0x0000060 },
95  { 0x06, 0x000002C, 0x0000010, 0x0000070, 0x0000064 },
96  { 0x06, 0x0000018, 0x0000018, 0x0000068, 0x00000C0 },
97  { 0x07, 0x0000058, 0x0000020, 0x00000E0, 0x00000C8 },
98  { 0x07, 0x0000030, 0x0000030, 0x00000D0, 0x0000180 },
99  { 0x08, 0x00000B0, 0x0000040, 0x00001C0, 0x0000190 },
100  { 0x08, 0x0000060, 0x0000060, 0x00001A0, 0x0000300 },
101  { 0x09, 0x0000160, 0x0000080, 0x0000380, 0x0000320 },
102  { 0x09, 0x00000C0, 0x00000C0, 0x0000340, 0x0000600 },
103  { 0x0A, 0x00002C0, 0x0000100, 0x0000700, 0x0000640 },
104  { 0x0A, 0x0000180, 0x0000180, 0x0000680, 0x0000C00 },
105  { 0x0B, 0x0000580, 0x0000200, 0x0000E00, 0x0000C80 },
106  { 0x0B, 0x0000300, 0x0000300, 0x0000D00, 0x0001800 },
107  { 0x0C, 0x0000B00, 0x0000400, 0x0001C00, 0x0001900 },
108  { 0x0C, 0x0000600, 0x0000600, 0x0001A00, 0x0003000 },
109  { 0x0D, 0x0001600, 0x0000800, 0x0003800, 0x0003200 },
110  { 0x0D, 0x0000C00, 0x0000C00, 0x0003400, 0x0006000 },
111  { 0x0E, 0x0002C00, 0x0001000, 0x0007000, 0x0006400 },
112  { 0x0E, 0x0001800, 0x0001800, 0x0006800, 0x000C000 },
113  { 0x0F, 0x0005800, 0x0002000, 0x000E000, 0x000C800 },
114  { 0x0F, 0x0003000, 0x0003000, 0x000D000, 0x0018000 },
115  { 0x10, 0x000B000, 0x0004000, 0x001C000, 0x0019000 },
116  { 0x10, 0x0006000, 0x0006000, 0x001A000, 0x0030000 },
117  { 0x11, 0x0016000, 0x0008000, 0x0038000, 0x0032000 },
118  { 0x11, 0x000C000, 0x000C000, 0x0034000, 0x0060000 },
119  { 0x12, 0x002C000, 0x0010000, 0x0070000, 0x0064000 },
120  { 0x12, 0x0018000, 0x0018000, 0x0068000, 0x00C0000 },
121  { 0x13, 0x0058000, 0x0020000, 0x00E0000, 0x00C8000 },
122  { 0x13, 0x0030000, 0x0030000, 0x00D0000, 0x0180000 },
123  { 0x14, 0x00B0000, 0x0040000, 0x01C0000, 0x0190000 },
124  { 0x14, 0x0060000, 0x0060000, 0x01A0000, 0x0300000 },
125  { 0x15, 0x0160000, 0x0080000, 0x0380000, 0x0320000 },
126  { 0x15, 0x00C0000, 0x00C0000, 0x0340000, 0x0600000 },
127  { 0x16, 0x02C0000, 0x0100000, 0x0700000, 0x0640000 },
128  { 0x16, 0x0180000, 0x0180000, 0x0680000, 0x0C00000 },
129  { 0x17, 0x0580000, 0x0200000, 0x0E00000, 0x0C80000 },
130  { 0x17, 0x0300000, 0x0300000, 0x0D00000, 0x1800000 },
131  { 0x18, 0x0B00000, 0x0400000, 0x1C00000, 0x1900000 },
132  { 0x18, 0x0600000, 0x0600000, 0x1A00000, 0x3000000 },
133  { 0x19, 0x1600000, 0x0800000, 0x3800000, 0x3200000 },
134  { 0x19, 0x0C00000, 0x0C00000, 0x3400000, 0x6000000 },
135  { 0x1A, 0x2C00000, 0x1000000, 0x7000000, 0x6400000 },
136  { 0x1A, 0x1800000, 0x1800000, 0x6800000, 0xC000000 },
137 };
138 
139 static int set_bps_params(AVCodecContext *avctx)
140 {
141  switch (avctx->bits_per_raw_sample) {
142  case 8:
143  avctx->sample_fmt = AV_SAMPLE_FMT_U8P;
144  break;
145  case 16:
147  break;
148  case 24:
150  break;
151  default:
152  av_log(avctx, AV_LOG_ERROR, "invalid/unsupported bits per sample: %d\n",
153  avctx->bits_per_raw_sample);
154  return AVERROR_INVALIDDATA;
155  }
156 
157  return 0;
158 }
159 
161 {
162  TAKDecContext *s = avctx->priv_data;
163  int shift = 3 - (avctx->sample_rate / 11025);
164  shift = FFMAX(0, shift);
165  s->uval = FFALIGN(avctx->sample_rate + 511 >> 9, 4) << shift;
166  s->subframe_scale = FFALIGN(avctx->sample_rate + 511 >> 9, 4) << 1;
167 }
168 
170 {
171  TAKDecContext *s = avctx->priv_data;
172 
173  ff_tak_init_crc();
174  ff_dsputil_init(&s->dsp, avctx);
175 
176  s->avctx = avctx;
178 
179  set_sample_rate_params(avctx);
180 
181  return set_bps_params(avctx);
182 }
183 
184 static void decode_lpc(int32_t *coeffs, int mode, int length)
185 {
186  int i;
187 
188  if (length < 2)
189  return;
190 
191  if (mode == 1) {
192  int a1 = *coeffs++;
193  for (i = 0; i < length - 1 >> 1; i++) {
194  *coeffs += a1;
195  coeffs[1] += *coeffs;
196  a1 = coeffs[1];
197  coeffs += 2;
198  }
199  if (length - 1 & 1)
200  *coeffs += a1;
201  } else if (mode == 2) {
202  int a1 = coeffs[1];
203  int a2 = a1 + *coeffs;
204  coeffs[1] = a2;
205  if (length > 2) {
206  coeffs += 2;
207  for (i = 0; i < length - 2 >> 1; i++) {
208  int a3 = *coeffs + a1;
209  int a4 = a3 + a2;
210  *coeffs = a4;
211  a1 = coeffs[1] + a3;
212  a2 = a1 + a4;
213  coeffs[1] = a2;
214  coeffs += 2;
215  }
216  if (length & 1)
217  *coeffs += a1 + a2;
218  }
219  } else if (mode == 3) {
220  int a1 = coeffs[1];
221  int a2 = a1 + *coeffs;
222  coeffs[1] = a2;
223  if (length > 2) {
224  int a3 = coeffs[2];
225  int a4 = a3 + a1;
226  int a5 = a4 + a2;
227  coeffs += 3;
228  for (i = 0; i < length - 3; i++) {
229  a3 += *coeffs;
230  a4 += a3;
231  a5 += a4;
232  *coeffs = a5;
233  coeffs++;
234  }
235  }
236  }
237 }
238 
239 static int decode_segment(TAKDecContext *s, int8_t mode, int32_t *decoded, int len)
240 {
241  struct CParam code;
242  GetBitContext *gb = &s->gb;
243  int i;
244 
245  if (!mode) {
246  memset(decoded, 0, len * sizeof(*decoded));
247  return 0;
248  }
249 
250  if (mode > FF_ARRAY_ELEMS(xcodes))
251  return AVERROR_INVALIDDATA;
252  code = xcodes[mode - 1];
253 
254  for (i = 0; i < len; i++) {
255  int x = get_bits_long(gb, code.init);
256  if (x >= code.escape && get_bits1(gb)) {
257  x |= 1 << code.init;
258  if (x >= code.aescape) {
259  int scale = get_unary(gb, 1, 9);
260  if (scale == 9) {
261  int scale_bits = get_bits(gb, 3);
262  if (scale_bits > 0) {
263  if (scale_bits == 7) {
264  scale_bits += get_bits(gb, 5);
265  if (scale_bits > 29)
266  return AVERROR_INVALIDDATA;
267  }
268  scale = get_bits_long(gb, scale_bits) + 1;
269  x += code.scale * scale;
270  }
271  x += code.bias;
272  } else
273  x += code.scale * scale - code.escape;
274  } else
275  x -= code.escape;
276  }
277  decoded[i] = (x >> 1) ^ -(x & 1);
278  }
279 
280  return 0;
281 }
282 
283 static int decode_residues(TAKDecContext *s, int32_t *decoded, int length)
284 {
285  GetBitContext *gb = &s->gb;
286  int i, mode, ret;
287 
288  if (length > s->nb_samples)
289  return AVERROR_INVALIDDATA;
290 
291  if (get_bits1(gb)) {
292  int wlength, rval;
293 
294  wlength = length / s->uval;
295 
296  rval = length - (wlength * s->uval);
297 
298  if (rval < s->uval / 2)
299  rval += s->uval;
300  else
301  wlength++;
302 
303  if (wlength <= 1 || wlength > 128)
304  return AVERROR_INVALIDDATA;
305 
306  s->coding_mode[0] = mode = get_bits(gb, 6);
307 
308  for (i = 1; i < wlength; i++) {
309  int c = get_unary(gb, 1, 6);
310 
311  switch (c) {
312  case 6:
313  mode = get_bits(gb, 6);
314  break;
315  case 5:
316  case 4:
317  case 3: {
318  /* mode += sign ? (1 - c) : (c - 1) */
319  int sign = get_bits1(gb);
320  mode += (-sign ^ (c - 1)) + sign;
321  break;
322  }
323  case 2:
324  mode++;
325  break;
326  case 1:
327  mode--;
328  break;
329  }
330  s->coding_mode[i] = mode;
331  }
332 
333  i = 0;
334  while (i < wlength) {
335  int len = 0;
336 
337  mode = s->coding_mode[i];
338  do {
339  if (i >= wlength - 1)
340  len += rval;
341  else
342  len += s->uval;
343  i++;
344 
345  if (i == wlength)
346  break;
347  } while (s->coding_mode[i] == mode);
348 
349  if ((ret = decode_segment(s, mode, decoded, len)) < 0)
350  return ret;
351  decoded += len;
352  }
353  } else {
354  mode = get_bits(gb, 6);
355  if ((ret = decode_segment(s, mode, decoded, length)) < 0)
356  return ret;
357  }
358 
359  return 0;
360 }
361 
363 {
364  if (get_bits1(gb))
365  return get_bits(gb, 4) + 1;
366  else
367  return 0;
368 }
369 
370 static int decode_subframe(TAKDecContext *s, int32_t *decoded,
371  int subframe_size, int prev_subframe_size)
372 {
373  GetBitContext *gb = &s->gb;
374  int tmp, x, y, i, j, ret = 0;
375  int dshift, size, filter_quant, filter_order;
376  int tfilter[MAX_PREDICTORS];
377 
378  if (!get_bits1(gb))
379  return decode_residues(s, decoded, subframe_size);
380 
381  filter_order = predictor_sizes[get_bits(gb, 4)];
382 
383  if (prev_subframe_size > 0 && get_bits1(gb)) {
384  if (filter_order > prev_subframe_size)
385  return AVERROR_INVALIDDATA;
386 
387  decoded -= filter_order;
388  subframe_size += filter_order;
389 
390  if (filter_order > subframe_size)
391  return AVERROR_INVALIDDATA;
392  } else {
393  int lpc_mode;
394 
395  if (filter_order > subframe_size)
396  return AVERROR_INVALIDDATA;
397 
398  lpc_mode = get_bits(gb, 2);
399  if (lpc_mode > 2)
400  return AVERROR_INVALIDDATA;
401 
402  if ((ret = decode_residues(s, decoded, filter_order)) < 0)
403  return ret;
404 
405  if (lpc_mode)
406  decode_lpc(decoded, lpc_mode, filter_order);
407  }
408 
409  dshift = get_bits_esc4(gb);
410  size = get_bits1(gb) + 6;
411 
412  filter_quant = 10;
413  if (get_bits1(gb)) {
414  filter_quant -= get_bits(gb, 3) + 1;
415  if (filter_quant < 3)
416  return AVERROR_INVALIDDATA;
417  }
418 
419  s->predictors[0] = get_sbits(gb, 10);
420  s->predictors[1] = get_sbits(gb, 10);
421  s->predictors[2] = get_sbits(gb, size) << (10 - size);
422  s->predictors[3] = get_sbits(gb, size) << (10 - size);
423  if (filter_order > 4) {
424  tmp = size - get_bits1(gb);
425 
426  for (i = 4; i < filter_order; i++) {
427  if (!(i & 3))
428  x = tmp - get_bits(gb, 2);
429  s->predictors[i] = get_sbits(gb, x) << (10 - size);
430  }
431  }
432 
433  tfilter[0] = s->predictors[0] << 6;
434  for (i = 1; i < filter_order; i++) {
435  int32_t *p1 = &tfilter[0];
436  int32_t *p2 = &tfilter[i - 1];
437 
438  for (j = 0; j < (i + 1) / 2; j++) {
439  x = *p1 + (s->predictors[i] * *p2 + 256 >> 9);
440  *p2 += s->predictors[i] * *p1 + 256 >> 9;
441  *p1++ = x;
442  p2--;
443  }
444 
445  tfilter[i] = s->predictors[i] << 6;
446  }
447 
448  x = 1 << (32 - (15 - filter_quant));
449  y = 1 << ((15 - filter_quant) - 1);
450  for (i = 0, j = filter_order - 1; i < filter_order / 2; i++, j--) {
451  tmp = y + tfilter[j];
452  s->filter[j] = x - ((tfilter[i] + y) >> (15 - filter_quant));
453  s->filter[i] = x - ((tfilter[j] + y) >> (15 - filter_quant));
454  }
455 
456  if ((ret = decode_residues(s, &decoded[filter_order],
457  subframe_size - filter_order)) < 0)
458  return ret;
459 
460  for (i = 0; i < filter_order; i++)
461  s->residues[i] = *decoded++ >> dshift;
462 
463  y = FF_ARRAY_ELEMS(s->residues) - filter_order;
464  x = subframe_size - filter_order;
465  while (x > 0) {
466  tmp = FFMIN(y, x);
467 
468  for (i = 0; i < tmp; i++) {
469  int v = 1 << (filter_quant - 1);
470 
471  if (!(filter_order & 15)) {
472  v += s->dsp.scalarproduct_int16(&s->residues[i], s->filter,
473  filter_order);
474  } else if (filter_order & 4) {
475  for (j = 0; j < filter_order; j += 4) {
476  v += s->residues[i + j + 3] * s->filter[j + 3] +
477  s->residues[i + j + 2] * s->filter[j + 2] +
478  s->residues[i + j + 1] * s->filter[j + 1] +
479  s->residues[i + j ] * s->filter[j ];
480  }
481  } else {
482  for (j = 0; j < filter_order; j += 8) {
483  v += s->residues[i + j + 7] * s->filter[j + 7] +
484  s->residues[i + j + 6] * s->filter[j + 6] +
485  s->residues[i + j + 5] * s->filter[j + 5] +
486  s->residues[i + j + 4] * s->filter[j + 4] +
487  s->residues[i + j + 3] * s->filter[j + 3] +
488  s->residues[i + j + 2] * s->filter[j + 2] +
489  s->residues[i + j + 1] * s->filter[j + 1] +
490  s->residues[i + j ] * s->filter[j ];
491  }
492  }
493  v = (av_clip(v >> filter_quant, -8192, 8191) << dshift) - *decoded;
494  *decoded++ = v;
495  s->residues[filter_order + i] = v >> dshift;
496  }
497 
498  x -= tmp;
499  if (x > 0)
500  memcpy(s->residues, &s->residues[y], 2 * filter_order);
501  }
502 
503  emms_c();
504 
505  return 0;
506 }
507 
508 static int decode_channel(TAKDecContext *s, int chan)
509 {
510  AVCodecContext *avctx = s->avctx;
511  GetBitContext *gb = &s->gb;
512  int32_t *decoded = s->decoded[chan];
513  int left = s->nb_samples - 1;
514  int i = 0, ret, prev = 0;
515 
516  s->sample_shift[chan] = get_bits_esc4(gb);
517  if (s->sample_shift[chan] >= avctx->bits_per_raw_sample)
518  return AVERROR_INVALIDDATA;
519 
520  *decoded++ = get_sbits(gb, avctx->bits_per_raw_sample - s->sample_shift[chan]);
521  s->lpc_mode[chan] = get_bits(gb, 2);
522  s->nb_subframes = get_bits(gb, 3) + 1;
523 
524  if (s->nb_subframes > 1) {
525  if (get_bits_left(gb) < (s->nb_subframes - 1) * 6)
526  return AVERROR_INVALIDDATA;
527 
528  for (; i < s->nb_subframes - 1; i++) {
529  int v = get_bits(gb, 6);
530 
531  s->subframe_len[i] = (v - prev) * s->subframe_scale;
532  if (s->subframe_len[i] <= 0)
533  return AVERROR_INVALIDDATA;
534 
535  left -= s->subframe_len[i];
536  prev = v;
537  }
538 
539  if (left <= 0)
540  return AVERROR_INVALIDDATA;
541  }
542  s->subframe_len[i] = left;
543 
544  prev = 0;
545  for (i = 0; i < s->nb_subframes; i++) {
546  if ((ret = decode_subframe(s, decoded, s->subframe_len[i], prev)) < 0)
547  return ret;
548  decoded += s->subframe_len[i];
549  prev = s->subframe_len[i];
550  }
551 
552  return 0;
553 }
554 
555 static int decorrelate(TAKDecContext *s, int c1, int c2, int length)
556 {
557  GetBitContext *gb = &s->gb;
558  int32_t *p1 = s->decoded[c1] + 1;
559  int32_t *p2 = s->decoded[c2] + 1;
560  int i;
561  int dshift, dfactor;
562 
563  switch (s->dmode) {
564  case 1: /* left/side */
565  for (i = 0; i < length; i++) {
566  int32_t a = p1[i];
567  int32_t b = p2[i];
568  p2[i] = a + b;
569  }
570  break;
571  case 2: /* side/right */
572  for (i = 0; i < length; i++) {
573  int32_t a = p1[i];
574  int32_t b = p2[i];
575  p1[i] = b - a;
576  }
577  break;
578  case 3: /* side/mid */
579  for (i = 0; i < length; i++) {
580  int32_t a = p1[i];
581  int32_t b = p2[i];
582  a -= b >> 1;
583  p1[i] = a;
584  p2[i] = a + b;
585  }
586  break;
587  case 4: /* side/left with scale factor */
588  FFSWAP(int32_t*, p1, p2);
589  case 5: /* side/right with scale factor */
590  dshift = get_bits_esc4(gb);
591  dfactor = get_sbits(gb, 10);
592  for (i = 0; i < length; i++) {
593  int32_t a = p1[i];
594  int32_t b = p2[i];
595  b = dfactor * (b >> dshift) + 128 >> 8 << dshift;
596  p1[i] = b - a;
597  }
598  break;
599  case 6:
600  FFSWAP(int32_t*, p1, p2);
601  case 7: {
602  int length2, order_half, filter_order, dval1, dval2;
603  int tmp, x, code_size;
604 
605  if (length < 256)
606  return AVERROR_INVALIDDATA;
607 
608  dshift = get_bits_esc4(gb);
609  filter_order = 8 << get_bits1(gb);
610  dval1 = get_bits1(gb);
611  dval2 = get_bits1(gb);
612 
613  for (i = 0; i < filter_order; i++) {
614  if (!(i & 3))
615  code_size = 14 - get_bits(gb, 3);
616  s->filter[i] = get_sbits(gb, code_size);
617  }
618 
619  order_half = filter_order / 2;
620  length2 = length - (filter_order - 1);
621 
622  /* decorrelate beginning samples */
623  if (dval1) {
624  for (i = 0; i < order_half; i++) {
625  int32_t a = p1[i];
626  int32_t b = p2[i];
627  p1[i] = a + b;
628  }
629  }
630 
631  /* decorrelate ending samples */
632  if (dval2) {
633  for (i = length2 + order_half; i < length; i++) {
634  int32_t a = p1[i];
635  int32_t b = p2[i];
636  p1[i] = a + b;
637  }
638  }
639 
640 
641  for (i = 0; i < filter_order; i++)
642  s->residues[i] = *p2++ >> dshift;
643 
644  p1 += order_half;
645  x = FF_ARRAY_ELEMS(s->residues) - filter_order;
646  for (; length2 > 0; length2 -= tmp) {
647  tmp = FFMIN(length2, x);
648 
649  for (i = 0; i < tmp; i++)
650  s->residues[filter_order + i] = *p2++ >> dshift;
651 
652  for (i = 0; i < tmp; i++) {
653  int v = 1 << 9;
654 
655  if (filter_order == 16) {
656  v += s->dsp.scalarproduct_int16(&s->residues[i], s->filter,
657  filter_order);
658  } else {
659  v += s->residues[i + 7] * s->filter[7] +
660  s->residues[i + 6] * s->filter[6] +
661  s->residues[i + 5] * s->filter[5] +
662  s->residues[i + 4] * s->filter[4] +
663  s->residues[i + 3] * s->filter[3] +
664  s->residues[i + 2] * s->filter[2] +
665  s->residues[i + 1] * s->filter[1] +
666  s->residues[i ] * s->filter[0];
667  }
668 
669  v = (av_clip(v >> 10, -8192, 8191) << dshift) - *p1;
670  *p1++ = v;
671  }
672 
673  memcpy(s->residues, &s->residues[tmp], 2 * filter_order);
674  }
675 
676  emms_c();
677  break;
678  }
679  }
680 
681  return 0;
682 }
683 
684 static int tak_decode_frame(AVCodecContext *avctx, void *data,
685  int *got_frame_ptr, AVPacket *pkt)
686 {
687  TAKDecContext *s = avctx->priv_data;
688  AVFrame *frame = data;
689  GetBitContext *gb = &s->gb;
690  int chan, i, ret, hsize;
691 
692  if (pkt->size < TAK_MIN_FRAME_HEADER_BYTES)
693  return AVERROR_INVALIDDATA;
694 
695  if ((ret = init_get_bits8(gb, pkt->data, pkt->size)) < 0)
696  return ret;
697 
698  if ((ret = ff_tak_decode_frame_header(avctx, gb, &s->ti, 0)) < 0)
699  return ret;
700 
701  if (avctx->err_recognition & AV_EF_CRCCHECK) {
702  hsize = get_bits_count(gb) / 8;
703  if (ff_tak_check_crc(pkt->data, hsize)) {
704  av_log(avctx, AV_LOG_ERROR, "CRC error\n");
705  return AVERROR_INVALIDDATA;
706  }
707  }
708 
709  if (s->ti.codec != TAK_CODEC_MONO_STEREO &&
711  av_log(avctx, AV_LOG_ERROR, "unsupported codec: %d\n", s->ti.codec);
712  return AVERROR_PATCHWELCOME;
713  }
714  if (s->ti.data_type) {
715  av_log(avctx, AV_LOG_ERROR,
716  "unsupported data type: %d\n", s->ti.data_type);
717  return AVERROR_INVALIDDATA;
718  }
719  if (s->ti.codec == TAK_CODEC_MONO_STEREO && s->ti.channels > 2) {
720  av_log(avctx, AV_LOG_ERROR,
721  "invalid number of channels: %d\n", s->ti.channels);
722  return AVERROR_INVALIDDATA;
723  }
724  if (s->ti.channels > 6) {
725  av_log(avctx, AV_LOG_ERROR,
726  "unsupported number of channels: %d\n", s->ti.channels);
727  return AVERROR_INVALIDDATA;
728  }
729 
730  if (s->ti.frame_samples <= 0) {
731  av_log(avctx, AV_LOG_ERROR, "unsupported/invalid number of samples\n");
732  return AVERROR_INVALIDDATA;
733  }
734 
735  if (s->ti.bps != avctx->bits_per_raw_sample) {
736  avctx->bits_per_raw_sample = s->ti.bps;
737  if ((ret = set_bps_params(avctx)) < 0)
738  return ret;
739  }
740  if (s->ti.sample_rate != avctx->sample_rate) {
741  avctx->sample_rate = s->ti.sample_rate;
742  set_sample_rate_params(avctx);
743  }
744  if (s->ti.ch_layout)
745  avctx->channel_layout = s->ti.ch_layout;
746  avctx->channels = s->ti.channels;
747 
749  : s->ti.frame_samples;
750 
751  frame->nb_samples = s->nb_samples;
752  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
753  return ret;
754 
755  if (avctx->bits_per_raw_sample <= 16) {
756  int buf_size = av_samples_get_buffer_size(NULL, avctx->channels,
757  s->nb_samples,
758  AV_SAMPLE_FMT_S32P, 0);
759  av_fast_malloc(&s->decode_buffer, &s->decode_buffer_size, buf_size);
760  if (!s->decode_buffer)
761  return AVERROR(ENOMEM);
763  s->decode_buffer, avctx->channels,
765  if (ret < 0)
766  return ret;
767  } else {
768  for (chan = 0; chan < avctx->channels; chan++)
769  s->decoded[chan] = (int32_t *)frame->extended_data[chan];
770  }
771 
772  if (s->nb_samples < 16) {
773  for (chan = 0; chan < avctx->channels; chan++) {
774  int32_t *decoded = s->decoded[chan];
775  for (i = 0; i < s->nb_samples; i++)
776  decoded[i] = get_sbits(gb, avctx->bits_per_raw_sample);
777  }
778  } else {
779  if (s->ti.codec == TAK_CODEC_MONO_STEREO) {
780  for (chan = 0; chan < avctx->channels; chan++)
781  if (ret = decode_channel(s, chan))
782  return ret;
783 
784  if (avctx->channels == 2) {
785  s->nb_subframes = get_bits(gb, 1) + 1;
786  if (s->nb_subframes > 1) {
787  s->subframe_len[1] = get_bits(gb, 6);
788  }
789 
790  s->dmode = get_bits(gb, 3);
791  if (ret = decorrelate(s, 0, 1, s->nb_samples - 1))
792  return ret;
793  }
794  } else if (s->ti.codec == TAK_CODEC_MULTICHANNEL) {
795  if (get_bits1(gb)) {
796  int ch_mask = 0;
797 
798  chan = get_bits(gb, 4) + 1;
799  if (chan > avctx->channels)
800  return AVERROR_INVALIDDATA;
801 
802  for (i = 0; i < chan; i++) {
803  int nbit = get_bits(gb, 4);
804 
805  if (nbit >= avctx->channels)
806  return AVERROR_INVALIDDATA;
807 
808  if (ch_mask & 1 << nbit)
809  return AVERROR_INVALIDDATA;
810 
811  s->mcdparams[i].present = get_bits1(gb);
812  if (s->mcdparams[i].present) {
813  s->mcdparams[i].index = get_bits(gb, 2);
814  s->mcdparams[i].chan2 = get_bits(gb, 4);
815  if (s->mcdparams[i].index == 1) {
816  if ((nbit == s->mcdparams[i].chan2) ||
817  (ch_mask & 1 << s->mcdparams[i].chan2))
818  return AVERROR_INVALIDDATA;
819 
820  ch_mask |= 1 << s->mcdparams[i].chan2;
821  } else if (!(ch_mask & 1 << s->mcdparams[i].chan2)) {
822  return AVERROR_INVALIDDATA;
823  }
824  }
825  s->mcdparams[i].chan1 = nbit;
826 
827  ch_mask |= 1 << nbit;
828  }
829  } else {
830  chan = avctx->channels;
831  for (i = 0; i < chan; i++) {
832  s->mcdparams[i].present = 0;
833  s->mcdparams[i].chan1 = i;
834  }
835  }
836 
837  for (i = 0; i < chan; i++) {
838  if (s->mcdparams[i].present && s->mcdparams[i].index == 1)
839  if (ret = decode_channel(s, s->mcdparams[i].chan2))
840  return ret;
841 
842  if (ret = decode_channel(s, s->mcdparams[i].chan1))
843  return ret;
844 
845  if (s->mcdparams[i].present) {
846  s->dmode = mc_dmodes[s->mcdparams[i].index];
847  if (ret = decorrelate(s,
848  s->mcdparams[i].chan2,
849  s->mcdparams[i].chan1,
850  s->nb_samples - 1))
851  return ret;
852  }
853  }
854  }
855 
856  for (chan = 0; chan < avctx->channels; chan++) {
857  int32_t *decoded = s->decoded[chan];
858 
859  if (s->lpc_mode[chan])
860  decode_lpc(decoded, s->lpc_mode[chan], s->nb_samples);
861 
862  if (s->sample_shift[chan] > 0)
863  for (i = 0; i < s->nb_samples; i++)
864  decoded[i] <<= s->sample_shift[chan];
865  }
866  }
867 
868  align_get_bits(gb);
869  skip_bits(gb, 24);
870  if (get_bits_left(gb) < 0)
871  av_log(avctx, AV_LOG_DEBUG, "overread\n");
872  else if (get_bits_left(gb) > 0)
873  av_log(avctx, AV_LOG_DEBUG, "underread\n");
874 
875  if (avctx->err_recognition & AV_EF_CRCCHECK) {
876  if (ff_tak_check_crc(pkt->data + hsize,
877  get_bits_count(gb) / 8 - hsize)) {
878  av_log(avctx, AV_LOG_ERROR, "CRC error\n");
879  return AVERROR_INVALIDDATA;
880  }
881  }
882 
883  /* convert to output buffer */
884  switch (avctx->sample_fmt) {
885  case AV_SAMPLE_FMT_U8P:
886  for (chan = 0; chan < avctx->channels; chan++) {
887  uint8_t *samples = (uint8_t *)frame->extended_data[chan];
888  int32_t *decoded = s->decoded[chan];
889  for (i = 0; i < s->nb_samples; i++)
890  samples[i] = decoded[i] + 0x80;
891  }
892  break;
893  case AV_SAMPLE_FMT_S16P:
894  for (chan = 0; chan < avctx->channels; chan++) {
895  int16_t *samples = (int16_t *)frame->extended_data[chan];
896  int32_t *decoded = s->decoded[chan];
897  for (i = 0; i < s->nb_samples; i++)
898  samples[i] = decoded[i];
899  }
900  break;
901  case AV_SAMPLE_FMT_S32P:
902  for (chan = 0; chan < avctx->channels; chan++) {
903  int32_t *samples = (int32_t *)frame->extended_data[chan];
904  for (i = 0; i < s->nb_samples; i++)
905  samples[i] <<= 8;
906  }
907  break;
908  }
909 
910  *got_frame_ptr = 1;
911 
912  return pkt->size;
913 }
914 
916 {
917  TAKDecContext *s = avctx->priv_data;
918 
919  av_freep(&s->decode_buffer);
920 
921  return 0;
922 }
923 
925  .name = "tak",
926  .type = AVMEDIA_TYPE_AUDIO,
927  .id = AV_CODEC_ID_TAK,
928  .priv_data_size = sizeof(TAKDecContext),
932  .capabilities = CODEC_CAP_DR1,
933  .long_name = NULL_IF_CONFIG_SMALL("TAK (Tom's lossless Audio Kompressor)"),
934  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_U8P,
938 };
#define TAK_MAX_CHANNELS
Definition: tak.h:65
float v
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil.c:2675
static int set_bps_params(AVCodecContext *avctx)
const char * s
Definition: avisynth_c.h:668
static const uint16_t predictor_sizes[]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
int ff_tak_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, TAKStreamInfo *ti, int log_level_offset)
Validate and decode a frame header.
Definition: tak.c:143
static int shift(int a, int b)
Definition: sonic.c:86
int16_t subframe_len[MAX_SUBFRAMES]
subframe length in samples
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
#define c2
Definition: idct_sh4.c:27
int channels
Definition: tak.h:134
int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Get the required buffer size for the given audio parameters.
Definition: samplefmt.c:125
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
MCDParam mcdparams[TAK_MAX_CHANNELS]
multichannel decorrelation parameters
static int decode_subframe(TAKDecContext *s, int32_t *decoded, int subframe_size, int prev_subframe_size)
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:59
uint64_t ch_layout
Definition: tak.h:139
#define a1
Definition: regdef.h:47
#define FF_ARRAY_ELEMS(a)
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
static int decode_segment(TAKDecContext *s, int8_t mode, int32_t *decoded, int len)
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:225
#define FFALIGN(x, a)
Definition: common.h:63
int8_t lpc_mode[TAK_MAX_CHANNELS]
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
Definition: mem.c:198
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
struct MCDParam MCDParam
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, const uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Fill plane data pointers and linesize for samples with sample format sample_fmt.
Definition: samplefmt.c:155
unsigned int decode_buffer_size
#define a3
Definition: regdef.h:49
enum AVSampleFormat sample_fmt
audio sample format
uint8_t
#define av_cold
Definition: attributes.h:78
mode
Definition: f_perms.c:27
static av_cold int tak_decode_close(AVCodecContext *avctx)
static AVPacket pkt
Definition: demuxing.c:56
#define b
Definition: input.c:42
int ff_tak_check_crc(const uint8_t *buf, unsigned int buf_size)
Definition: tak.c:92
#define emms_c()
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
the mask is usually to keep the same permissions Filters should remove permissions on reference they give to output whenever necessary It can be automatically done by setting the rej_perms field on the output pad Here are a few guidelines corresponding to common then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
AVCodecContext * avctx
parent AVCodecContext
uint8_t * data
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:193
signed 32 bits, planar
Definition: samplefmt.h:59
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
int data_type
Definition: tak.h:132
static int decode_channel(TAKDecContext *s, int chan)
#define MAX_SUBFRAMES
max number of subframes per channel
frame
Definition: stft.m:14
Discrete Time axis x
int8_t index
index into array of decorrelation types
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:557
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Spectrum Plot time data
av_cold void ff_tak_init_crc(void)
Definition: tak.c:84
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
const char * name
Name of the codec implementation.
int8_t present
decorrelation parameter availability for this channel
int last_frame_samples
Definition: tak.h:138
static int decode_residues(TAKDecContext *s, int32_t *decoded, int length)
#define FFMAX(a, b)
Definition: common.h:56
external API header
int size
uint64_t channel_layout
Audio channel layout.
int bps
Definition: tak.h:135
common internal API header
int8_t coding_mode[128]
static av_cold int tak_decode_init(AVCodecContext *avctx)
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
#define FFMIN(a, b)
Definition: common.h:58
static const struct CParam xcodes[50]
ret
Definition: avfilter.c:821
int32_t
#define a2
Definition: regdef.h:48
static int get_bits_esc4(GetBitContext *gb)
uint8_t * decode_buffer
static int decorrelate(TAKDecContext *s, int c1, int c2, int length)
static void decode_lpc(int32_t *coeffs, int mode, int length)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
AVCodec ff_tak_decoder
NULL
Definition: eval.c:55
#define a5
Definition: regdef.h:51
#define TAK_MIN_FRAME_HEADER_BYTES
Definition: tak.h:98
int sample_rate
samples per second
int16_t predictors[MAX_PREDICTORS]
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:410
main external API structure.
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
enum TAKCodecType codec
Definition: tak.h:131
struct TAKDecContext TAKDecContext
int32_t * decoded[TAK_MAX_CHANNELS]
decoded samples for each channel
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:265
int frame_samples
Definition: tak.h:137
synthesis window for stochastic i
TAK (Tom&#39;s lossless Audio Kompressor) decoder/demuxer common functions.
GetBitContext gb
bitstream reader initialized to start at the current frame
int8_t dmode
channel decorrelation type in the current frame
int32_t(* scalarproduct_int16)(const int16_t *v1, const int16_t *v2, int len)
Calculate scalar product of two vectors.
Definition: dsputil.h:274
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:306
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer 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 all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Buffer references ownership and permissions
int sample_rate
Definition: tak.h:133
int nb_samples
number of samples in the current frame
TAKStreamInfo ti
common internal api header.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
Definition: unary.h:33
static double c[64]
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:49
Same thing on a dB scale
static const int8_t mc_dmodes[]
function y
Definition: D.m:1
#define AV_EF_CRCCHECK
DSP utils.
int nb_subframes
number of subframes in the current frame
#define a4
Definition: regdef.h:50
static int tak_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *pkt)
unsigned 8 bits, planar
Definition: samplefmt.h:57
int len
int channels
number of audio channels
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:418
#define MAX_PREDICTORS
signed 16 bits, planar
Definition: samplefmt.h:58
Filter the word “frame” indicates either a video frame or a group of audio samples
static void set_sample_rate_params(AVCodecContext *avctx)
int8_t sample_shift[TAK_MAX_CHANNELS]
shift applied to every sample in the channel
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868
#define FFSWAP(type, a, b)
Definition: common.h:61
const char int length
Definition: avisynth_c.h:668
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:117
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
for(j=16;j >0;--j)
#define c1
Definition: idct_sh4.c:26
DSPContext.
Definition: dsputil.h:127