~ubuntu-branches/ubuntu/vivid/libav/vivid

« back to all changes in this revision

Viewing changes to libavcodec/takdec.c

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2013-10-22 23:24:08 UTC
  • mfrom: (1.3.36 sid)
  • Revision ID: package-import@ubuntu.com-20131022232408-b8tvvn4pyzri9mi3
Tags: 6:9.10-1ubuntu1
* Build all -extra flavors from this source package, as libav got demoted
  from main to universe, cf LP: #1243235
* Simplify debian/rules to follow exactly the code that debian executes
* New upstream (LP: #1180288) fixes lots of security issues (LP: #1242802)
* Merge from unstable, remaining changes:
  - build-depend on libtiff5-dev rather than libtiff4-dev,
    avoids FTBFS caused by imlib
  - follow the regular debian codepaths

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * TAK decoder
 
3
 * Copyright (c) 2012 Paul B Mahol
 
4
 *
 
5
 * This file is part of Libav.
 
6
 *
 
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.
 
11
 *
 
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.
 
16
 *
 
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
 
20
 */
 
21
 
 
22
/**
 
23
 * @file
 
24
 * TAK (Tom's lossless Audio Kompressor) decoder
 
25
 * @author Paul B Mahol
 
26
 */
 
27
 
 
28
#include "libavutil/samplefmt.h"
 
29
#include "tak.h"
 
30
#include "avcodec.h"
 
31
#include "dsputil.h"
 
32
#include "internal.h"
 
33
#include "unary.h"
 
34
 
 
35
#define MAX_SUBFRAMES     8                         // max number of subframes per channel
 
36
#define MAX_PREDICTORS  256
 
37
 
 
38
typedef struct MCDParam {
 
39
    int8_t present;                                 // decorrelation parameter availability for this channel
 
40
    int8_t index;                                   // index into array of decorrelation types
 
41
    int8_t chan1;
 
42
    int8_t chan2;
 
43
} MCDParam;
 
44
 
 
45
typedef struct TAKDecContext {
 
46
    AVCodecContext *avctx;                          // parent AVCodecContext
 
47
    AVFrame         frame;                          // AVFrame for decoded output
 
48
    DSPContext      dsp;
 
49
    TAKStreamInfo   ti;
 
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
 
54
    uint8_t        *decode_buffer;
 
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
    int             subframe_scale;
 
61
 
 
62
    int8_t          dmode;                          // channel decorrelation type in the current frame
 
63
 
 
64
    MCDParam        mcdparams[TAK_MAX_CHANNELS];    // multichannel decorrelation parameters
 
65
 
 
66
    int16_t        *residues;
 
67
    unsigned int    residues_buf_size;
 
68
} TAKDecContext;
 
69
 
 
70
static const int8_t mc_dmodes[] = { 1, 3, 4, 6, };
 
71
 
 
72
static const uint16_t predictor_sizes[] = {
 
73
    4, 8, 12, 16, 24, 32, 48, 64, 80, 96, 128, 160, 192, 224, 256, 0,
 
74
};
 
75
 
 
76
static const struct CParam {
 
77
    int init;
 
78
    int escape;
 
79
    int scale;
 
80
    int aescape;
 
81
    int bias;
 
82
} xcodes[50] = {
 
83
    { 0x01, 0x0000001, 0x0000001, 0x0000003, 0x0000008 },
 
84
    { 0x02, 0x0000003, 0x0000001, 0x0000007, 0x0000006 },
 
85
    { 0x03, 0x0000005, 0x0000002, 0x000000E, 0x000000D },
 
86
    { 0x03, 0x0000003, 0x0000003, 0x000000D, 0x0000018 },
 
87
    { 0x04, 0x000000B, 0x0000004, 0x000001C, 0x0000019 },
 
88
    { 0x04, 0x0000006, 0x0000006, 0x000001A, 0x0000030 },
 
89
    { 0x05, 0x0000016, 0x0000008, 0x0000038, 0x0000032 },
 
90
    { 0x05, 0x000000C, 0x000000C, 0x0000034, 0x0000060 },
 
91
    { 0x06, 0x000002C, 0x0000010, 0x0000070, 0x0000064 },
 
92
    { 0x06, 0x0000018, 0x0000018, 0x0000068, 0x00000C0 },
 
93
    { 0x07, 0x0000058, 0x0000020, 0x00000E0, 0x00000C8 },
 
94
    { 0x07, 0x0000030, 0x0000030, 0x00000D0, 0x0000180 },
 
95
    { 0x08, 0x00000B0, 0x0000040, 0x00001C0, 0x0000190 },
 
96
    { 0x08, 0x0000060, 0x0000060, 0x00001A0, 0x0000300 },
 
97
    { 0x09, 0x0000160, 0x0000080, 0x0000380, 0x0000320 },
 
98
    { 0x09, 0x00000C0, 0x00000C0, 0x0000340, 0x0000600 },
 
99
    { 0x0A, 0x00002C0, 0x0000100, 0x0000700, 0x0000640 },
 
100
    { 0x0A, 0x0000180, 0x0000180, 0x0000680, 0x0000C00 },
 
101
    { 0x0B, 0x0000580, 0x0000200, 0x0000E00, 0x0000C80 },
 
102
    { 0x0B, 0x0000300, 0x0000300, 0x0000D00, 0x0001800 },
 
103
    { 0x0C, 0x0000B00, 0x0000400, 0x0001C00, 0x0001900 },
 
104
    { 0x0C, 0x0000600, 0x0000600, 0x0001A00, 0x0003000 },
 
105
    { 0x0D, 0x0001600, 0x0000800, 0x0003800, 0x0003200 },
 
106
    { 0x0D, 0x0000C00, 0x0000C00, 0x0003400, 0x0006000 },
 
107
    { 0x0E, 0x0002C00, 0x0001000, 0x0007000, 0x0006400 },
 
108
    { 0x0E, 0x0001800, 0x0001800, 0x0006800, 0x000C000 },
 
109
    { 0x0F, 0x0005800, 0x0002000, 0x000E000, 0x000C800 },
 
110
    { 0x0F, 0x0003000, 0x0003000, 0x000D000, 0x0018000 },
 
111
    { 0x10, 0x000B000, 0x0004000, 0x001C000, 0x0019000 },
 
112
    { 0x10, 0x0006000, 0x0006000, 0x001A000, 0x0030000 },
 
113
    { 0x11, 0x0016000, 0x0008000, 0x0038000, 0x0032000 },
 
114
    { 0x11, 0x000C000, 0x000C000, 0x0034000, 0x0060000 },
 
115
    { 0x12, 0x002C000, 0x0010000, 0x0070000, 0x0064000 },
 
116
    { 0x12, 0x0018000, 0x0018000, 0x0068000, 0x00C0000 },
 
117
    { 0x13, 0x0058000, 0x0020000, 0x00E0000, 0x00C8000 },
 
118
    { 0x13, 0x0030000, 0x0030000, 0x00D0000, 0x0180000 },
 
119
    { 0x14, 0x00B0000, 0x0040000, 0x01C0000, 0x0190000 },
 
120
    { 0x14, 0x0060000, 0x0060000, 0x01A0000, 0x0300000 },
 
121
    { 0x15, 0x0160000, 0x0080000, 0x0380000, 0x0320000 },
 
122
    { 0x15, 0x00C0000, 0x00C0000, 0x0340000, 0x0600000 },
 
123
    { 0x16, 0x02C0000, 0x0100000, 0x0700000, 0x0640000 },
 
124
    { 0x16, 0x0180000, 0x0180000, 0x0680000, 0x0C00000 },
 
125
    { 0x17, 0x0580000, 0x0200000, 0x0E00000, 0x0C80000 },
 
126
    { 0x17, 0x0300000, 0x0300000, 0x0D00000, 0x1800000 },
 
127
    { 0x18, 0x0B00000, 0x0400000, 0x1C00000, 0x1900000 },
 
128
    { 0x18, 0x0600000, 0x0600000, 0x1A00000, 0x3000000 },
 
129
    { 0x19, 0x1600000, 0x0800000, 0x3800000, 0x3200000 },
 
130
    { 0x19, 0x0C00000, 0x0C00000, 0x3400000, 0x6000000 },
 
131
    { 0x1A, 0x2C00000, 0x1000000, 0x7000000, 0x6400000 },
 
132
    { 0x1A, 0x1800000, 0x1800000, 0x6800000, 0xC000000 },
 
133
};
 
134
 
 
135
static av_cold void tak_init_static_data(AVCodec *codec)
 
136
{
 
137
    ff_tak_init_crc();
 
138
}
 
139
 
 
140
static int set_bps_params(AVCodecContext *avctx)
 
141
{
 
142
    switch (avctx->bits_per_coded_sample) {
 
143
    case 8:
 
144
        avctx->sample_fmt = AV_SAMPLE_FMT_U8P;
 
145
        break;
 
146
    case 16:
 
147
        avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
 
148
        break;
 
149
    case 24:
 
150
        avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
 
151
        break;
 
152
    default:
 
153
        av_log(avctx, AV_LOG_ERROR, "unsupported bits per sample: %d\n",
 
154
               avctx->bits_per_coded_sample);
 
155
        return AVERROR_INVALIDDATA;
 
156
    }
 
157
    avctx->bits_per_raw_sample = avctx->bits_per_coded_sample;
 
158
 
 
159
    return 0;
 
160
}
 
161
 
 
162
static void set_sample_rate_params(AVCodecContext *avctx)
 
163
{
 
164
    TAKDecContext *s  = avctx->priv_data;
 
165
    int shift         = 3 - (avctx->sample_rate / 11025);
 
166
    shift             = FFMAX(0, shift);
 
167
    s->uval           = FFALIGN(avctx->sample_rate + 511 >> 9, 4) << shift;
 
168
    s->subframe_scale = FFALIGN(avctx->sample_rate + 511 >> 9, 4) << 1;
 
169
}
 
170
 
 
171
static av_cold int tak_decode_init(AVCodecContext *avctx)
 
172
{
 
173
    TAKDecContext *s = avctx->priv_data;
 
174
 
 
175
    ff_dsputil_init(&s->dsp, avctx);
 
176
 
 
177
    s->avctx = avctx;
 
178
    avcodec_get_frame_defaults(&s->frame);
 
179
    avctx->coded_frame = &s->frame;
 
180
 
 
181
    set_sample_rate_params(avctx);
 
182
 
 
183
    return set_bps_params(avctx);
 
184
}
 
185
 
 
186
static void decode_lpc(int32_t *coeffs, int mode, int length)
 
187
{
 
188
    int i;
 
189
 
 
190
    if (length < 2)
 
191
        return;
 
192
 
 
193
    if (mode == 1) {
 
194
        int a1 = *coeffs++;
 
195
        for (i = 0; i < length - 1 >> 1; i++) {
 
196
            *coeffs   += a1;
 
197
            coeffs[1] += *coeffs;
 
198
            a1         = coeffs[1];
 
199
            coeffs    += 2;
 
200
        }
 
201
        if (length - 1 & 1)
 
202
            *coeffs += a1;
 
203
    } else if (mode == 2) {
 
204
        int a1    = coeffs[1];
 
205
        int a2    = a1 + *coeffs;
 
206
        coeffs[1] = a2;
 
207
        if (length > 2) {
 
208
            coeffs += 2;
 
209
            for (i = 0; i < length - 2 >> 1; i++) {
 
210
                int a3    = *coeffs + a1;
 
211
                int a4    = a3 + a2;
 
212
                *coeffs   = a4;
 
213
                a1        = coeffs[1] + a3;
 
214
                a2        = a1 + a4;
 
215
                coeffs[1] = a2;
 
216
                coeffs   += 2;
 
217
            }
 
218
            if (length & 1)
 
219
                *coeffs += a1 + a2;
 
220
        }
 
221
    } else if (mode == 3) {
 
222
        int a1    = coeffs[1];
 
223
        int a2    = a1 + *coeffs;
 
224
        coeffs[1] = a2;
 
225
        if (length > 2) {
 
226
            int a3  = coeffs[2];
 
227
            int a4  = a3 + a1;
 
228
            int a5  = a4 + a2;
 
229
            coeffs += 3;
 
230
            for (i = 0; i < length - 3; i++) {
 
231
                a3     += *coeffs;
 
232
                a4     += a3;
 
233
                a5     += a4;
 
234
                *coeffs = a5;
 
235
                coeffs++;
 
236
            }
 
237
        }
 
238
    }
 
239
}
 
240
 
 
241
static int decode_segment(GetBitContext *gb, int mode, int32_t *decoded,
 
242
                          int len)
 
243
{
 
244
    struct CParam code;
 
245
    int i;
 
246
 
 
247
    if (!mode) {
 
248
        memset(decoded, 0, len * sizeof(*decoded));
 
249
        return 0;
 
250
    }
 
251
 
 
252
    if (mode > FF_ARRAY_ELEMS(xcodes))
 
253
        return AVERROR_INVALIDDATA;
 
254
    code = xcodes[mode - 1];
 
255
 
 
256
    for (i = 0; i < len; i++) {
 
257
        int x = get_bits_long(gb, code.init);
 
258
        if (x >= code.escape && get_bits1(gb)) {
 
259
            x |= 1 << code.init;
 
260
            if (x >= code.aescape) {
 
261
                int scale = get_unary(gb, 1, 9);
 
262
                if (scale == 9) {
 
263
                    int scale_bits = get_bits(gb, 3);
 
264
                    if (scale_bits > 0) {
 
265
                        if (scale_bits == 7) {
 
266
                            scale_bits += get_bits(gb, 5);
 
267
                            if (scale_bits > 29)
 
268
                                return AVERROR_INVALIDDATA;
 
269
                        }
 
270
                        scale = get_bits_long(gb, scale_bits) + 1;
 
271
                        x    += code.scale * scale;
 
272
                    }
 
273
                    x += code.bias;
 
274
                } else
 
275
                    x += code.scale * scale - code.escape;
 
276
            } else
 
277
                x -= code.escape;
 
278
        }
 
279
        decoded[i] = (x >> 1) ^ -(x & 1);
 
280
    }
 
281
 
 
282
    return 0;
 
283
}
 
284
 
 
285
static int decode_residues(TAKDecContext *s, int32_t *decoded, int length)
 
286
{
 
287
    GetBitContext *gb = &s->gb;
 
288
    int i, mode, ret;
 
289
 
 
290
    if (length > s->nb_samples)
 
291
        return AVERROR_INVALIDDATA;
 
292
 
 
293
    if (get_bits1(gb)) {
 
294
        int wlength, rval;
 
295
        int coding_mode[128];
 
296
 
 
297
        wlength = length / s->uval;
 
298
 
 
299
        rval = length - (wlength * s->uval);
 
300
 
 
301
        if (rval < s->uval / 2)
 
302
            rval += s->uval;
 
303
        else
 
304
            wlength++;
 
305
 
 
306
        if (wlength <= 1 || wlength > 128)
 
307
            return AVERROR_INVALIDDATA;
 
308
 
 
309
        coding_mode[0] = mode = get_bits(gb, 6);
 
310
 
 
311
        for (i = 1; i < wlength; i++) {
 
312
            int c = get_unary(gb, 1, 6);
 
313
 
 
314
            switch (c) {
 
315
            case 6:
 
316
                mode = get_bits(gb, 6);
 
317
                break;
 
318
            case 5:
 
319
            case 4:
 
320
            case 3: {
 
321
                /* mode += sign ? (1 - c) : (c - 1) */
 
322
                int sign = get_bits1(gb);
 
323
                mode    += (-sign ^ (c - 1)) + sign;
 
324
                break;
 
325
            }
 
326
            case 2:
 
327
                mode++;
 
328
                break;
 
329
            case 1:
 
330
                mode--;
 
331
                break;
 
332
            }
 
333
            coding_mode[i] = mode;
 
334
        }
 
335
 
 
336
        i = 0;
 
337
        while (i < wlength) {
 
338
            int len = 0;
 
339
 
 
340
            mode = coding_mode[i];
 
341
            do {
 
342
                if (i >= wlength - 1)
 
343
                    len += rval;
 
344
                else
 
345
                    len += s->uval;
 
346
                i++;
 
347
 
 
348
                if (i == wlength)
 
349
                    break;
 
350
            } while (coding_mode[i] == mode);
 
351
 
 
352
            if ((ret = decode_segment(gb, mode, decoded, len)) < 0)
 
353
                return ret;
 
354
            decoded += len;
 
355
        }
 
356
    } else {
 
357
        mode = get_bits(gb, 6);
 
358
        if ((ret = decode_segment(gb, mode, decoded, length)) < 0)
 
359
            return ret;
 
360
    }
 
361
 
 
362
    return 0;
 
363
}
 
364
 
 
365
static int get_bits_esc4(GetBitContext *gb)
 
366
{
 
367
    if (get_bits1(gb))
 
368
        return get_bits(gb, 4) + 1;
 
369
    else
 
370
        return 0;
 
371
}
 
372
 
 
373
static void decode_filter_coeffs(TAKDecContext *s, int filter_order, int size,
 
374
                                 int filter_quant, int16_t *filter)
 
375
{
 
376
    GetBitContext *gb = &s->gb;
 
377
    int i, j, a, b;
 
378
    int filter_tmp[MAX_PREDICTORS];
 
379
    int16_t predictors[MAX_PREDICTORS];
 
380
 
 
381
    predictors[0] = get_sbits(gb, 10);
 
382
    predictors[1] = get_sbits(gb, 10);
 
383
    predictors[2] = get_sbits(gb, size) << (10 - size);
 
384
    predictors[3] = get_sbits(gb, size) << (10 - size);
 
385
    if (filter_order > 4) {
 
386
        int av_uninit(code_size);
 
387
        int code_size_base = size - get_bits1(gb);
 
388
 
 
389
        for (i = 4; i < filter_order; i++) {
 
390
            if (!(i & 3))
 
391
                code_size = code_size_base - get_bits(gb, 2);
 
392
            predictors[i] = get_sbits(gb, code_size) << (10 - size);
 
393
        }
 
394
    }
 
395
 
 
396
    filter_tmp[0] = predictors[0] << 6;
 
397
    for (i = 1; i < filter_order; i++) {
 
398
        int *p1 = &filter_tmp[0];
 
399
        int *p2 = &filter_tmp[i - 1];
 
400
 
 
401
        for (j = 0; j < (i + 1) / 2; j++) {
 
402
            int tmp = *p1 + (predictors[i] * *p2 + 256 >> 9);
 
403
            *p2     = *p2 + (predictors[i] * *p1 + 256 >> 9);
 
404
            *p1     = tmp;
 
405
            p1++;
 
406
            p2--;
 
407
        }
 
408
 
 
409
        filter_tmp[i] = predictors[i] << 6;
 
410
    }
 
411
 
 
412
    a = 1 << (32 - (15 - filter_quant));
 
413
    b = 1 << ((15 - filter_quant) - 1);
 
414
    for (i = 0, j = filter_order - 1; i < filter_order / 2; i++, j--) {
 
415
        filter[j] = a - ((filter_tmp[i] + b) >> (15 - filter_quant));
 
416
        filter[i] = a - ((filter_tmp[j] + b) >> (15 - filter_quant));
 
417
    }
 
418
}
 
419
 
 
420
static int decode_subframe(TAKDecContext *s, int32_t *decoded,
 
421
                           int subframe_size, int prev_subframe_size)
 
422
{
 
423
    LOCAL_ALIGNED_16(int16_t, filter, [MAX_PREDICTORS]);
 
424
    GetBitContext *gb = &s->gb;
 
425
    int i, ret;
 
426
    int dshift, size, filter_quant, filter_order;
 
427
 
 
428
    memset(filter, 0, MAX_PREDICTORS * sizeof(*filter));
 
429
 
 
430
    if (!get_bits1(gb))
 
431
        return decode_residues(s, decoded, subframe_size);
 
432
 
 
433
    filter_order = predictor_sizes[get_bits(gb, 4)];
 
434
 
 
435
    if (prev_subframe_size > 0 && get_bits1(gb)) {
 
436
        if (filter_order > prev_subframe_size)
 
437
            return AVERROR_INVALIDDATA;
 
438
 
 
439
        decoded       -= filter_order;
 
440
        subframe_size += filter_order;
 
441
 
 
442
        if (filter_order > subframe_size)
 
443
            return AVERROR_INVALIDDATA;
 
444
    } else {
 
445
        int lpc_mode;
 
446
 
 
447
        if (filter_order > subframe_size)
 
448
            return AVERROR_INVALIDDATA;
 
449
 
 
450
        lpc_mode = get_bits(gb, 2);
 
451
        if (lpc_mode > 2)
 
452
            return AVERROR_INVALIDDATA;
 
453
 
 
454
        if ((ret = decode_residues(s, decoded, filter_order)) < 0)
 
455
            return ret;
 
456
 
 
457
        if (lpc_mode)
 
458
            decode_lpc(decoded, lpc_mode, filter_order);
 
459
    }
 
460
 
 
461
    dshift = get_bits_esc4(gb);
 
462
    size   = get_bits1(gb) + 6;
 
463
 
 
464
    filter_quant = 10;
 
465
    if (get_bits1(gb)) {
 
466
        filter_quant -= get_bits(gb, 3) + 1;
 
467
        if (filter_quant < 3)
 
468
            return AVERROR_INVALIDDATA;
 
469
    }
 
470
 
 
471
    decode_filter_coeffs(s, filter_order, size, filter_quant, filter);
 
472
 
 
473
    if ((ret = decode_residues(s, &decoded[filter_order],
 
474
                               subframe_size - filter_order)) < 0)
 
475
        return ret;
 
476
 
 
477
    av_fast_malloc(&s->residues, &s->residues_buf_size,
 
478
                   FFALIGN(subframe_size + 16, 16) * sizeof(*s->residues));
 
479
    if (!s->residues)
 
480
        return AVERROR(ENOMEM);
 
481
    memset(s->residues, 0, s->residues_buf_size);
 
482
 
 
483
    for (i = 0; i < filter_order; i++)
 
484
        s->residues[i] = *decoded++ >> dshift;
 
485
 
 
486
    for (i = 0; i < subframe_size - filter_order; i++) {
 
487
        int v = 1 << (filter_quant - 1);
 
488
 
 
489
        v += s->dsp.scalarproduct_int16(&s->residues[i], filter,
 
490
                                        FFALIGN(filter_order, 16));
 
491
 
 
492
        v = (av_clip(v >> filter_quant, -8192, 8191) << dshift) - *decoded;
 
493
        *decoded++ = v;
 
494
        s->residues[filter_order + i] = v >> dshift;
 
495
    }
 
496
 
 
497
    emms_c();
 
498
 
 
499
    return 0;
 
500
}
 
501
 
 
502
static int decode_channel(TAKDecContext *s, int chan)
 
503
{
 
504
    AVCodecContext *avctx = s->avctx;
 
505
    GetBitContext *gb     = &s->gb;
 
506
    int32_t *decoded      = s->decoded[chan];
 
507
    int left              = s->nb_samples - 1;
 
508
    int i, prev, ret, nb_subframes;
 
509
    int subframe_len[MAX_SUBFRAMES];
 
510
 
 
511
    s->sample_shift[chan] = get_bits_esc4(gb);
 
512
    if (s->sample_shift[chan] >= avctx->bits_per_coded_sample)
 
513
        return AVERROR_INVALIDDATA;
 
514
 
 
515
    /* NOTE: TAK 2.2.0 appears to set the sample value to 0 if
 
516
     *       bits_per_coded_sample - sample_shift is 1, but this produces
 
517
     *       non-bit-exact output. Reading the 1 bit using get_sbits() instead
 
518
     *       of skipping it produces bit-exact output. This has been reported
 
519
     *       to the TAK author. */
 
520
    *decoded++        = get_sbits(gb,
 
521
                                  avctx->bits_per_coded_sample -
 
522
                                  s->sample_shift[chan]);
 
523
    s->lpc_mode[chan] = get_bits(gb, 2);
 
524
    nb_subframes      = get_bits(gb, 3) + 1;
 
525
 
 
526
    i = 0;
 
527
    if (nb_subframes > 1) {
 
528
        if (get_bits_left(gb) < (nb_subframes - 1) * 6)
 
529
            return AVERROR_INVALIDDATA;
 
530
 
 
531
        prev = 0;
 
532
        for (; i < nb_subframes - 1; i++) {
 
533
            int subframe_end = get_bits(gb, 6) * s->subframe_scale;
 
534
            if (subframe_end <= prev)
 
535
                return AVERROR_INVALIDDATA;
 
536
            subframe_len[i] = subframe_end - prev;
 
537
            left           -= subframe_len[i];
 
538
            prev            = subframe_end;
 
539
        }
 
540
 
 
541
        if (left <= 0)
 
542
            return AVERROR_INVALIDDATA;
 
543
    }
 
544
    subframe_len[i] = left;
 
545
 
 
546
    prev = 0;
 
547
    for (i = 0; i < nb_subframes; i++) {
 
548
        if ((ret = decode_subframe(s, decoded, subframe_len[i], prev)) < 0)
 
549
            return ret;
 
550
        decoded += subframe_len[i];
 
551
        prev     = subframe_len[i];
 
552
    }
 
553
 
 
554
    return 0;
 
555
}
 
556
 
 
557
static int decorrelate(TAKDecContext *s, int c1, int c2, int length)
 
558
{
 
559
    GetBitContext *gb = &s->gb;
 
560
    int32_t *p1       = s->decoded[c1] + 1;
 
561
    int32_t *p2       = s->decoded[c2] + 1;
 
562
    int i;
 
563
    int dshift, dfactor;
 
564
 
 
565
    switch (s->dmode) {
 
566
    case 1: /* left/side */
 
567
        for (i = 0; i < length; i++) {
 
568
            int32_t a = p1[i];
 
569
            int32_t b = p2[i];
 
570
            p2[i]     = a + b;
 
571
        }
 
572
        break;
 
573
    case 2: /* side/right */
 
574
        for (i = 0; i < length; i++) {
 
575
            int32_t a = p1[i];
 
576
            int32_t b = p2[i];
 
577
            p1[i]     = b - a;
 
578
        }
 
579
        break;
 
580
    case 3: /* side/mid */
 
581
        for (i = 0; i < length; i++) {
 
582
            int32_t a = p1[i];
 
583
            int32_t b = p2[i];
 
584
            a        -= b >> 1;
 
585
            p1[i]     = a;
 
586
            p2[i]     = a + b;
 
587
        }
 
588
        break;
 
589
    case 4: /* side/left with scale factor */
 
590
        FFSWAP(int32_t*, p1, p2);
 
591
    case 5: /* side/right with scale factor */
 
592
        dshift  = get_bits_esc4(gb);
 
593
        dfactor = get_sbits(gb, 10);
 
594
        for (i = 0; i < length; i++) {
 
595
            int32_t a = p1[i];
 
596
            int32_t b = p2[i];
 
597
            b         = dfactor * (b >> dshift) + 128 >> 8 << dshift;
 
598
            p1[i]     = b - a;
 
599
        }
 
600
        break;
 
601
    case 6:
 
602
        FFSWAP(int32_t*, p1, p2);
 
603
    case 7: {
 
604
        LOCAL_ALIGNED_16(int16_t, filter, [MAX_PREDICTORS]);
 
605
        int length2, order_half, filter_order, dval1, dval2;
 
606
        int av_uninit(code_size);
 
607
 
 
608
        memset(filter, 0, MAX_PREDICTORS * sizeof(*filter));
 
609
 
 
610
        if (length < 256)
 
611
            return AVERROR_INVALIDDATA;
 
612
 
 
613
        dshift       = get_bits_esc4(gb);
 
614
        filter_order = 8 << get_bits1(gb);
 
615
        dval1        = get_bits1(gb);
 
616
        dval2        = get_bits1(gb);
 
617
 
 
618
        for (i = 0; i < filter_order; i++) {
 
619
            if (!(i & 3))
 
620
                code_size = 14 - get_bits(gb, 3);
 
621
            filter[i] = get_sbits(gb, code_size);
 
622
        }
 
623
 
 
624
        order_half = filter_order / 2;
 
625
        length2    = length - (filter_order - 1);
 
626
 
 
627
        /* decorrelate beginning samples */
 
628
        if (dval1) {
 
629
            for (i = 0; i < order_half; i++) {
 
630
                int32_t a = p1[i];
 
631
                int32_t b = p2[i];
 
632
                p1[i]     = a + b;
 
633
            }
 
634
        }
 
635
 
 
636
        /* decorrelate ending samples */
 
637
        if (dval2) {
 
638
            for (i = length2 + order_half; i < length; i++) {
 
639
                int32_t a = p1[i];
 
640
                int32_t b = p2[i];
 
641
                p1[i]     = a + b;
 
642
            }
 
643
        }
 
644
 
 
645
        av_fast_malloc(&s->residues, &s->residues_buf_size,
 
646
                       FFALIGN(length + 16, 16) * sizeof(*s->residues));
 
647
        if (!s->residues)
 
648
            return AVERROR(ENOMEM);
 
649
        memset(s->residues, 0, s->residues_buf_size);
 
650
 
 
651
        for (i = 0; i < length; i++)
 
652
            s->residues[i] = p2[i] >> dshift;
 
653
 
 
654
        p1 += order_half;
 
655
 
 
656
        for (i = 0; i < length2; i++) {
 
657
            int v = 1 << 9;
 
658
 
 
659
            v += s->dsp.scalarproduct_int16(&s->residues[i], filter,
 
660
                                            FFALIGN(filter_order, 16));
 
661
 
 
662
            p1[i] = (av_clip(v >> 10, -8192, 8191) << dshift) - p1[i];
 
663
        }
 
664
 
 
665
        emms_c();
 
666
        break;
 
667
    }
 
668
    }
 
669
 
 
670
    return 0;
 
671
}
 
672
 
 
673
static int tak_decode_frame(AVCodecContext *avctx, void *data,
 
674
                            int *got_frame_ptr, AVPacket *pkt)
 
675
{
 
676
    TAKDecContext *s  = avctx->priv_data;
 
677
    GetBitContext *gb = &s->gb;
 
678
    int chan, i, ret, hsize;
 
679
 
 
680
    if (pkt->size < TAK_MIN_FRAME_HEADER_BYTES)
 
681
        return AVERROR_INVALIDDATA;
 
682
 
 
683
    init_get_bits(gb, pkt->data, pkt->size * 8);
 
684
 
 
685
    if ((ret = ff_tak_decode_frame_header(avctx, gb, &s->ti, 0)) < 0)
 
686
        return ret;
 
687
 
 
688
    if (s->ti.flags & TAK_FRAME_FLAG_HAS_METADATA) {
 
689
        av_log_missing_feature(avctx, "frame metadata", 1);
 
690
        return AVERROR_PATCHWELCOME;
 
691
    }
 
692
 
 
693
    hsize = get_bits_count(gb) / 8;
 
694
    if (avctx->err_recognition & AV_EF_CRCCHECK) {
 
695
        if (ff_tak_check_crc(pkt->data, hsize)) {
 
696
            av_log(avctx, AV_LOG_ERROR, "CRC error\n");
 
697
            return AVERROR_INVALIDDATA;
 
698
        }
 
699
    }
 
700
 
 
701
    if (s->ti.codec != TAK_CODEC_MONO_STEREO &&
 
702
        s->ti.codec != TAK_CODEC_MULTICHANNEL) {
 
703
        av_log(avctx, AV_LOG_ERROR, "unsupported codec: %d\n", s->ti.codec);
 
704
        return AVERROR_PATCHWELCOME;
 
705
    }
 
706
    if (s->ti.data_type) {
 
707
        av_log(avctx, AV_LOG_ERROR,
 
708
               "unsupported data type: %d\n", s->ti.data_type);
 
709
        return AVERROR_INVALIDDATA;
 
710
    }
 
711
    if (s->ti.codec == TAK_CODEC_MONO_STEREO && s->ti.channels > 2) {
 
712
        av_log(avctx, AV_LOG_ERROR,
 
713
               "invalid number of channels: %d\n", s->ti.channels);
 
714
        return AVERROR_INVALIDDATA;
 
715
    }
 
716
    if (s->ti.channels > 6) {
 
717
        av_log(avctx, AV_LOG_ERROR,
 
718
               "unsupported number of channels: %d\n", s->ti.channels);
 
719
        return AVERROR_INVALIDDATA;
 
720
    }
 
721
 
 
722
    if (s->ti.frame_samples <= 0) {
 
723
        av_log(avctx, AV_LOG_ERROR, "unsupported/invalid number of samples\n");
 
724
        return AVERROR_INVALIDDATA;
 
725
    }
 
726
 
 
727
    if (s->ti.bps != avctx->bits_per_coded_sample) {
 
728
        avctx->bits_per_coded_sample = s->ti.bps;
 
729
        if ((ret = set_bps_params(avctx)) < 0)
 
730
            return ret;
 
731
    }
 
732
    if (s->ti.sample_rate != avctx->sample_rate) {
 
733
        avctx->sample_rate = s->ti.sample_rate;
 
734
        set_sample_rate_params(avctx);
 
735
    }
 
736
    if (s->ti.ch_layout)
 
737
        avctx->channel_layout = s->ti.ch_layout;
 
738
    avctx->channels = s->ti.channels;
 
739
 
 
740
    s->nb_samples = s->ti.last_frame_samples ? s->ti.last_frame_samples
 
741
                                             : s->ti.frame_samples;
 
742
 
 
743
    s->frame.nb_samples = s->nb_samples;
 
744
    if ((ret = ff_get_buffer(avctx, &s->frame)) < 0)
 
745
        return ret;
 
746
 
 
747
    if (avctx->bits_per_coded_sample <= 16) {
 
748
        int buf_size = av_samples_get_buffer_size(NULL, avctx->channels,
 
749
                                                  s->nb_samples,
 
750
                                                  AV_SAMPLE_FMT_S32P, 0);
 
751
        av_fast_malloc(&s->decode_buffer, &s->decode_buffer_size, buf_size);
 
752
        if (!s->decode_buffer)
 
753
            return AVERROR(ENOMEM);
 
754
        ret = av_samples_fill_arrays((uint8_t **)s->decoded, NULL,
 
755
                                     s->decode_buffer, avctx->channels,
 
756
                                     s->nb_samples, AV_SAMPLE_FMT_S32P, 0);
 
757
        if (ret < 0)
 
758
            return ret;
 
759
    } else {
 
760
        for (chan = 0; chan < avctx->channels; chan++)
 
761
            s->decoded[chan] = (int32_t *)s->frame.extended_data[chan];
 
762
    }
 
763
 
 
764
    if (s->nb_samples < 16) {
 
765
        for (chan = 0; chan < avctx->channels; chan++) {
 
766
            int32_t *decoded = s->decoded[chan];
 
767
            for (i = 0; i < s->nb_samples; i++)
 
768
                decoded[i] = get_sbits(gb, avctx->bits_per_coded_sample);
 
769
        }
 
770
    } else {
 
771
        if (s->ti.codec == TAK_CODEC_MONO_STEREO) {
 
772
            for (chan = 0; chan < avctx->channels; chan++)
 
773
                if (ret = decode_channel(s, chan))
 
774
                    return ret;
 
775
 
 
776
            if (avctx->channels == 2) {
 
777
                if (get_bits1(gb)) {
 
778
                    // some kind of subframe length, but it seems to be unused
 
779
                    skip_bits(gb, 6);
 
780
                }
 
781
 
 
782
                s->dmode = get_bits(gb, 3);
 
783
                if (ret = decorrelate(s, 0, 1, s->nb_samples - 1))
 
784
                    return ret;
 
785
            }
 
786
        } else if (s->ti.codec == TAK_CODEC_MULTICHANNEL) {
 
787
            if (get_bits1(gb)) {
 
788
                int ch_mask = 0;
 
789
 
 
790
                chan = get_bits(gb, 4) + 1;
 
791
                if (chan > avctx->channels)
 
792
                    return AVERROR_INVALIDDATA;
 
793
 
 
794
                for (i = 0; i < chan; i++) {
 
795
                    int nbit = get_bits(gb, 4);
 
796
 
 
797
                    if (nbit >= avctx->channels)
 
798
                        return AVERROR_INVALIDDATA;
 
799
 
 
800
                    if (ch_mask & 1 << nbit)
 
801
                        return AVERROR_INVALIDDATA;
 
802
 
 
803
                    s->mcdparams[i].present = get_bits1(gb);
 
804
                    if (s->mcdparams[i].present) {
 
805
                        s->mcdparams[i].index = get_bits(gb, 2);
 
806
                        s->mcdparams[i].chan2 = get_bits(gb, 4);
 
807
                        if (s->mcdparams[i].index == 1) {
 
808
                            if ((nbit == s->mcdparams[i].chan2) ||
 
809
                                (ch_mask & 1 << s->mcdparams[i].chan2))
 
810
                                return AVERROR_INVALIDDATA;
 
811
 
 
812
                            ch_mask |= 1 << s->mcdparams[i].chan2;
 
813
                        } else if (!(ch_mask & 1 << s->mcdparams[i].chan2)) {
 
814
                            return AVERROR_INVALIDDATA;
 
815
                        }
 
816
                    }
 
817
                    s->mcdparams[i].chan1 = nbit;
 
818
 
 
819
                    ch_mask |= 1 << nbit;
 
820
                }
 
821
            } else {
 
822
                chan = avctx->channels;
 
823
                for (i = 0; i < chan; i++) {
 
824
                    s->mcdparams[i].present = 0;
 
825
                    s->mcdparams[i].chan1   = i;
 
826
                }
 
827
            }
 
828
 
 
829
            for (i = 0; i < chan; i++) {
 
830
                if (s->mcdparams[i].present && s->mcdparams[i].index == 1)
 
831
                    if (ret = decode_channel(s, s->mcdparams[i].chan2))
 
832
                        return ret;
 
833
 
 
834
                if (ret = decode_channel(s, s->mcdparams[i].chan1))
 
835
                    return ret;
 
836
 
 
837
                if (s->mcdparams[i].present) {
 
838
                    s->dmode = mc_dmodes[s->mcdparams[i].index];
 
839
                    if (ret = decorrelate(s,
 
840
                                          s->mcdparams[i].chan2,
 
841
                                          s->mcdparams[i].chan1,
 
842
                                          s->nb_samples - 1))
 
843
                        return ret;
 
844
                }
 
845
            }
 
846
        }
 
847
 
 
848
        for (chan = 0; chan < avctx->channels; chan++) {
 
849
            int32_t *decoded = s->decoded[chan];
 
850
 
 
851
            if (s->lpc_mode[chan])
 
852
                decode_lpc(decoded, s->lpc_mode[chan], s->nb_samples);
 
853
 
 
854
            if (s->sample_shift[chan] > 0)
 
855
                for (i = 0; i < s->nb_samples; i++)
 
856
                    decoded[i] <<= s->sample_shift[chan];
 
857
        }
 
858
    }
 
859
 
 
860
    align_get_bits(gb);
 
861
    skip_bits(gb, 24);
 
862
    if (get_bits_left(gb) < 0)
 
863
        av_log(avctx, AV_LOG_DEBUG, "overread\n");
 
864
    else if (get_bits_left(gb) > 0)
 
865
        av_log(avctx, AV_LOG_DEBUG, "underread\n");
 
866
 
 
867
    if (avctx->err_recognition & AV_EF_CRCCHECK) {
 
868
        if (ff_tak_check_crc(pkt->data + hsize,
 
869
                             get_bits_count(gb) / 8 - hsize)) {
 
870
            av_log(avctx, AV_LOG_ERROR, "CRC error\n");
 
871
            return AVERROR_INVALIDDATA;
 
872
        }
 
873
    }
 
874
 
 
875
    /* convert to output buffer */
 
876
    switch (avctx->sample_fmt) {
 
877
    case AV_SAMPLE_FMT_U8P:
 
878
        for (chan = 0; chan < avctx->channels; chan++) {
 
879
            uint8_t *samples = (uint8_t *)s->frame.extended_data[chan];
 
880
            int32_t *decoded = s->decoded[chan];
 
881
            for (i = 0; i < s->nb_samples; i++)
 
882
                samples[i] = decoded[i] + 0x80;
 
883
        }
 
884
        break;
 
885
    case AV_SAMPLE_FMT_S16P:
 
886
        for (chan = 0; chan < avctx->channels; chan++) {
 
887
            int16_t *samples = (int16_t *)s->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];
 
891
        }
 
892
        break;
 
893
    case AV_SAMPLE_FMT_S32P:
 
894
        for (chan = 0; chan < avctx->channels; chan++) {
 
895
            int32_t *samples = (int32_t *)s->frame.extended_data[chan];
 
896
            for (i = 0; i < s->nb_samples; i++)
 
897
                samples[i] <<= 8;
 
898
        }
 
899
        break;
 
900
    }
 
901
 
 
902
    *got_frame_ptr   = 1;
 
903
    *(AVFrame *)data = s->frame;
 
904
 
 
905
    return pkt->size;
 
906
}
 
