2 * TTA (The Lossless True Audio) decoder
3 * Copyright (c) 2006 Alex Beregszaszi
5 * This file is part of Libav.
7 * Libav 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 * Libav 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 Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * TTA (The Lossless True Audio) decoder
25 * @see http://www.true-audio.com/
26 * @see http://tta.corecodec.org/
27 * @author Alex Beregszaszi
30 #define BITSTREAM_READER_LE
36 #include "libavutil/crc.h"
38 #define FORMAT_SIMPLE 1
39 #define FORMAT_ENCRYPTED 2
42 typedef struct TTAFilter
{
43 int32_t shift
, round
, error
;
44 int32_t qm
[MAX_ORDER
];
45 int32_t dx
[MAX_ORDER
];
46 int32_t dl
[MAX_ORDER
];
49 typedef struct TTARice
{
50 uint32_t k0
, k1
, sum0
, sum1
;
53 typedef struct TTAChannel
{
59 typedef struct TTAContext
{
60 AVCodecContext
*avctx
;
63 const AVCRC
*crc_table
;
65 int format
, channels
, bps
;
67 int frame_length
, last_frame_length
;
69 int32_t *decode_buffer
;
74 static const uint32_t shift_1
[] = {
75 0x00000001, 0x00000002, 0x00000004, 0x00000008,
76 0x00000010, 0x00000020, 0x00000040, 0x00000080,
77 0x00000100, 0x00000200, 0x00000400, 0x00000800,
78 0x00001000, 0x00002000, 0x00004000, 0x00008000,
79 0x00010000, 0x00020000, 0x00040000, 0x00080000,
80 0x00100000, 0x00200000, 0x00400000, 0x00800000,
81 0x01000000, 0x02000000, 0x04000000, 0x08000000,
82 0x10000000, 0x20000000, 0x40000000, 0x80000000,
83 0x80000000, 0x80000000, 0x80000000, 0x80000000,
84 0x80000000, 0x80000000, 0x80000000, 0x80000000
87 static const uint32_t * const shift_16
= shift_1
+ 4;
89 static const int32_t ttafilter_configs
[4] = {
96 static void ttafilter_init(TTAFilter
*c
, int32_t shift
) {
97 memset(c
, 0, sizeof(TTAFilter
));
99 c
->round
= shift_1
[shift
-1];
100 // c->round = 1 << (shift - 1);
103 // FIXME: copy paste from original
104 static inline void memshl(register int32_t *a
, register int32_t *b
) {
115 static inline void ttafilter_process(TTAFilter
*c
, int32_t *in
)
117 register int32_t *dl
= c
->dl
, *qm
= c
->qm
, *dx
= c
->dx
, sum
= c
->round
;
120 sum
+= *dl
++ * *qm
, qm
++;
121 sum
+= *dl
++ * *qm
, qm
++;
122 sum
+= *dl
++ * *qm
, qm
++;
123 sum
+= *dl
++ * *qm
, qm
++;
124 sum
+= *dl
++ * *qm
, qm
++;
125 sum
+= *dl
++ * *qm
, qm
++;
126 sum
+= *dl
++ * *qm
, qm
++;
127 sum
+= *dl
++ * *qm
, qm
++;
129 } else if(c
->error
< 0) {
130 sum
+= *dl
++ * (*qm
-= *dx
++), qm
++;
131 sum
+= *dl
++ * (*qm
-= *dx
++), qm
++;
132 sum
+= *dl
++ * (*qm
-= *dx
++), qm
++;
133 sum
+= *dl
++ * (*qm
-= *dx
++), qm
++;
134 sum
+= *dl
++ * (*qm
-= *dx
++), qm
++;
135 sum
+= *dl
++ * (*qm
-= *dx
++), qm
++;
136 sum
+= *dl
++ * (*qm
-= *dx
++), qm
++;
137 sum
+= *dl
++ * (*qm
-= *dx
++), qm
++;
139 sum
+= *dl
++ * (*qm
+= *dx
++), qm
++;
140 sum
+= *dl
++ * (*qm
+= *dx
++), qm
++;
141 sum
+= *dl
++ * (*qm
+= *dx
++), qm
++;
142 sum
+= *dl
++ * (*qm
+= *dx
++), qm
++;
143 sum
+= *dl
++ * (*qm
+= *dx
++), qm
++;
144 sum
+= *dl
++ * (*qm
+= *dx
++), qm
++;
145 sum
+= *dl
++ * (*qm
+= *dx
++), qm
++;
146 sum
+= *dl
++ * (*qm
+= *dx
++), qm
++;
149 *(dx
-0) = ((*(dl
-1) >> 30) | 1) << 2;
150 *(dx
-1) = ((*(dl
-2) >> 30) | 1) << 1;
151 *(dx
-2) = ((*(dl
-3) >> 30) | 1) << 1;
152 *(dx
-3) = ((*(dl
-4) >> 30) | 1);
155 *in
+= (sum
>> c
->shift
);
158 *(dl
-1) = *dl
- *(dl
-1);
159 *(dl
-2) = *(dl
-1) - *(dl
-2);
160 *(dl
-3) = *(dl
-2) - *(dl
-3);
162 memshl(c
->dl
, c
->dl
+ 1);
163 memshl(c
->dx
, c
->dx
+ 1);
166 static void rice_init(TTARice
*c
, uint32_t k0
, uint32_t k1
)
170 c
->sum0
= shift_16
[k0
];
171 c
->sum1
= shift_16
[k1
];
174 static int tta_get_unary(GetBitContext
*gb
)
179 while (get_bits_left(gb
) > 0 && get_bits1(gb
))
184 static int tta_check_crc(TTAContext
*s
, const uint8_t *buf
, int buf_size
)
188 CRC
= AV_RL32(buf
+ buf_size
);
189 crc
= av_crc(s
->crc_table
, 0xFFFFFFFFU
, buf
, buf_size
);
190 if (CRC
!= (crc
^ 0xFFFFFFFFU
)) {
191 av_log(s
->avctx
, AV_LOG_ERROR
, "CRC error\n");
192 return AVERROR_INVALIDDATA
;
198 static av_cold
int tta_decode_init(AVCodecContext
* avctx
)
200 TTAContext
*s
= avctx
->priv_data
;
205 // 30bytes includes a seektable with one frame
206 if (avctx
->extradata_size
< 30)
209 init_get_bits(&s
->gb
, avctx
->extradata
, avctx
->extradata_size
* 8);
210 if (show_bits_long(&s
->gb
, 32) == AV_RL32("TTA1"))
212 if (avctx
->err_recognition
& AV_EF_CRCCHECK
) {
213 s
->crc_table
= av_crc_get_table(AV_CRC_32_IEEE_LE
);
214 tta_check_crc(s
, avctx
->extradata
, 18);
218 skip_bits_long(&s
->gb
, 32);
220 s
->format
= get_bits(&s
->gb
, 16);
222 av_log(s
->avctx
, AV_LOG_ERROR
, "Invalid format\n");
225 if (s
->format
== FORMAT_ENCRYPTED
) {
226 av_log_missing_feature(s
->avctx
, "Encrypted TTA", 0);
227 return AVERROR_PATCHWELCOME
;
229 avctx
->channels
= s
->channels
= get_bits(&s
->gb
, 16);
230 avctx
->bits_per_coded_sample
= get_bits(&s
->gb
, 16);
231 s
->bps
= (avctx
->bits_per_coded_sample
+ 7) / 8;
232 avctx
->sample_rate
= get_bits_long(&s
->gb
, 32);
233 s
->data_length
= get_bits_long(&s
->gb
, 32);
234 skip_bits_long(&s
->gb
, 32); // CRC32 of header
236 if (s
->channels
== 0) {
237 av_log(s
->avctx
, AV_LOG_ERROR
, "Invalid number of channels\n");
238 return AVERROR_INVALIDDATA
;
239 } else if (avctx
->sample_rate
== 0) {
240 av_log(s
->avctx
, AV_LOG_ERROR
, "Invalid samplerate\n");
241 return AVERROR_INVALIDDATA
;
246 avctx
->sample_fmt
= AV_SAMPLE_FMT_S16
;
247 avctx
->bits_per_raw_sample
= 16;
250 avctx
->sample_fmt
= AV_SAMPLE_FMT_S32
;
251 avctx
->bits_per_raw_sample
= 24;
254 av_log(avctx
, AV_LOG_ERROR
, "Invalid/unsupported sample format.\n");
255 return AVERROR_INVALIDDATA
;
259 if (avctx
->sample_rate
> 0x7FFFFFu
) {
260 av_log(avctx
, AV_LOG_ERROR
, "sample_rate too large\n");
261 return AVERROR(EINVAL
);
263 s
->frame_length
= 256 * avctx
->sample_rate
/ 245;
265 s
->last_frame_length
= s
->data_length
% s
->frame_length
;
266 total_frames
= s
->data_length
/ s
->frame_length
+
267 (s
->last_frame_length
? 1 : 0);
269 av_log(s
->avctx
, AV_LOG_DEBUG
, "format: %d chans: %d bps: %d rate: %d block: %d\n",
270 s
->format
, avctx
->channels
, avctx
->bits_per_coded_sample
, avctx
->sample_rate
,
272 av_log(s
->avctx
, AV_LOG_DEBUG
, "data_length: %d frame_length: %d last: %d total: %d\n",
273 s
->data_length
, s
->frame_length
, s
->last_frame_length
, total_frames
);
276 if (avctx
->extradata_size
<= 26 || total_frames
> INT_MAX
/ 4 ||
277 avctx
->extradata_size
- 26 < total_frames
* 4)
278 av_log(avctx
, AV_LOG_WARNING
, "Seek table missing or too small\n");
279 else if (avctx
->err_recognition
& AV_EF_CRCCHECK
) {
280 if (tta_check_crc(s
, avctx
->extradata
+ 22, total_frames
* 4))
281 return AVERROR_INVALIDDATA
;
283 skip_bits_long(&s
->gb
, 32 * total_frames
);
284 skip_bits_long(&s
->gb
, 32); // CRC32 of seektable
286 if(s
->frame_length
>= UINT_MAX
/ (s
->channels
* sizeof(int32_t))){
287 av_log(avctx
, AV_LOG_ERROR
, "frame_length too large\n");
292 s
->decode_buffer
= av_mallocz(sizeof(int32_t)*s
->frame_length
*s
->channels
);
293 if (!s
->decode_buffer
)
294 return AVERROR(ENOMEM
);
296 s
->ch_ctx
= av_malloc(avctx
->channels
* sizeof(*s
->ch_ctx
));
298 av_freep(&s
->decode_buffer
);
299 return AVERROR(ENOMEM
);
302 av_log(avctx
, AV_LOG_ERROR
, "Wrong extradata present\n");
306 avcodec_get_frame_defaults(&s
->frame
);
307 avctx
->coded_frame
= &s
->frame
;
312 static int tta_decode_frame(AVCodecContext
*avctx
, void *data
,
313 int *got_frame_ptr
, AVPacket
*avpkt
)
315 const uint8_t *buf
= avpkt
->data
;
316 int buf_size
= avpkt
->size
;
317 TTAContext
*s
= avctx
->priv_data
;
319 int cur_chan
= 0, framelen
= s
->frame_length
;
322 if (avctx
->err_recognition
& AV_EF_CRCCHECK
) {
323 if (buf_size
< 4 || tta_check_crc(s
, buf
, buf_size
- 4))
324 return AVERROR_INVALIDDATA
;
327 init_get_bits(&s
->gb
, buf
, buf_size
*8);
329 /* get output buffer */
330 s
->frame
.nb_samples
= framelen
;
331 if ((ret
= ff_get_buffer(avctx
, &s
->frame
)) < 0) {
332 av_log(avctx
, AV_LOG_ERROR
, "get_buffer() failed\n");
336 // decode directly to output buffer for 24-bit sample format
338 s
->decode_buffer
= (int32_t *)s
->frame
.data
[0];
340 // init per channel states
341 for (i
= 0; i
< s
->channels
; i
++) {
342 s
->ch_ctx
[i
].predictor
= 0;
343 ttafilter_init(&s
->ch_ctx
[i
].filter
, ttafilter_configs
[s
->bps
-1]);
344 rice_init(&s
->ch_ctx
[i
].rice
, 10, 10);
348 for (p
= s
->decode_buffer
; p
< s
->decode_buffer
+ (framelen
* s
->channels
); p
++) {
349 int32_t *predictor
= &s
->ch_ctx
[cur_chan
].predictor
;
350 TTAFilter
*filter
= &s
->ch_ctx
[cur_chan
].filter
;
351 TTARice
*rice
= &s
->ch_ctx
[cur_chan
].rice
;
352 uint32_t unary
, depth
, k
;
355 unary
= tta_get_unary(&s
->gb
);
366 if (get_bits_left(&s
->gb
) < k
) {
367 ret
= AVERROR_INVALIDDATA
;
372 if (k
> MIN_CACHE_BITS
) {
373 ret
= AVERROR_INVALIDDATA
;
376 value
= (unary
<< k
) + get_bits(&s
->gb
, k
);
380 // FIXME: copy paste from original
383 rice
->sum1
+= value
- (rice
->sum1
>> 4);
384 if (rice
->k1
> 0 && rice
->sum1
< shift_16
[rice
->k1
])
386 else if(rice
->sum1
> shift_16
[rice
->k1
+ 1])
388 value
+= shift_1
[rice
->k0
];
390 rice
->sum0
+= value
- (rice
->sum0
>> 4);
391 if (rice
->k0
> 0 && rice
->sum0
< shift_16
[rice
->k0
])
393 else if(rice
->sum0
> shift_16
[rice
->k0
+ 1])
397 // extract coded value
398 *p
= 1 + ((value
>> 1) ^ ((value
& 1) - 1));
401 ttafilter_process(filter
, p
);
403 // fixed order prediction
404 #define PRED(x, k) (int32_t)((((uint64_t)x << k) - x) >> k)
406 case 1: *p
+= PRED(*predictor
, 4); break;
408 case 3: *p
+= PRED(*predictor
, 5); break;
409 case 4: *p
+= *predictor
; break;
414 if (cur_chan
< (s
->channels
-1))
417 // decorrelate in case of multiple channels
418 if (s
->channels
> 1) {
420 for (*p
+= *r
/ 2; r
> p
- s
->channels
; r
--)
425 // check for last frame
426 if (i
== s
->last_frame_length
&& get_bits_left(&s
->gb
) / 8 == 4) {
427 s
->frame
.nb_samples
= framelen
= s
->last_frame_length
;
433 align_get_bits(&s
->gb
);
434 if (get_bits_left(&s
->gb
) < 32) {
435 ret
= AVERROR_INVALIDDATA
;
438 skip_bits_long(&s
->gb
, 32); // frame crc
440 // convert to output buffer
442 int16_t *samples
= (int16_t *)s
->frame
.data
[0];
443 for (p
= s
->decode_buffer
; p
< s
->decode_buffer
+ (framelen
* s
->channels
); p
++)
446 // shift samples for 24-bit sample format
447 int32_t *samples
= (int32_t *)s
->frame
.data
[0];
448 for (i
= 0; i
< framelen
* s
->channels
; i
++)
450 // reset decode buffer
451 s
->decode_buffer
= NULL
;
455 *(AVFrame
*)data
= s
->frame
;
459 // reset decode buffer
461 s
->decode_buffer
= NULL
;
465 static av_cold
int tta_decode_close(AVCodecContext
*avctx
) {
466 TTAContext
*s
= avctx
->priv_data
;
468 av_free(s
->decode_buffer
);
469 av_freep(&s
->ch_ctx
);
474 AVCodec ff_tta_decoder
= {
476 .type
= AVMEDIA_TYPE_AUDIO
,
477 .id
= AV_CODEC_ID_TTA
,
478 .priv_data_size
= sizeof(TTAContext
),
479 .init
= tta_decode_init
,
480 .close
= tta_decode_close
,
481 .decode
= tta_decode_frame
,
482 .capabilities
= CODEC_CAP_DR1
,
483 .long_name
= NULL_IF_CONFIG_SMALL("TTA (True Audio)"),