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/mem.h"
30 #include "libavutil/mem_internal.h"
31 #include "libavutil/samplefmt.h"
33 #define CACHED_BITSTREAM_READER !ARCH_X86_32
34 #define BITSTREAM_READER_LE
38 #include "codec_internal.h"
43 #define MAX_SUBFRAMES 8 ///< max number of subframes per channel
44 #define MAX_PREDICTORS 256
46 typedef struct MCDParam
{
47 int8_t present
; ///< decorrelation parameter availability for this channel
48 int8_t index
; ///< index into array of decorrelation types
53 typedef struct TAKDecContext
{
54 AVCodecContext
*avctx
; ///< parent AVCodecContext
58 GetBitContext gb
; ///< bitstream reader initialized to start at the current frame
61 int nb_samples
; ///< number of samples in the current frame
62 uint8_t *decode_buffer
;
63 unsigned int decode_buffer_size
;
64 int32_t *decoded
[TAK_MAX_CHANNELS
]; ///< decoded samples for each channel
66 int8_t lpc_mode
[TAK_MAX_CHANNELS
];
67 int8_t sample_shift
[TAK_MAX_CHANNELS
]; ///< shift applied to every sample in the channel
68 int16_t predictors
[MAX_PREDICTORS
];
69 int nb_subframes
; ///< number of subframes in the current frame
70 int16_t subframe_len
[MAX_SUBFRAMES
]; ///< subframe length in samples
73 int8_t dmode
; ///< channel decorrelation type in the current frame
75 MCDParam mcdparams
[TAK_MAX_CHANNELS
]; ///< multichannel decorrelation parameters
77 int8_t coding_mode
[128];
78 DECLARE_ALIGNED(16, int16_t, filter
)[MAX_PREDICTORS
];
79 DECLARE_ALIGNED(16, int16_t, residues
)[544];
82 static const int8_t mc_dmodes
[] = { 1, 3, 4, 6, };
84 static const uint16_t predictor_sizes
[] = {
85 4, 8, 12, 16, 24, 32, 48, 64, 80, 96, 128, 160, 192, 224, 256, 0,
88 static const struct CParam
{
95 { 0x01, 0x0000001, 0x0000001, 0x0000003, 0x0000008 },
96 { 0x02, 0x0000003, 0x0000001, 0x0000007, 0x0000006 },
97 { 0x03, 0x0000005, 0x0000002, 0x000000E, 0x000000D },
98 { 0x03, 0x0000003, 0x0000003, 0x000000D, 0x0000018 },
99 { 0x04, 0x000000B, 0x0000004, 0x000001C, 0x0000019 },
100 { 0x04, 0x0000006, 0x0000006, 0x000001A, 0x0000030 },
101 { 0x05, 0x0000016, 0x0000008, 0x0000038, 0x0000032 },
102 { 0x05, 0x000000C, 0x000000C, 0x0000034, 0x0000060 },
103 { 0x06, 0x000002C, 0x0000010, 0x0000070, 0x0000064 },
104 { 0x06, 0x0000018, 0x0000018, 0x0000068, 0x00000C0 },
105 { 0x07, 0x0000058, 0x0000020, 0x00000E0, 0x00000C8 },
106 { 0x07, 0x0000030, 0x0000030, 0x00000D0, 0x0000180 },
107 { 0x08, 0x00000B0, 0x0000040, 0x00001C0, 0x0000190 },
108 { 0x08, 0x0000060, 0x0000060, 0x00001A0, 0x0000300 },
109 { 0x09, 0x0000160, 0x0000080, 0x0000380, 0x0000320 },
110 { 0x09, 0x00000C0, 0x00000C0, 0x0000340, 0x0000600 },
111 { 0x0A, 0x00002C0, 0x0000100, 0x0000700, 0x0000640 },
112 { 0x0A, 0x0000180, 0x0000180, 0x0000680, 0x0000C00 },
113 { 0x0B, 0x0000580, 0x0000200, 0x0000E00, 0x0000C80 },
114 { 0x0B, 0x0000300, 0x0000300, 0x0000D00, 0x0001800 },
115 { 0x0C, 0x0000B00, 0x0000400, 0x0001C00, 0x0001900 },
116 { 0x0C, 0x0000600, 0x0000600, 0x0001A00, 0x0003000 },
117 { 0x0D, 0x0001600, 0x0000800, 0x0003800, 0x0003200 },
118 { 0x0D, 0x0000C00, 0x0000C00, 0x0003400, 0x0006000 },
119 { 0x0E, 0x0002C00, 0x0001000, 0x0007000, 0x0006400 },
120 { 0x0E, 0x0001800, 0x0001800, 0x0006800, 0x000C000 },
121 { 0x0F, 0x0005800, 0x0002000, 0x000E000, 0x000C800 },
122 { 0x0F, 0x0003000, 0x0003000, 0x000D000, 0x0018000 },
123 { 0x10, 0x000B000, 0x0004000, 0x001C000, 0x0019000 },
124 { 0x10, 0x0006000, 0x0006000, 0x001A000, 0x0030000 },
125 { 0x11, 0x0016000, 0x0008000, 0x0038000, 0x0032000 },
126 { 0x11, 0x000C000, 0x000C000, 0x0034000, 0x0060000 },
127 { 0x12, 0x002C000, 0x0010000, 0x0070000, 0x0064000 },
128 { 0x12, 0x0018000, 0x0018000, 0x0068000, 0x00C0000 },
129 { 0x13, 0x0058000, 0x0020000, 0x00E0000, 0x00C8000 },
130 { 0x13, 0x0030000, 0x0030000, 0x00D0000, 0x0180000 },
131 { 0x14, 0x00B0000, 0x0040000, 0x01C0000, 0x0190000 },
132 { 0x14, 0x0060000, 0x0060000, 0x01A0000, 0x0300000 },
133 { 0x15, 0x0160000, 0x0080000, 0x0380000, 0x0320000 },
134 { 0x15, 0x00C0000, 0x00C0000, 0x0340000, 0x0600000 },
135 { 0x16, 0x02C0000, 0x0100000, 0x0700000, 0x0640000 },
136 { 0x16, 0x0180000, 0x0180000, 0x0680000, 0x0C00000 },
137 { 0x17, 0x0580000, 0x0200000, 0x0E00000, 0x0C80000 },
138 { 0x17, 0x0300000, 0x0300000, 0x0D00000, 0x1800000 },
139 { 0x18, 0x0B00000, 0x0400000, 0x1C00000, 0x1900000 },
140 { 0x18, 0x0600000, 0x0600000, 0x1A00000, 0x3000000 },
141 { 0x19, 0x1600000, 0x0800000, 0x3800000, 0x3200000 },
142 { 0x19, 0x0C00000, 0x0C00000, 0x3400000, 0x6000000 },
143 { 0x1A, 0x2C00000, 0x1000000, 0x7000000, 0x6400000 },
144 { 0x1A, 0x1800000, 0x1800000, 0x6800000, 0xC000000 },
147 static int set_bps_params(AVCodecContext
*avctx
)
149 switch (avctx
->bits_per_raw_sample
) {
151 avctx
->sample_fmt
= AV_SAMPLE_FMT_U8P
;
154 avctx
->sample_fmt
= AV_SAMPLE_FMT_S16P
;
157 avctx
->sample_fmt
= AV_SAMPLE_FMT_S32P
;
160 av_log(avctx
, AV_LOG_ERROR
, "invalid/unsupported bits per sample: %d\n",
161 avctx
->bits_per_raw_sample
);
162 return AVERROR_INVALIDDATA
;
168 static void set_sample_rate_params(AVCodecContext
*avctx
)
170 TAKDecContext
*s
= avctx
->priv_data
;
173 if (avctx
->sample_rate
< 11025) {
175 } else if (avctx
->sample_rate
< 22050) {
177 } else if (avctx
->sample_rate
< 44100) {
182 s
->uval
= FFALIGN(avctx
->sample_rate
+ 511LL >> 9, 4) << shift
;
183 s
->subframe_scale
= FFALIGN(avctx
->sample_rate
+ 511LL >> 9, 4) << 1;
186 static av_cold
int tak_decode_init(AVCodecContext
*avctx
)
188 TAKDecContext
*s
= avctx
->priv_data
;
190 ff_audiodsp_init(&s
->adsp
);
191 ff_takdsp_init(&s
->tdsp
);
194 avctx
->bits_per_raw_sample
= avctx
->bits_per_coded_sample
;
196 set_sample_rate_params(avctx
);
198 return set_bps_params(avctx
);
201 static void decode_lpc(int32_t *coeffs
, int mode
, int length
)
209 unsigned a1
= *coeffs
++;
210 for (i
= 0; i
< length
- 1 >> 1; i
++) {
212 coeffs
[1] += (unsigned)*coeffs
;
218 } else if (mode
== 2) {
219 unsigned a1
= coeffs
[1];
220 unsigned a2
= a1
+ *coeffs
;
224 for (i
= 0; i
< length
- 2 >> 1; i
++) {
225 unsigned a3
= *coeffs
+ a1
;
226 unsigned a4
= a3
+ a2
;
236 } else if (mode
== 3) {
237 unsigned a1
= coeffs
[1];
238 unsigned a2
= a1
+ *coeffs
;
241 unsigned a3
= coeffs
[2];
242 unsigned a4
= a3
+ a1
;
243 unsigned a5
= a4
+ a2
;
246 for (i
= 0; i
< length
- 3; i
++) {
257 static int decode_segment(TAKDecContext
*s
, int8_t mode
, int32_t *decoded
, int len
)
260 GetBitContext
*gb
= &s
->gb
;
264 memset(decoded
, 0, len
* sizeof(*decoded
));
268 if (mode
> FF_ARRAY_ELEMS(xcodes
))
269 return AVERROR_INVALIDDATA
;
270 code
= xcodes
[mode
- 1];
272 for (i
= 0; i
< len
; i
++) {
273 unsigned x
= get_bits_long(gb
, code
.init
);
274 if (x
>= code
.escape
&& get_bits1(gb
)) {
276 if (x
>= code
.aescape
) {
277 unsigned scale
= get_unary(gb
, 1, 9);
279 int scale_bits
= get_bits(gb
, 3);
280 if (scale_bits
> 0) {
281 if (scale_bits
== 7) {
282 scale_bits
+= get_bits(gb
, 5);
284 return AVERROR_INVALIDDATA
;
286 scale
= get_bits_long(gb
, scale_bits
) + 1;
287 x
+= code
.scale
* scale
;
291 x
+= code
.scale
* scale
- code
.escape
;
295 decoded
[i
] = (x
>> 1) ^ -(x
& 1);
301 static int decode_residues(TAKDecContext
*s
, int32_t *decoded
, int length
)
303 GetBitContext
*gb
= &s
->gb
;
306 if (length
> s
->nb_samples
)
307 return AVERROR_INVALIDDATA
;
312 wlength
= length
/ s
->uval
;
314 rval
= length
- (wlength
* s
->uval
);
316 if (rval
< s
->uval
/ 2)
321 if (wlength
<= 1 || wlength
> 128)
322 return AVERROR_INVALIDDATA
;
324 s
->coding_mode
[0] = mode
= get_bits(gb
, 6);
326 for (i
= 1; i
< wlength
; i
++) {
327 int c
= get_unary(gb
, 1, 6);
331 mode
= get_bits(gb
, 6);
336 /* mode += sign ? (1 - c) : (c - 1) */
337 int sign
= get_bits1(gb
);
338 mode
+= (-sign
^ (c
- 1)) + sign
;
348 s
->coding_mode
[i
] = mode
;
352 while (i
< wlength
) {
355 mode
= s
->coding_mode
[i
];
357 if (i
>= wlength
- 1)
365 } while (s
->coding_mode
[i
] == mode
);
367 if ((ret
= decode_segment(s
, mode
, decoded
, len
)) < 0)
372 mode
= get_bits(gb
, 6);
373 if ((ret
= decode_segment(s
, mode
, decoded
, length
)) < 0)
380 static int get_bits_esc4(GetBitContext
*gb
)
383 return get_bits(gb
, 4) + 1;
388 static int decode_subframe(TAKDecContext
*s
, int32_t *decoded
,
389 int subframe_size
, int prev_subframe_size
)
391 GetBitContext
*gb
= &s
->gb
;
392 int x
, y
, i
, j
, ret
= 0;
393 int dshift
, size
, filter_quant
, filter_order
;
394 int tfilter
[MAX_PREDICTORS
];
397 return decode_residues(s
, decoded
, subframe_size
);
399 filter_order
= predictor_sizes
[get_bits(gb
, 4)];
401 if (prev_subframe_size
> 0 && get_bits1(gb
)) {
402 if (filter_order
> prev_subframe_size
)
403 return AVERROR_INVALIDDATA
;
405 decoded
-= filter_order
;
406 subframe_size
+= filter_order
;
408 if (filter_order
> subframe_size
)
409 return AVERROR_INVALIDDATA
;
413 if (filter_order
> subframe_size
)
414 return AVERROR_INVALIDDATA
;
416 lpc_mode
= get_bits(gb
, 2);
418 return AVERROR_INVALIDDATA
;
420 if ((ret
= decode_residues(s
, decoded
, filter_order
)) < 0)
424 decode_lpc(decoded
, lpc_mode
, filter_order
);
427 dshift
= get_bits_esc4(gb
);
428 size
= get_bits1(gb
) + 6;
432 filter_quant
-= get_bits(gb
, 3) + 1;
433 if (filter_quant
< 3)
434 return AVERROR_INVALIDDATA
;
437 s
->predictors
[0] = get_sbits(gb
, 10);
438 s
->predictors
[1] = get_sbits(gb
, 10);
439 s
->predictors
[2] = get_sbits(gb
, size
) * (1 << (10 - size
));
440 s
->predictors
[3] = get_sbits(gb
, size
) * (1 << (10 - size
));
441 if (filter_order
> 4) {
442 int tmp
= size
- get_bits1(gb
);
444 for (i
= 4; i
< filter_order
; i
++) {
446 x
= tmp
- get_bits(gb
, 2);
447 s
->predictors
[i
] = get_sbits(gb
, x
) * (1 << (10 - size
));
451 tfilter
[0] = s
->predictors
[0] * 64;
452 for (i
= 1; i
< filter_order
; i
++) {
453 uint32_t *p1
= &tfilter
[0];
454 uint32_t *p2
= &tfilter
[i
- 1];
456 for (j
= 0; j
< (i
+ 1) / 2; j
++) {
457 x
= *p1
+ ((int32_t)(s
->predictors
[i
] * *p2
+ 256) >> 9);
458 *p2
+= (int32_t)(s
->predictors
[i
] * *p1
+ 256) >> 9;
463 tfilter
[i
] = s
->predictors
[i
] * 64;
466 x
= 1 << (32 - (15 - filter_quant
));
467 y
= 1 << ((15 - filter_quant
) - 1);
468 for (i
= 0, j
= filter_order
- 1; i
< filter_order
/ 2; i
++, j
--) {
469 s
->filter
[j
] = x
- ((tfilter
[i
] + y
) >> (15 - filter_quant
));
470 s
->filter
[i
] = x
- ((tfilter
[j
] + y
) >> (15 - filter_quant
));
473 if ((ret
= decode_residues(s
, &decoded
[filter_order
],
474 subframe_size
- filter_order
)) < 0)
477 for (i
= 0; i
< filter_order
; i
++)
478 s
->residues
[i
] = *decoded
++ >> dshift
;
480 y
= FF_ARRAY_ELEMS(s
->residues
) - filter_order
;
481 x
= subframe_size
- filter_order
;
483 int tmp
= FFMIN(y
, x
);
485 for (i
= 0; i
< tmp
; i
++) {
486 int v
= 1 << (filter_quant
- 1);
488 if (filter_order
& -16)
489 v
+= (unsigned)s
->adsp
.scalarproduct_int16(&s
->residues
[i
], s
->filter
,
491 for (j
= filter_order
& -16; j
< filter_order
; j
+= 4) {
492 v
+= s
->residues
[i
+ j
+ 3] * (unsigned)s
->filter
[j
+ 3] +
493 s
->residues
[i
+ j
+ 2] * (unsigned)s
->filter
[j
+ 2] +
494 s
->residues
[i
+ j
+ 1] * (unsigned)s
->filter
[j
+ 1] +
495 s
->residues
[i
+ j
] * (unsigned)s
->filter
[j
];
497 v
= (av_clip_intp2(v
>> filter_quant
, 13) * (1 << dshift
)) - (unsigned)*decoded
;
499 s
->residues
[filter_order
+ i
] = v
>> dshift
;
504 memcpy(s
->residues
, &s
->residues
[y
], 2 * filter_order
);
510 static int decode_channel(TAKDecContext
*s
, int chan
)
512 AVCodecContext
*avctx
= s
->avctx
;
513 GetBitContext
*gb
= &s
->gb
;
514 int32_t *decoded
= s
->decoded
[chan
];
515 int left
= s
->nb_samples
- 1;
516 int i
= 0, ret
, prev
= 0;
518 s
->sample_shift
[chan
] = get_bits_esc4(gb
);
519 if (s
->sample_shift
[chan
] >= avctx
->bits_per_raw_sample
)
520 return AVERROR_INVALIDDATA
;
522 *decoded
++ = get_sbits(gb
, avctx
->bits_per_raw_sample
- s
->sample_shift
[chan
]);
523 s
->lpc_mode
[chan
] = get_bits(gb
, 2);
524 s
->nb_subframes
= get_bits(gb
, 3) + 1;
526 if (s
->nb_subframes
> 1) {
527 if (get_bits_left(gb
) < (s
->nb_subframes
- 1) * 6)
528 return AVERROR_INVALIDDATA
;
530 for (; i
< s
->nb_subframes
- 1; i
++) {
531 int v
= get_bits(gb
, 6);
533 s
->subframe_len
[i
] = (v
- prev
) * s
->subframe_scale
;
534 if (s
->subframe_len
[i
] <= 0)
535 return AVERROR_INVALIDDATA
;
537 left
-= s
->subframe_len
[i
];
542 return AVERROR_INVALIDDATA
;
544 s
->subframe_len
[i
] = left
;
547 for (i
= 0; i
< s
->nb_subframes
; i
++) {
548 if ((ret
= decode_subframe(s
, decoded
, s
->subframe_len
[i
], prev
)) < 0)
550 decoded
+= s
->subframe_len
[i
];
551 prev
= s
->subframe_len
[i
];
557 static int decorrelate(TAKDecContext
*s
, int c1
, int c2
, int length
)
559 GetBitContext
*gb
= &s
->gb
;
560 int32_t *p1
= s
->decoded
[c1
] + (s
->dmode
> 5);
561 int32_t *p2
= s
->decoded
[c2
] + (s
->dmode
> 5);
567 length
+= s
->dmode
< 6;
570 case 1: /* left/side */
571 s
->tdsp
.decorrelate_ls(p1
, p2
, length
);
573 case 2: /* side/right */
574 s
->tdsp
.decorrelate_sr(p1
, p2
, length
);
576 case 3: /* side/mid */
577 s
->tdsp
.decorrelate_sm(p1
, p2
, length
);
579 case 4: /* side/left with scale factor */
580 FFSWAP(int32_t*, p1
, p2
);
581 FFSWAP(int32_t, bp1
, bp2
);
582 case 5: /* side/right with scale factor */
583 dshift
= get_bits_esc4(gb
);
584 dfactor
= get_sbits(gb
, 10);
585 s
->tdsp
.decorrelate_sf(p1
, p2
, length
, dshift
, dfactor
);
588 FFSWAP(int32_t*, p1
, p2
);
590 int length2
, order_half
, filter_order
, dval1
, dval2
;
591 int tmp
, x
, code_size
;
594 return AVERROR_INVALIDDATA
;
596 dshift
= get_bits_esc4(gb
);
597 filter_order
= 8 << get_bits1(gb
);
598 dval1
= get_bits1(gb
);
599 dval2
= get_bits1(gb
);
601 for (i
= 0; i
< filter_order
; i
++) {
603 code_size
= 14 - get_bits(gb
, 3);
604 s
->filter
[i
] = get_sbits(gb
, code_size
);
607 order_half
= filter_order
/ 2;
608 length2
= length
- (filter_order
- 1);
610 /* decorrelate beginning samples */
612 for (i
= 0; i
< order_half
; i
++) {
619 /* decorrelate ending samples */
621 for (i
= length2
+ order_half
; i
< length
; i
++) {
629 for (i
= 0; i
< filter_order
; i
++)
630 s
->residues
[i
] = *p2
++ >> dshift
;
633 x
= FF_ARRAY_ELEMS(s
->residues
) - filter_order
;
634 for (; length2
> 0; length2
-= tmp
) {
635 tmp
= FFMIN(length2
, x
);
637 for (i
= 0; i
< tmp
- (tmp
== length2
); i
++)
638 s
->residues
[filter_order
+ i
] = *p2
++ >> dshift
;
640 for (i
= 0; i
< tmp
; i
++) {
643 if (filter_order
== 16) {
644 v
+= s
->adsp
.scalarproduct_int16(&s
->residues
[i
], s
->filter
,
647 v
+= s
->residues
[i
+ 7] * s
->filter
[7] +
648 s
->residues
[i
+ 6] * s
->filter
[6] +
649 s
->residues
[i
+ 5] * s
->filter
[5] +
650 s
->residues
[i
+ 4] * s
->filter
[4] +
651 s
->residues
[i
+ 3] * s
->filter
[3] +
652 s
->residues
[i
+ 2] * s
->filter
[2] +
653 s
->residues
[i
+ 1] * s
->filter
[1] +
654 s
->residues
[i
] * s
->filter
[0];
657 v
= av_clip_intp2(v
>> 10, 13) * (1U << dshift
) - *p1
;
661 memmove(s
->residues
, &s
->residues
[tmp
], 2 * filter_order
);
667 if (s
->dmode
> 0 && s
->dmode
< 6) {
675 static int tak_decode_frame(AVCodecContext
*avctx
, AVFrame
*frame
,
676 int *got_frame_ptr
, AVPacket
*pkt
)
678 TAKDecContext
*s
= avctx
->priv_data
;
679 GetBitContext
*gb
= &s
->gb
;
680 int chan
, i
, ret
, hsize
;
682 if (pkt
->size
< TAK_MIN_FRAME_HEADER_BYTES
)
683 return AVERROR_INVALIDDATA
;
685 if ((ret
= init_get_bits8(gb
, pkt
->data
, pkt
->size
)) < 0)
688 if ((ret
= ff_tak_decode_frame_header(avctx
, gb
, &s
->ti
, 0)) < 0)
691 hsize
= get_bits_count(gb
) / 8;
692 if (avctx
->err_recognition
& (AV_EF_CRCCHECK
|AV_EF_COMPLIANT
)) {
693 if (ff_tak_check_crc(pkt
->data
, hsize
)) {
694 av_log(avctx
, AV_LOG_ERROR
, "CRC error\n");
695 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
696 return AVERROR_INVALIDDATA
;
700 if (s
->ti
.codec
!= TAK_CODEC_MONO_STEREO
&&
701 s
->ti
.codec
!= TAK_CODEC_MULTICHANNEL
) {
702 avpriv_report_missing_feature(avctx
, "TAK codec type %d", s
->ti
.codec
);
703 return AVERROR_PATCHWELCOME
;
705 if (s
->ti
.data_type
) {
706 av_log(avctx
, AV_LOG_ERROR
,
707 "unsupported data type: %d\n", s
->ti
.data_type
);
708 return AVERROR_INVALIDDATA
;
710 if (s
->ti
.codec
== TAK_CODEC_MONO_STEREO
&& s
->ti
.channels
> 2) {
711 av_log(avctx
, AV_LOG_ERROR
,
712 "invalid number of channels: %d\n", s
->ti
.channels
);
713 return AVERROR_INVALIDDATA
;
715 if (s
->ti
.channels
> 6) {
716 av_log(avctx
, AV_LOG_ERROR
,
717 "unsupported number of channels: %d\n", s
->ti
.channels
);
718 return AVERROR_INVALIDDATA
;
721 if (s
->ti
.frame_samples
<= 0) {
722 av_log(avctx
, AV_LOG_ERROR
, "unsupported/invalid number of samples\n");
723 return AVERROR_INVALIDDATA
;
726 avctx
->bits_per_raw_sample
= s
->ti
.bps
;
727 if ((ret
= set_bps_params(avctx
)) < 0)
729 if (s
->ti
.sample_rate
!= avctx
->sample_rate
) {
730 avctx
->sample_rate
= s
->ti
.sample_rate
;
731 set_sample_rate_params(avctx
);
734 av_channel_layout_uninit(&avctx
->ch_layout
);
735 if (s
->ti
.ch_layout
) {
736 av_channel_layout_from_mask(&avctx
->ch_layout
, s
->ti
.ch_layout
);
738 avctx
->ch_layout
.order
= AV_CHANNEL_ORDER_UNSPEC
;
739 avctx
->ch_layout
.nb_channels
= s
->ti
.channels
;
742 s
->nb_samples
= s
->ti
.last_frame_samples
? s
->ti
.last_frame_samples
743 : s
->ti
.frame_samples
;
745 frame
->nb_samples
= s
->nb_samples
;
746 if ((ret
= ff_thread_get_buffer(avctx
, frame
, 0)) < 0)
748 ff_thread_finish_setup(avctx
);
750 if (avctx
->bits_per_raw_sample
<= 16) {
751 int buf_size
= av_samples_get_buffer_size(NULL
, avctx
->ch_layout
.nb_channels
,
753 AV_SAMPLE_FMT_S32P
, 0);
756 av_fast_malloc(&s
->decode_buffer
, &s
->decode_buffer_size
, buf_size
);
757 if (!s
->decode_buffer
)
758 return AVERROR(ENOMEM
);
759 ret
= av_samples_fill_arrays((uint8_t **)s
->decoded
, NULL
,
760 s
->decode_buffer
, avctx
->ch_layout
.nb_channels
,
761 s
->nb_samples
, AV_SAMPLE_FMT_S32P
, 0);
765 for (chan
= 0; chan
< avctx
->ch_layout
.nb_channels
; chan
++)
766 s
->decoded
[chan
] = (int32_t *)frame
->extended_data
[chan
];
769 if (s
->nb_samples
< 16) {
770 for (chan
= 0; chan
< avctx
->ch_layout
.nb_channels
; chan
++) {
771 int32_t *decoded
= s
->decoded
[chan
];
772 for (i
= 0; i
< s
->nb_samples
; i
++)
773 decoded
[i
] = get_sbits(gb
, avctx
->bits_per_raw_sample
);
776 if (s
->ti
.codec
== TAK_CODEC_MONO_STEREO
) {
777 for (chan
= 0; chan
< avctx
->ch_layout
.nb_channels
; chan
++)
778 if (ret
= decode_channel(s
, chan
))
781 if (avctx
->ch_layout
.nb_channels
== 2) {
782 s
->nb_subframes
= get_bits(gb
, 1) + 1;
783 if (s
->nb_subframes
> 1) {
784 s
->subframe_len
[1] = get_bits(gb
, 6);
787 s
->dmode
= get_bits(gb
, 3);
788 if (ret
= decorrelate(s
, 0, 1, s
->nb_samples
- 1))
791 } else if (s
->ti
.codec
== TAK_CODEC_MULTICHANNEL
) {
795 chan
= get_bits(gb
, 4) + 1;
796 if (chan
> avctx
->ch_layout
.nb_channels
)
797 return AVERROR_INVALIDDATA
;
799 for (i
= 0; i
< chan
; i
++) {
800 int nbit
= get_bits(gb
, 4);
802 if (nbit
>= avctx
->ch_layout
.nb_channels
)
803 return AVERROR_INVALIDDATA
;
805 if (ch_mask
& 1 << nbit
)
806 return AVERROR_INVALIDDATA
;
808 s
->mcdparams
[i
].present
= get_bits1(gb
);
809 if (s
->mcdparams
[i
].present
) {
810 s
->mcdparams
[i
].index
= get_bits(gb
, 2);
811 s
->mcdparams
[i
].chan2
= get_bits(gb
, 4);
812 if (s
->mcdparams
[i
].chan2
>= avctx
->ch_layout
.nb_channels
) {
813 av_log(avctx
, AV_LOG_ERROR
,
814 "invalid channel 2 (%d) for %d channel(s)\n",
815 s
->mcdparams
[i
].chan2
, avctx
->ch_layout
.nb_channels
);
816 return AVERROR_INVALIDDATA
;
818 if (s
->mcdparams
[i
].index
== 1) {
819 if ((nbit
== s
->mcdparams
[i
].chan2
) ||
820 (ch_mask
& 1 << s
->mcdparams
[i
].chan2
))
821 return AVERROR_INVALIDDATA
;
823 ch_mask
|= 1 << s
->mcdparams
[i
].chan2
;
824 } else if (!(ch_mask
& 1 << s
->mcdparams
[i
].chan2
)) {
825 return AVERROR_INVALIDDATA
;
828 s
->mcdparams
[i
].chan1
= nbit
;
830 ch_mask
|= 1 << nbit
;
833 chan
= avctx
->ch_layout
.nb_channels
;
834 for (i
= 0; i
< chan
; i
++) {
835 s
->mcdparams
[i
].present
= 0;
836 s
->mcdparams
[i
].chan1
= i
;
840 for (i
= 0; i
< chan
; i
++) {
841 if (s
->mcdparams
[i
].present
&& s
->mcdparams
[i
].index
== 1)
842 if (ret
= decode_channel(s
, s
->mcdparams
[i
].chan2
))
845 if (ret
= decode_channel(s
, s
->mcdparams
[i
].chan1
))
848 if (s
->mcdparams
[i
].present
) {
849 s
->dmode
= mc_dmodes
[s
->mcdparams
[i
].index
];
850 if (ret
= decorrelate(s
,
851 s
->mcdparams
[i
].chan2
,
852 s
->mcdparams
[i
].chan1
,
859 for (chan
= 0; chan
< avctx
->ch_layout
.nb_channels
; chan
++) {
860 int32_t *decoded
= s
->decoded
[chan
];
862 if (s
->lpc_mode
[chan
])
863 decode_lpc(decoded
, s
->lpc_mode
[chan
], s
->nb_samples
);
865 if (s
->sample_shift
[chan
] > 0)
866 for (i
= 0; i
< s
->nb_samples
; i
++)
867 decoded
[i
] *= 1U << s
->sample_shift
[chan
];
873 if (get_bits_left(gb
) < 0)
874 av_log(avctx
, AV_LOG_DEBUG
, "overread\n");
875 else if (get_bits_left(gb
) > 0)
876 av_log(avctx
, AV_LOG_DEBUG
, "underread\n");
878 if (avctx
->err_recognition
& (AV_EF_CRCCHECK
| AV_EF_COMPLIANT
)) {
879 if (ff_tak_check_crc(pkt
->data
+ hsize
,
880 get_bits_count(gb
) / 8 - hsize
)) {
881 av_log(avctx
, AV_LOG_ERROR
, "CRC error\n");
882 if (avctx
->err_recognition
& AV_EF_EXPLODE
)
883 return AVERROR_INVALIDDATA
;
887 /* convert to output buffer */
888 switch (avctx
->sample_fmt
) {
889 case AV_SAMPLE_FMT_U8P
:
890 for (chan
= 0; chan
< avctx
->ch_layout
.nb_channels
; chan
++) {
891 uint8_t *samples
= (uint8_t *)frame
->extended_data
[chan
];
892 int32_t *decoded
= s
->decoded
[chan
];
893 for (i
= 0; i
< s
->nb_samples
; i
++)
894 samples
[i
] = decoded
[i
] + 0x80U
;
897 case AV_SAMPLE_FMT_S16P
:
898 for (chan
= 0; chan
< avctx
->ch_layout
.nb_channels
; chan
++) {
899 int16_t *samples
= (int16_t *)frame
->extended_data
[chan
];
900 int32_t *decoded
= s
->decoded
[chan
];
901 for (i
= 0; i
< s
->nb_samples
; i
++)
902 samples
[i
] = decoded
[i
];
905 case AV_SAMPLE_FMT_S32P
:
906 for (chan
= 0; chan
< avctx
->ch_layout
.nb_channels
; chan
++) {
907 int32_t *samples
= (int32_t *)frame
->extended_data
[chan
];
908 for (i
= 0; i
< s
->nb_samples
; i
++)
909 samples
[i
] *= 1U << 8;
920 static int update_thread_context(AVCodecContext
*dst
,
921 const AVCodecContext
*src
)
923 TAKDecContext
*tsrc
= src
->priv_data
;
924 TAKDecContext
*tdst
= dst
->priv_data
;
928 memcpy(&tdst
->ti
, &tsrc
->ti
, sizeof(TAKStreamInfo
));
933 static av_cold
int tak_decode_close(AVCodecContext
*avctx
)
935 TAKDecContext
*s
= avctx
->priv_data
;
937 av_freep(&s
->decode_buffer
);
942 const FFCodec ff_tak_decoder
= {
944 CODEC_LONG_NAME("TAK (Tom's lossless Audio Kompressor)"),
945 .p
.type
= AVMEDIA_TYPE_AUDIO
,
946 .p
.id
= AV_CODEC_ID_TAK
,
947 .priv_data_size
= sizeof(TAKDecContext
),
948 .init
= tak_decode_init
,
949 .close
= tak_decode_close
,
950 FF_CODEC_DECODE_CB(tak_decode_frame
),
951 UPDATE_THREAD_CONTEXT(update_thread_context
),
952 .p
.capabilities
= AV_CODEC_CAP_DR1
| AV_CODEC_CAP_FRAME_THREADS
| AV_CODEC_CAP_CHANNEL_CONF
,
953 .p
.sample_fmts
= (const enum AVSampleFormat
[]) { AV_SAMPLE_FMT_U8P
,
956 AV_SAMPLE_FMT_NONE
},