907
 
 
908
static av_cold int tak_decode_close(AVCodecContext *avctx)
 
909
{
 
910
    TAKDecContext *s = avctx->priv_data;
 
911
 
 
912
    av_freep(&s->decode_buffer);
 
913
    av_freep(&s->residues);
 
914
 
 
915
    return 0;
 
916
}
 
917
 
 
918
AVCodec ff_tak_decoder = {
 
919
    .name             = "tak",
 
920
    .type             = AVMEDIA_TYPE_AUDIO,
 
921
    .id               = AV_CODEC_ID_TAK,
 
922
    .priv_data_size   = sizeof(TAKDecContext),
 
923
    .init             = tak_decode_init,
 
924
    .init_static_data = tak_init_static_data,
 
925
    .close            = tak_decode_close,
 
926
    .decode           = tak_decode_frame,
 
927
    .capabilities     = CODEC_CAP_DR1,
 
928
    .long_name        = NULL_IF_CONFIG_SMALL("TAK (Tom's lossless Audio Kompressor)"),
 
929
    .sample_fmts      = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_U8P,
 
930
                                                        AV_SAMPLE_FMT_S16P,
 
931
                                                        AV_SAMPLE_FMT_S32P,
 
932
                                                        AV_SAMPLE_FMT_NONE },
 
933
};