3 * Copyright (c) 2012 Paul B Mahol
5 * This file is part of FFmpeg.
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.
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.
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
24 * TAK (Tom's lossless Audio Kompressor) decoder
25 * @author Paul B Mahol
28 #include "libavutil/internal.h"
29 #include "libavutil/samplefmt.h"
37 #define MAX_SUBFRAMES 8 ///< max number of subframes per channel
38 #define MAX_PREDICTORS 256
40 typedef struct MCDParam
{
41 int8_t present
; ///< decorrelation parameter availability for this channel
42 int8_t index
; ///< index into array of decorrelation types
47 typedef struct TAKDecContext
{
48 AVCodecContext
*avctx
; ///< parent AVCodecContext
51 GetBitContext gb
; ///< bitstream reader initialized to start at the current frame
54 int nb_samples
; ///< number of samples in the current frame
55 uint8_t *decode_buffer
;
56 unsigned int decode_buffer_size
;
57 int32_t *decoded
[TAK_MAX_CHANNELS
]; ///< decoded samples for each channel
59 int8_t lpc_mode
[TAK_MAX_CHANNELS
];
60 int8_t sample_shift
[TAK_MAX_CHANNELS
]; ///< shift applied to every sample in the channel
61 int16_t predictors
[MAX_PREDICTORS
];
62 int nb_subframes
; ///< number of subframes in the current frame
63 int16_t subframe_len
[MAX_SUBFRAMES
]; ///< subframe length in samples
66 int8_t dmode
; ///< channel decorrelation type in the current frame
68 MCDParam mcdparams
[TAK_MAX_CHANNELS
]; ///< multichannel decorrelation parameters
70 int8_t coding_mode
[128];
71 DECLARE_ALIGNED(16, int16_t, filter
)[MAX_PREDICTORS
];
72 DECLARE_ALIGNED(16, int16_t, residues
)[544];
75 static const int8_t mc_dmodes
[] = { 1, 3, 4, 6, };
77 static const uint16_t predictor_sizes
[] = {
78 4, 8, 12, 16, 24, 32, 48, 64, 80, 96, 128, 160, 192, 224, 256, 0,
81 static const struct CParam
{
88 { 0x01, 0x0000001, 0x0000001, 0x0000003, 0x0000008 },
89 { 0x02, 0x0000003, 0x0000001, 0x0000007, 0x0000006 },
90 { 0x03, 0x0000005, 0x0000002, 0x000000E, 0x000000D },
91 { 0x03, 0x0000003, 0x0000003, 0x000000D, 0x0000018 },
92 { 0x04, 0x000000B, 0x0000004, 0x000001C, 0x0000019 },
93 { 0x04, 0x0000006, 0x0000006, 0x000001A, 0x0000030 },
94 { 0x05, 0x0000016, 0x0000008, 0x0000038, 0x0000032 },
95 { 0x05, 0x000000C, 0x000000C, 0x0000034, 0x0000060 },
96 { 0x06, 0x000002C, 0x0000010, 0x0000070, 0x0000064 },
97 { 0x06, 0x0000018, 0x0000018, 0x0000068, 0x00000C0 },
98 { 0x07, 0x0000058, 0x0000020, 0x00000E0, 0x00000C8 },
99 { 0x07, 0x0000030, 0x0000030, 0x00000D0, 0x0000180 },
100 { 0x08, 0x00000B0, 0x0000040, 0x00001C0, 0x0000190 },
101 { 0x08, 0x0000060, 0x0000060, 0x00001A0, 0x0000300 },
102 { 0x09, 0x0000160, 0x0000080, 0x0000380, 0x0000320 },
103 { 0x09, 0x00000C0, 0x00000C0, 0x0000340, 0x0000600 },
104 { 0x0A, 0x00002C0, 0x0000100, 0x0000700, 0x0000640 },
105 { 0x0A, 0x0000180, 0x0000180, 0x0000680, 0x0000C00 },
106 { 0x0B, 0x0000580, 0x0000200, 0x0000E00, 0x0000C80 },
107 { 0x0B, 0x0000300, 0x0000300, 0x0000D00, 0x0001800 },
108 { 0x0C, 0x0000B00, 0x0000400, 0x0001C00, 0x0001900 },
109 { 0x0C, 0x0000600, 0x0000600, 0x0001A00, 0x0003000 },
110 { 0x0D, 0x0001600, 0x0000800, 0x0003800, 0x0003200 },
111 { 0x0D, 0x0000C00, 0x0000C00, 0x0003400, 0x0006000 },
112 { 0x0E, 0x0002C00, 0x0001000, 0x0007000, 0x0006400 },
113 { 0x0E, 0x0001800, 0x0001800, 0x0006800, 0x000C000 },
114 { 0x0F, 0x0005800, 0x0002000, 0x000E000, 0x000C800 },
115 { 0x0F, 0x0003000, 0x0003000, 0x000D000, 0x0018000 },
116 { 0x10, 0x000B000, 0x0004000, 0x001C000, 0x0019000 },
117 { 0x10, 0x0006000, 0x0006000, 0x001A000, 0x0030000 },
118 { 0x11, 0x0016000, 0x0008000, 0x0038000, 0x0032000 },
119 { 0x11, 0x000C000, 0x000C000, 0x0034000, 0x0060000 },
120 { 0x12, 0x002C000, 0x0010000, 0x0070000, 0x0064000 },
121 { 0x12, 0x0018000, 0x0018000, 0x0068000, 0x00C0000 },
122 { 0x13, 0x0058000, 0x0020000, 0x00E0000, 0x00C8000 },
123 { 0x13, 0x0030000, 0x0030000, 0x00D0000, 0x0180000 },
124 { 0x14, 0x00B0000, 0x0040000, 0x01C0000, 0x0190000 },
125 { 0x14, 0x0060000, 0x0060000, 0x01A0000, 0x0300000 },
126 { 0x15, 0x0160000, 0x0080000, 0x0380000, 0x0320000 },
127 { 0x15, 0x00C0000, 0x00C0000, 0x0340000, 0x0600000 },
128 { 0x16, 0x02C0000, 0x0100000, 0x0700000, 0x0640000 },
129 { 0x16, 0x0180000, 0x0180000, 0x0680000, 0x0C00000 },
130 { 0x17, 0x0580000, 0x0200000, 0x0E00000, 0x0C80000 },
131 { 0x17, 0x0300000, 0x0300000, 0x0D00000, 0x1800000 },
132 { 0x18, 0x0B00000, 0x0400000, 0x1C00000, 0x1900000 },
133 { 0x18, 0x0600000, 0x0600000, 0x1A00000, 0x3000000 },
134 { 0x19, 0x1600000, 0x0800000, 0x3800000, 0x3200000 },
135 { 0x19, 0x0C00000, 0x0C00000, 0x3400000, 0x6000000 },
136 { 0x1A, 0x2C00000, 0x1000000, 0x7000000, 0x6400000 },
137 { 0x1A, 0x1800000, 0x1800000, 0x6800000, 0xC000000 },
140 static int set_bps_params(AVCodecContext
*avctx
)
142 switch (avctx
->bits_per_raw_sample
) {
144 avctx
->sample_fmt
= AV_SAMPLE_FMT_U8P
;
147 avctx
->sample_fmt
= AV_SAMPLE_FMT_S16P
;
150 avctx
->sample_fmt
= AV_SAMPLE_FMT_S32P
;
153 av_log(avctx
, AV_LOG_ERROR
, "invalid/unsupported bits per sample: %d\n",
154 avctx
->bits_per_raw_sample
);
155 return AVERROR_INVALIDDATA
;
161 static void set_sample_rate_params(AVCodecContext
*avctx
)
163 TAKDecContext
*s
= avctx
->priv_data
;
164 int shift
= 3 - (avctx
->sample_rate
/ 11025);
165 shift
= FFMAX(0, shift
);
166 s
->uval
= FFALIGN(avctx
->sample_rate
+ 511 >> 9, 4) << shift
;
167 s
->subframe_scale
= FFALIGN(avctx
->sample_rate
+ 511 >> 9, 4) << 1;
170 static av_cold
int tak_decode_init(AVCodecContext
*avctx
)
172 TAKDecContext
*s
= avctx
->priv_data
;
174 ff_audiodsp_init(&s
->adsp
);
177 avctx
->bits_per_raw_sample
= avctx
->bits_per_coded_sample
;
179 set_sample_rate_params(avctx
);
181 return set_bps_params(avctx
);
184 static void decode_lpc(int32_t *coeffs
, int mode
, int length
)
193 for (i
= 0; i
< length
- 1 >> 1; i
++) {
195 coeffs
[1] += *coeffs
;
201 } else if (mode
== 2) {
203 int a2
= a1
+ *coeffs
;
207 for (i
= 0; i
< length
- 2 >> 1; i
++) {
208 int a3
= *coeffs
+ a1
;
219 } else if (mode
== 3) {
221 int a2
= a1
+ *coeffs
;
228 for (i
= 0; i
< length
- 3; i
++) {
239 static int decode_segment(TAKDecContext
*s
, int8_t mode
, int32_t *decoded
, int len
)
242 GetBitContext
*gb
= &s
->gb
;
246 memset(decoded
, 0, len
* sizeof(*decoded
));
250 if (mode
> FF_ARRAY_ELEMS(xcodes
))
251 return AVERROR_INVALIDDATA
;
252 code
= xcodes
[mode
- 1];
254 for (i
= 0; i
< len
; i
++) {
255 int x
= get_bits_long(gb
, code
.init
);
256 if (x
>= code
.escape
&& get_bits1(gb
)) {
258 if (x
>= code
.aescape
) {
259 int scale
= get_unary(gb
, 1, 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);
266 return AVERROR_INVALIDDATA
;
268 scale
= get_bits_long(gb
, scale_bits
) + 1;
269 x
+= code
.scale
* scale
;
273 x
+= code
.scale
* scale
- code
.escape
;
277 decoded
[i
] = (x
>> 1) ^ -(x
& 1);
283 static int decode_residues(TAKDecContext
*s
, int32_t *decoded
, int length
)
285 GetBitContext
*gb
= &s
->gb
;
288 if (length
> s
->nb_samples
)
289 return AVERROR_INVALIDDATA
;
294 wlength
= length
/ s
->uval
;
296 rval
= length
- (wlength
* s
->uval
);
298 if (rval
< s
->uval
/ 2)
303 if (wlength
<= 1 || wlength
> 128)
304 return AVERROR_INVALIDDATA
;
306 s
->coding_mode
[0] = mode
= get_bits(gb
, 6);
308 for (i
= 1; i
< wlength
; i
++) {
309 int c
= get_unary(gb
, 1, 6);
313 mode
= get_bits(gb
, 6);
318 /* mode += sign ? (1 - c) : (c - 1) */
319 int sign
= get_bits1(gb
);
320 mode
+= (-sign
^ (c
- 1)) + sign
;
330 s
->coding_mode
[i
] = mode
;
334 while (i
< wlength
) {
337 mode
= s
->coding_mode
[i
];
339 if (i
>= wlength
- 1)
347 } while (s
->coding_mode
[i
] == mode
);
349 if ((ret
= decode_segment(s
, mode
, decoded
, len
)) < 0)
354 mode
= get_bits(gb
, 6);
355 if ((ret
= decode_segment(s
, mode
, decoded
, length
)) < 0)
362 static int get_bits_esc4(GetBitContext
*gb
)
365 return get_bits(gb
, 4) + 1;
370 static int decode_subframe(TAKDecContext
*s
, int32_t *decoded
,
371 int subframe_size
, int prev_subframe_size
)
373 GetBitContext
*gb
= &s
->gb
;
374 int x
, y
, i
, j
, ret
= 0;
375 int dshift
, size
, filter_quant
, filter_order
;
376 int tfilter
[MAX_PREDICTORS
];
379 return decode_residues(s
, decoded
, subframe_size
);
381 filter_order
= predictor_sizes
[get_bits(gb
, 4)];
383 if (prev_subframe_size
> 0 && get_bits1(gb
)) {
384 if (filter_order
> prev_subframe_size
)
385 return AVERROR_INVALIDDATA
;
387 decoded
-= filter_order
;
388 subframe_size
+= filter_order
;
390 if (filter_order
> subframe_size
)
391 return AVERROR_INVALIDDATA
;
395 if (filter_order
> subframe_size
)
396 return AVERROR_INVALIDDATA
;
398 lpc_mode
= get_bits(gb
, 2);
400 return AVERROR_INVALIDDATA
;
402 if ((ret
= decode_residues(s
, decoded
, filter_order
)) < 0)
406 decode_lpc(decoded
, lpc_mode
, filter_order
);
409 dshift
= get_bits_esc4(gb
);
410 size
= get_bits1(gb
) + 6;
414 filter_quant
-= get_bits(gb
, 3) + 1;
415 if (filter_quant
< 3)
416 return AVERROR_INVALIDDATA
;
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 int tmp
= size
- get_bits1(gb
);
426 for (i
= 4; i
< filter_order
; i
++) {
428 x
= tmp
- get_bits(gb
, 2);
429 s
->predictors
[i
] = get_sbits(gb
, x
) << (10 - size
);
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];
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;
445 tfilter
[i
] = s
->predictors
[i
] << 6;
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 s
->filter
[j
] = x
- ((tfilter
[i
] + y
) >> (15 - filter_quant
));
452 s
->filter
[i
] = x
- ((tfilter
[j
] + y
) >> (15 - filter_quant
));
455 if ((ret
= decode_residues(s
, &decoded
[filter_order
],
456 subframe_size
- filter_order
)) < 0)
459 for (i
= 0; i
< filter_order
; i
++)
460 s
->residues
[i
] = *decoded
++ >> dshift
;
462 y
= FF_ARRAY_ELEMS(s
->residues
) - filter_order
;
463 x
= subframe_size
- filter_order
;
465 int tmp
= FFMIN(y
, x
);
467 for (i
= 0; i
< tmp
; i
++) {
468 int v
= 1 << (filter_quant
- 1);
470 if (filter_order
& -16)
471 v
+= s
->adsp
.scalarproduct_int16(&s
->residues
[i
], s
->filter
,
473 for (j
= filter_order
& -16; j
< filter_order
; j
+= 4) {
474 v
+= s
->residues
[i
+ j
+ 3] * s
->filter
[j
+ 3] +
475 s
->residues
[i
+ j
+ 2] * s
->filter
[j
+ 2] +
476 s
->residues
[i
+ j
+ 1] * s
->filter
[j
+ 1] +
477 s
->residues
[i
+ j
] * s
->filter
[j
];
479 v
= (av_clip(v
>> filter_quant
, -8192, 8191) << dshift
) - *decoded
;
481 s
->residues
[filter_order
+ i
] = v
>> dshift
;
486 memcpy(s
->residues
, &s
->residues
[y
], 2 * filter_order
);
494 static int decode_channel(TAKDecContext
*s
, int chan
)
496 AVCodecContext
*avctx
= s
->avctx
;
497 GetBitContext
*gb
= &s
->gb
;
498 int32_t *decoded
= s
->decoded
[chan
];
499 int left
= s
->nb_samples
- 1;
500 int i
= 0, ret
, prev
= 0;
502 s
->sample_shift
[chan
] = get_bits_esc4(gb
);
503 if (s
->sample_shift
[chan
] >= avctx
->bits_per_raw_sample
)
504 return AVERROR_INVALIDDATA
;
506 *decoded
++ = get_sbits(gb
, avctx
->bits_per_raw_sample
- s
->sample_shift
[chan
]);
507 s
->lpc_mode
[chan
] = get_bits(gb
, 2);
508 s
->nb_subframes
= get_bits(gb
, 3) + 1;
510 if (s
->nb_subframes
> 1) {
511 if (get_bits_left(gb
) < (s
->nb_subframes
- 1) * 6)
512 return AVERROR_INVALIDDATA
;
514 for (; i
< s
->nb_subframes
- 1; i
++) {
515 int v
= get_bits(gb
, 6);
517 s
->subframe_len
[i
] = (v
- prev
) * s
->subframe_scale
;
518 if (s
->subframe_len
[i
] <= 0)
519 return AVERROR_INVALIDDATA
;
521 left
-= s
->subframe_len
[i
];
526 return AVERROR_INVALIDDATA
;
528 s
->subframe_len
[i
] = left
;
531 for (i
= 0; i
< s
->nb_subframes
; i
++) {
532 if ((ret
= decode_subframe(s
, decoded
, s
->subframe_len
[i
], prev
)) < 0)
534 decoded
+= s
->subframe_len
[i
];
535 prev
= s
->subframe_len
[i
];
541 static int decorrelate(TAKDecContext
*s
, int c1
, int c2
, int length
)
543 GetBitContext
*gb
= &s
->gb
;
544 int32_t *p1
= s
->decoded
[c1
] + 1;
545 int32_t *p2
= s
->decoded
[c2
] + 1;
550 case 1: /* left/side */
551 for (i
= 0; i
< length
; i
++) {
557 case 2: /* side/right */
558 for (i
= 0; i
< length
; i
++) {
564 case 3: /* side/mid */
565 for (i
= 0; i
< length
; i
++) {
573 case 4: /* side/left with scale factor */
574 FFSWAP(int32_t*, p1
, p2
);
575 case 5: /* side/right with scale factor */
576 dshift
= get_bits_esc4(gb
);
577 dfactor
= get_sbits(gb
, 10);
578 for (i
= 0; i
< length
; i
++) {
581 b
= dfactor
* (b
>> dshift
) + 128 >> 8 << dshift
;
586 FFSWAP(int32_t*, p1
, p2
);
588 int length2
, order_half
, filter_order
, dval1
, dval2
;
589 int tmp
, x
, code_size
;
592 return AVERROR_INVALIDDATA
;
594 dshift
= get_bits_esc4(gb
);
595 filter_order
= 8 << get_bits1(gb
);
596 dval1
= get_bits1(gb
);
597 dval2
= get_bits1(gb
);
599 for (i
= 0; i
< filter_order
; i
++) {
601 code_size
= 14 - get_bits(gb
, 3);
602 s
->filter
[i
] = get_sbits(gb
, code_size
);
605 order_half
= filter_order
/ 2;
606 length2
= length
- (filter_order
- 1);
608 /* decorrelate beginning samples */
610 for (i
= 0; i
< order_half
; i
++) {
617 /* decorrelate ending samples */
619 for (i
= length2
+ order_half
; i
< length
; i
++) {
627 for (i
= 0; i
< filter_order
; i
++)
628 s
->residues
[i
] = *p2
++ >> dshift
;
631 x
= FF_ARRAY_ELEMS(s
->residues
) - filter_order
;
632 for (; length2
> 0; length2
-= tmp
) {
633 tmp
= FFMIN(length2
, x
);
635 for (i
= 0; i
< tmp
; i
++)
636 s
->residues
[filter_order
+ i
] = *p2
++ >> dshift
;
638 for (i
= 0; i
< tmp
; i
++) {
641 if (filter_order
== 16) {
642 v
+= s
->adsp
.scalarproduct_int16(&s
->residues
[i
], s
->filter
,
645 v
+= s
->residues
[i
+ 7] * s
->filter
[7] +
646 s
->residues
[i
+ 6] * s
->filter
[6] +
647 s
->residues
[i
+ 5] * s
->filter
[5] +
648 s
->residues
[i
+ 4] * s
->filter
[4] +
649 s
->residues
[i
+ 3] * s
->filter
[3] +
650 s
->residues
[i
+ 2] * s
->filter
[2] +
651 s
->residues
[i
+ 1] * s
->filter
[1] +
652 s
->residues
[i
] * s
->filter
[0];
655 v
= (av_clip(v
>> 10, -8192, 8191) << dshift
) - *p1
;
659 memcpy(s
->residues
, &s
->residues
[tmp
], 2 * filter_order
);
670 static int tak_decode_frame(AVCodecContext
*avctx
, void *data
,
671 int *got_frame_ptr
, AVPacket
*pkt
)
673 TAKDecContext
*s
= avctx
->priv_data
;
674 AVFrame
*frame
= data
;
675 ThreadFrame tframe
= { .f
= data
};
676 GetBitContext
*gb
= &s
->gb
;
677 int chan
, i
, ret
, hsize
;
679 if (pkt
->size
< TAK_MIN_FRAME_HEADER_BYTES
)
680 return AVERROR_INVALIDDATA
;
682 if ((ret
= init_get_bits8(gb
, pkt
->data
, pkt
->size
)) < 0)
685 if ((ret
= ff_tak_decode_frame_header(avctx
, gb
, &s
->ti
, 0)) < 0)
688 hsize
= get_bits_count(gb
) / 8;
689 if (avctx
->err_recognition
& (AV_EF_CRCCHECK
|AV_EF_COMPLIANT
)) {
690 if (ff_tak_check_crc(pkt
->data
, hsize
)) {
691 av_log(avctx
, AV_LOG_ERROR
, "CRC error\n");
692 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
693 return AVERROR_INVALIDDATA
;
697 if (s
->ti
.codec
!= TAK_CODEC_MONO_STEREO
&&
698 s
->ti
.codec
!= TAK_CODEC_MULTICHANNEL
) {
699 av_log(avctx
, AV_LOG_ERROR
, "unsupported codec: %d\n", s
->ti
.codec
);
700 return AVERROR_PATCHWELCOME
;
702 if (s
->ti
.data_type
) {
703 av_log(avctx
, AV_LOG_ERROR
,
704 "unsupported data type: %d\n", s
->ti
.data_type
);
705 return AVERROR_INVALIDDATA
;
707 if (s
->ti
.codec
== TAK_CODEC_MONO_STEREO
&& s
->ti
.channels
> 2) {
708 av_log(avctx
, AV_LOG_ERROR
,
709 "invalid number of channels: %d\n", s
->ti
.channels
);
710 return AVERROR_INVALIDDATA
;
712 if (s
->ti
.channels
> 6) {
713 av_log(avctx
, AV_LOG_ERROR
,
714 "unsupported number of channels: %d\n", s
->ti
.channels
);
715 return AVERROR_INVALIDDATA
;
718 if (s
->ti
.frame_samples
<= 0) {
719 av_log(avctx
, AV_LOG_ERROR
, "unsupported/invalid number of samples\n");
720 return AVERROR_INVALIDDATA
;
723 avctx
->bits_per_raw_sample
= s
->ti
.bps
;
724 if ((ret
= set_bps_params(avctx
)) < 0)
726 if (s
->ti
.sample_rate
!= avctx
->sample_rate
) {
727 avctx
->sample_rate
= s
->ti
.sample_rate
;
728 set_sample_rate_params(avctx
);
731 avctx
->channel_layout
= s
->ti
.ch_layout
;
732 avctx
->channels
= s
->ti
.channels
;
734 s
->nb_samples
= s
->ti
.last_frame_samples
? s
->ti
.last_frame_samples
735 : s
->ti
.frame_samples
;
737 frame
->nb_samples
= s
->nb_samples
;
738 if ((ret
= ff_thread_get_buffer(avctx
, &tframe
, 0)) < 0)
740 ff_thread_finish_setup(avctx
);
742 if (avctx
->bits_per_raw_sample
<= 16) {
743 int buf_size
= av_samples_get_buffer_size(NULL
, avctx
->channels
,
745 AV_SAMPLE_FMT_S32P
, 0);
746 av_fast_malloc(&s
->decode_buffer
, &s
->decode_buffer_size
, buf_size
);
747 if (!s
->decode_buffer
)
748 return AVERROR(ENOMEM
);
749 ret
= av_samples_fill_arrays((uint8_t **)s
->decoded
, NULL
,
750 s
->decode_buffer
, avctx
->channels
,
751 s
->nb_samples
, AV_SAMPLE_FMT_S32P
, 0);
755 for (chan
= 0; chan
< avctx
->channels
; chan
++)
756 s
->decoded
[chan
] = (int32_t *)frame
->extended_data
[chan
];
759 if (s
->nb_samples
< 16) {
760 for (chan
= 0; chan
< avctx
->channels
; chan
++) {
761 int32_t *decoded
= s
->decoded
[chan
];
762 for (i
= 0; i
< s
->nb_samples
; i
++)
763 decoded
[i
] = get_sbits(gb
, avctx
->bits_per_raw_sample
);
766 if (s
->ti
.codec
== TAK_CODEC_MONO_STEREO
) {
767 for (chan
= 0; chan
< avctx
->channels
; chan
++)
768 if (ret
= decode_channel(s
, chan
))
771 if (avctx
->channels
== 2) {
772 s
->nb_subframes
= get_bits(gb
, 1) + 1;
773 if (s
->nb_subframes
> 1) {
774 s
->subframe_len
[1] = get_bits(gb
, 6);
777 s
->dmode
= get_bits(gb
, 3);
778 if (ret
= decorrelate(s
, 0, 1, s
->nb_samples
- 1))
781 } else if (s
->ti
.codec
== TAK_CODEC_MULTICHANNEL
) {
785 chan
= get_bits(gb
, 4) + 1;
786 if (chan
> avctx
->channels
)
787 return AVERROR_INVALIDDATA
;
789 for (i
= 0; i
< chan
; i
++) {
790 int nbit
= get_bits(gb
, 4);
792 if (nbit
>= avctx
->channels
)
793 return AVERROR_INVALIDDATA
;
795 if (ch_mask
& 1 << nbit
)
796 return AVERROR_INVALIDDATA
;
798 s
->mcdparams
[i
].present
= get_bits1(gb
);
799 if (s
->mcdparams
[i
].present
) {
800 s
->mcdparams
[i
].index
= get_bits(gb
, 2);
801 s
->mcdparams
[i
].chan2
= get_bits(gb
, 4);
802 if (s
->mcdparams
[i
].index
== 1) {
803 if ((nbit
== s
->mcdparams
[i
].chan2
) ||
804 (ch_mask
& 1 << s
->mcdparams
[i
].chan2
))
805 return AVERROR_INVALIDDATA
;
807 ch_mask
|= 1 << s
->mcdparams
[i
].chan2
;
808 } else if (!(ch_mask
& 1 << s
->mcdparams
[i
].chan2
)) {
809 return AVERROR_INVALIDDATA
;
812 s
->mcdparams
[i
].chan1
= nbit
;
814 ch_mask
|= 1 << nbit
;
817 chan
= avctx
->channels
;
818 for (i
= 0; i
< chan
; i
++) {
819 s
->mcdparams
[i
].present
= 0;
820 s
->mcdparams
[i
].chan1
= i
;
824 for (i
= 0; i
< chan
; i
++) {
825 if (s
->mcdparams
[i
].present
&& s
->mcdparams
[i
].index
== 1)
826 if (ret
= decode_channel(s
, s
->mcdparams
[i
].chan2
))
829 if (ret
= decode_channel(s
, s
->mcdparams
[i
].chan1
))
832 if (s
->mcdparams
[i
].present
) {
833 s
->dmode
= mc_dmodes
[s
->mcdparams
[i
].index
];
834 if (ret
= decorrelate(s
,
835 s
->mcdparams
[i
].chan2
,
836 s
->mcdparams
[i
].chan1
,
843 for (chan
= 0; chan
< avctx
->channels
; chan
++) {
844 int32_t *decoded
= s
->decoded
[chan
];
846 if (s
->lpc_mode
[chan
])
847 decode_lpc(decoded
, s
->lpc_mode
[chan
], s
->nb_samples
);
849 if (s
->sample_shift
[chan
] > 0)
850 for (i
= 0; i
< s
->nb_samples
; i
++)
851 decoded
[i
] <<= s
->sample_shift
[chan
];
857 if (get_bits_left(gb
) < 0)
858 av_log(avctx
, AV_LOG_DEBUG
, "overread\n");
859 else if (get_bits_left(gb
) > 0)
860 av_log(avctx
, AV_LOG_DEBUG
, "underread\n");
862 if (avctx
->err_recognition
& (AV_EF_CRCCHECK
| AV_EF_COMPLIANT
)) {
863 if (ff_tak_check_crc(pkt
->data
+ hsize
,
864 get_bits_count(gb
) / 8 - hsize
)) {
865 av_log(avctx
, AV_LOG_ERROR
, "CRC error\n");
866 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
867 return AVERROR_INVALIDDATA
;
871 /* convert to output buffer */
872 switch (avctx
->sample_fmt
) {
873 case AV_SAMPLE_FMT_U8P
:
874 for (chan
= 0; chan
< avctx
->channels
; chan
++) {
875 uint8_t *samples
= (uint8_t *)frame
->extended_data
[chan
];
876 int32_t *decoded
= s
->decoded
[chan
];
877 for (i
= 0; i
< s
->nb_samples
; i
++)
878 samples
[i
] = decoded
[i
] + 0x80;
881 case AV_SAMPLE_FMT_S16P
:
882 for (chan
= 0; chan
< avctx
->channels
; chan
++) {
883 int16_t *samples
= (int16_t *)frame
->extended_data
[chan
];
884 int32_t *decoded
= s
->decoded
[chan
];
885 for (i
= 0; i
< s
->nb_samples
; i
++)
886 samples
[i
] = decoded
[i
];
889 case AV_SAMPLE_FMT_S32P
:
890 for (chan
= 0; chan
< avctx
->channels
; chan
++) {
891 int32_t *samples
= (int32_t *)frame
->extended_data
[chan
];
892 for (i
= 0; i
< s
->nb_samples
; i
++)
903 static int init_thread_copy(AVCodecContext
*avctx
)
905 TAKDecContext
*s
= avctx
->priv_data
;
910 static int update_thread_context(AVCodecContext
*dst
,
911 const AVCodecContext
*src
)
913 TAKDecContext
*tsrc
= src
->priv_data
;
914 TAKDecContext
*tdst
= dst
->priv_data
;
918 memcpy(&tdst
->ti
, &tsrc
->ti
, sizeof(TAKStreamInfo
));
922 static av_cold
int tak_decode_close(AVCodecContext
*avctx
)
924 TAKDecContext
*s
= avctx
->priv_data
;
926 av_freep(&s
->decode_buffer
);
931 AVCodec ff_tak_decoder
= {
933 .long_name
= NULL_IF_CONFIG_SMALL("TAK (Tom's lossless Audio Kompressor)"),
934 .type
= AVMEDIA_TYPE_AUDIO
,
935 .id
= AV_CODEC_ID_TAK
,
936 .priv_data_size
= sizeof(TAKDecContext
),
937 .init
= tak_decode_init
,
938 .close
= tak_decode_close
,
939 .decode
= tak_decode_frame
,
940 .init_thread_copy
= ONLY_IF_THREADS_ENABLED(init_thread_copy
),
941 .update_thread_context
= ONLY_IF_THREADS_ENABLED(update_thread_context
),
942 .capabilities
= CODEC_CAP_DR1
| CODEC_CAP_FRAME_THREADS
,
943 .sample_fmts
= (const enum AVSampleFormat
[]) { AV_SAMPLE_FMT_U8P
,
946 AV_SAMPLE_FMT_NONE
},