Coverage Report

Created: 2026-07-25 07:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/adpcm.c
Line
Count
Source
1
/*
2
 * Copyright (c) 2001-2003 The FFmpeg project
3
 *
4
 * first version by Francois Revol (revol@free.fr)
5
 * fringe ADPCM codecs (e.g., DK3, DK4, Westwood)
6
 *   by Mike Melanson (melanson@pcisys.net)
7
 * CD-ROM XA ADPCM codec by BERO
8
 * EA ADPCM decoder by Robin Kay (komadori@myrealbox.com)
9
 * EA ADPCM R1/R2/R3 decoder by Peter Ross (pross@xvid.org)
10
 * EA IMA EACS decoder by Peter Ross (pross@xvid.org)
11
 * EA IMA SEAD decoder by Peter Ross (pross@xvid.org)
12
 * EA ADPCM XAS decoder by Peter Ross (pross@xvid.org)
13
 * MAXIS EA ADPCM decoder by Robert Marston (rmarston@gmail.com)
14
 * THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl)
15
 * Argonaut Games ADPCM decoder by Zane van Iperen (zane@zanevaniperen.com)
16
 * Simon & Schuster Interactive ADPCM decoder by Zane van Iperen (zane@zanevaniperen.com)
17
 * Ubisoft ADPCM decoder by Zane van Iperen (zane@zanevaniperen.com)
18
 * High Voltage Software ALP decoder by Zane van Iperen (zane@zanevaniperen.com)
19
 * Cunning Developments decoder by Zane van Iperen (zane@zanevaniperen.com)
20
 * Sanyo LD-ADPCM decoder by Peter Ross (pross@xvid.org)
21
 *
22
 * This file is part of FFmpeg.
23
 *
24
 * FFmpeg is free software; you can redistribute it and/or
25
 * modify it under the terms of the GNU Lesser General Public
26
 * License as published by the Free Software Foundation; either
27
 * version 2.1 of the License, or (at your option) any later version.
28
 *
29
 * FFmpeg is distributed in the hope that it will be useful,
30
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
32
 * Lesser General Public License for more details.
33
 *
34
 * You should have received a copy of the GNU Lesser General Public
35
 * License along with FFmpeg; if not, write to the Free Software
36
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
37
 */
38
39
#include "config_components.h"
40
41
#include "avcodec.h"
42
#include "get_bits.h"
43
#include "bytestream.h"
44
#include "adpcm.h"
45
#include "adpcm_data.h"
46
#include "codec_internal.h"
47
#include "decode.h"
48
49
#include "libavutil/attributes.h"
50
51
/**
52
 * @file
53
 * ADPCM decoders
54
 * Features and limitations:
55
 *
56
 * Reference documents:
57
 * http://wiki.multimedia.cx/index.php?title=Category:ADPCM_Audio_Codecs
58
 * http://www.pcisys.net/~melanson/codecs/simpleaudio.html [dead]
59
 * http://www.geocities.com/SiliconValley/8682/aud3.txt [dead]
60
 * http://openquicktime.sourceforge.net/
61
 * XAnim sources (xa_codec.c) http://xanim.polter.net/
62
 * http://www.cs.ucla.edu/~leec/mediabench/applications.html [dead]
63
 * SoX source code http://sox.sourceforge.net/
64
 *
65
 * CD-ROM XA:
66
 * http://ku-www.ss.titech.ac.jp/~yatsushi/xaadpcm.html [dead]
67
 * vagpack & depack http://homepages.compuserve.de/bITmASTER32/psx-index.html [dead]
68
 * readstr http://www.geocities.co.jp/Playtown/2004/
69
 */
70
71
#define CASE_0(codec_id, ...)
72
#define CASE_1(codec_id, ...) \
73
10.7M
    case codec_id:            \
74
14.4G
    { __VA_ARGS__ }           \
75
3.85M
    break;
76
#define CASE_2(enabled, codec_id, ...) \
77
11.0M
        CASE_ ## enabled(codec_id, __VA_ARGS__)
78
#define CASE_3(config, codec_id, ...) \
79
10.7M
        CASE_2(config, codec_id, __VA_ARGS__)
80
#define CASE(codec, ...) \
81
10.7M
        CASE_3(CONFIG_ ## codec ## _DECODER, AV_CODEC_ID_ ## codec, __VA_ARGS__)
82
83
/* These are for CD-ROM XA ADPCM */
84
static const int8_t xa_adpcm_table[5][2] = {
85
    {   0,   0 },
86
    {  60,   0 },
87
    { 115, -52 },
88
    {  98, -55 },
89
    { 122, -60 }
90
};
91
92
static const int16_t afc_coeffs[2][16] = {
93
    { 0, 2048, 0, 1024, 4096, 3584, 3072, 4608, 4200, 4800, 5120, 2048, 1024, -1024, -1024, -2048 },
94
    { 0, 0, 2048, 1024, -2048, -1536, -1024, -2560, -2248, -2300, -3072, -2048, -1024, 1024, 0, 0 }
95
};
96
97
static const int16_t ea_adpcm_table[] = {
98
    0,  240,  460,  392,
99
    0,    0, -208, -220,
100
    0,    1,    3,    4,
101
    7,    8,   10,   11,
102
    0,   -1,   -3,   -4
103
};
104
105
/*
106
 * Dumped from the binaries:
107
 * - FantasticJourney.exe - 0x794D2, DGROUP:0x47A4D2
108
 * - BigRaceUSA.exe       - 0x9B8AA, DGROUP:0x49C4AA
109
 * - Timeshock!.exe       - 0x8506A, DGROUP:0x485C6A
110
 */
111
static const int8_t ima_cunning_index_table[9] = {
112
    -1, -1, -1, -1, 1, 2, 3, 4, -1
113
};
114
115
/*
116
 * Dumped from the binaries:
117
 * - FantasticJourney.exe - 0x79458, DGROUP:0x47A458
118
 * - BigRaceUSA.exe       - 0x9B830, DGROUP:0x49C430
119
 * - Timeshock!.exe       - 0x84FF0, DGROUP:0x485BF0
120
 */
121
static const int16_t ima_cunning_step_table[61] = {
122
       1,    1,   1,      1,     2,     2,     3,     3,    4,      5,
123
       6,    7,   8,     10,    12,    14,    16,    20,    24,    28,
124
      32,   40,  48,     56,    64,    80,    96,   112,   128,   160,
125
     192,  224,  256,   320,   384,   448,   512,   640,   768,   896,
126
    1024, 1280, 1536,  1792,  2048,  2560,  3072,  3584,  4096,  5120,
127
    6144, 7168, 8192, 10240, 12288, 14336, 16384, 20480, 24576, 28672, 0
128
};
129
130
static const int8_t adpcm_index_table2[4] = {
131
    -1,  2,
132
    -1,  2,
133
};
134
135
static const int8_t adpcm_index_table3[8] = {
136
    -1, -1,  1,  2,
137
    -1, -1,  1,  2,
138
};
139
140
static const int8_t adpcm_index_table5[32] = {
141
    -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16,
142
    -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16,
143
};
144
145
static const int8_t * const adpcm_index_tables[4] = {
146
    &adpcm_index_table2[0],
147
    &adpcm_index_table3[0],
148
    &ff_adpcm_index_table[0],
149
    &adpcm_index_table5[0],
150
};
151
152
static const int16_t mtaf_stepsize[32][16] = {
153
    {     1,     5,     9,    13,    16,    20,    24,    28,
154
         -1,    -5,    -9,   -13,   -16,   -20,   -24,   -28, },
155
    {     2,     6,    11,    15,    20,    24,    29,    33,
156
         -2,    -6,   -11,   -15,   -20,   -24,   -29,   -33, },
157
    {     2,     7,    13,    18,    23,    28,    34,    39,
158
         -2,    -7,   -13,   -18,   -23,   -28,   -34,   -39, },
159
    {     3,     9,    15,    21,    28,    34,    40,    46,
160
         -3,    -9,   -15,   -21,   -28,   -34,   -40,   -46, },
161
    {     3,    11,    18,    26,    33,    41,    48,    56,
162
         -3,   -11,   -18,   -26,   -33,   -41,   -48,   -56, },
163
    {     4,    13,    22,    31,    40,    49,    58,    67,
164
         -4,   -13,   -22,   -31,   -40,   -49,   -58,   -67, },
165
    {     5,    16,    26,    37,    48,    59,    69,    80,
166
         -5,   -16,   -26,   -37,   -48,   -59,   -69,   -80, },
167
    {     6,    19,    31,    44,    57,    70,    82,    95,
168
         -6,   -19,   -31,   -44,   -57,   -70,   -82,   -95, },
169
    {     7,    22,    38,    53,    68,    83,    99,   114,
170
         -7,   -22,   -38,   -53,   -68,   -83,   -99,  -114, },
171
    {     9,    27,    45,    63,    81,    99,   117,   135,
172
         -9,   -27,   -45,   -63,   -81,   -99,  -117,  -135, },
173
    {    10,    32,    53,    75,    96,   118,   139,   161,
174
        -10,   -32,   -53,   -75,   -96,  -118,  -139,  -161, },
175
    {    12,    38,    64,    90,   115,   141,   167,   193,
176
        -12,   -38,   -64,   -90,  -115,  -141,  -167,  -193, },
177
    {    15,    45,    76,   106,   137,   167,   198,   228,
178
        -15,   -45,   -76,  -106,  -137,  -167,  -198,  -228, },
179
    {    18,    54,    91,   127,   164,   200,   237,   273,
180
        -18,   -54,   -91,  -127,  -164,  -200,  -237,  -273, },
181
    {    21,    65,   108,   152,   195,   239,   282,   326,
182
        -21,   -65,  -108,  -152,  -195,  -239,  -282,  -326, },
183
    {    25,    77,   129,   181,   232,   284,   336,   388,
184
        -25,   -77,  -129,  -181,  -232,  -284,  -336,  -388, },
185
    {    30,    92,   153,   215,   276,   338,   399,   461,
186
        -30,   -92,  -153,  -215,  -276,  -338,  -399,  -461, },
187
    {    36,   109,   183,   256,   329,   402,   476,   549,
188
        -36,  -109,  -183,  -256,  -329,  -402,  -476,  -549, },
189
    {    43,   130,   218,   305,   392,   479,   567,   654,
190
        -43,  -130,  -218,  -305,  -392,  -479,  -567,  -654, },
191
    {    52,   156,   260,   364,   468,   572,   676,   780,
192
        -52,  -156,  -260,  -364,  -468,  -572,  -676,  -780, },
193
    {    62,   186,   310,   434,   558,   682,   806,   930,
194
        -62,  -186,  -310,  -434,  -558,  -682,  -806,  -930, },
195
    {    73,   221,   368,   516,   663,   811,   958,  1106,
196
        -73,  -221,  -368,  -516,  -663,  -811,  -958, -1106, },
197
    {    87,   263,   439,   615,   790,   966,  1142,  1318,
198
        -87,  -263,  -439,  -615,  -790,  -966, -1142, -1318, },
199
    {   104,   314,   523,   733,   942,  1152,  1361,  1571,
200
       -104,  -314,  -523,  -733,  -942, -1152, -1361, -1571, },
201
    {   124,   374,   623,   873,  1122,  1372,  1621,  1871,
202
       -124,  -374,  -623,  -873, -1122, -1372, -1621, -1871, },
203
    {   148,   445,   743,  1040,  1337,  1634,  1932,  2229,
204
       -148,  -445,  -743, -1040, -1337, -1634, -1932, -2229, },
205
    {   177,   531,   885,  1239,  1593,  1947,  2301,  2655,
206
       -177,  -531,  -885, -1239, -1593, -1947, -2301, -2655, },
207
    {   210,   632,  1053,  1475,  1896,  2318,  2739,  3161,
208
       -210,  -632, -1053, -1475, -1896, -2318, -2739, -3161, },
209
    {   251,   753,  1255,  1757,  2260,  2762,  3264,  3766,
210
       -251,  -753, -1255, -1757, -2260, -2762, -3264, -3766, },
211
    {   299,   897,  1495,  2093,  2692,  3290,  3888,  4486,
212
       -299,  -897, -1495, -2093, -2692, -3290, -3888, -4486, },
213
    {   356,  1068,  1781,  2493,  3206,  3918,  4631,  5343,
214
       -356, -1068, -1781, -2493, -3206, -3918, -4631, -5343, },
215
    {   424,  1273,  2121,  2970,  3819,  4668,  5516,  6365,
216
       -424, -1273, -2121, -2970, -3819, -4668, -5516, -6365, },
217
};
218
219
static const int16_t oki_step_table[49] = {
220
     16,  17,  19,  21,   23,   25,   28,   31,   34,  37,
221
     41,  45,  50,  55,   60,   66,   73,   80,   88,  97,
222
    107, 118, 130, 143,  157,  173,  190,  209,  230, 253,
223
    279, 307, 337, 371,  408,  449,  494,  544,  598, 658,
224
    724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552
225
};
226
227
// padded to zero where table size is less then 16
228
static const int8_t swf_index_tables[4][16] = {
229
    /*2*/ { -1, 2 },
230
    /*3*/ { -1, -1, 2, 4 },
231
    /*4*/ { -1, -1, -1, -1, 2, 4, 6, 8 },
232
    /*5*/ { -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16 }
233
};
234
235
static const int8_t zork_index_table[8] = {
236
    -1, -1, -1, 1, 4, 7, 10, 12,
237
};
238
239
static const int8_t mtf_index_table[16] = {
240
     8,  6,  4,  2, -1, -1, -1, -1,
241
    -1, -1, -1, -1,  2,  4,  6,  8,
242
};
243
244
/* end of tables */
245
246
typedef struct ADPCMDecodeContext {
247
    ADPCMChannelStatus status[14];
248
    int vqa_version;                /**< VQA version. Used for ADPCM_IMA_WS */
249
    int has_status;                 /**< Status flag. Reset to 0 after a flush. */
250
} ADPCMDecodeContext;
251
252
static void adpcm_flush(AVCodecContext *avctx);
253
254
static av_cold int adpcm_decode_init(AVCodecContext * avctx)
255
32.5k
{
256
32.5k
    ADPCMDecodeContext *c = avctx->priv_data;
257
32.5k
    unsigned int min_channels = 1;
258
32.5k
    unsigned int max_channels = 2;
259
260
32.5k
    adpcm_flush(avctx);
261
262
32.5k
    switch(avctx->codec->id) {
263
648
    case AV_CODEC_ID_ADPCM_IMA_AMV:
264
1.36k
    case AV_CODEC_ID_ADPCM_N64:
265
1.36k
        max_channels = 1;
266
1.36k
        break;
267
684
    case AV_CODEC_ID_ADPCM_SANYO:
268
684
        max_channels = 2;
269
684
        break;
270
565
    case AV_CODEC_ID_ADPCM_AFC:
271
1.21k
    case AV_CODEC_ID_ADPCM_EA_R1:
272
1.82k
    case AV_CODEC_ID_ADPCM_EA_R2:
273
2.47k
    case AV_CODEC_ID_ADPCM_EA_R3:
274
3.02k
    case AV_CODEC_ID_ADPCM_EA_XAS:
275
3.71k
    case AV_CODEC_ID_ADPCM_MS:
276
3.71k
        max_channels = 6;
277
3.71k
        break;
278
601
    case AV_CODEC_ID_ADPCM_MTAF:
279
601
        min_channels = 2;
280
601
        max_channels = 8;
281
601
        if (avctx->ch_layout.nb_channels & 1) {
282
27
            avpriv_request_sample(avctx, "channel count %d", avctx->ch_layout.nb_channels);
283
27
            return AVERROR_PATCHWELCOME;
284
27
        }
285
574
        break;
286
574
    case AV_CODEC_ID_ADPCM_DTK:
287
569
        min_channels = 2;
288
569
        break;
289
582
    case AV_CODEC_ID_ADPCM_PSX:
290
582
        max_channels = 8;
291
582
        if (avctx->ch_layout.nb_channels <= 0 ||
292
582
            avctx->block_align % (16 * avctx->ch_layout.nb_channels))
293
39
            return AVERROR_INVALIDDATA;
294
543
        break;
295
646
    case AV_CODEC_ID_ADPCM_PSXC:
296
646
        max_channels = 8;
297
646
        if (avctx->ch_layout.nb_channels <= 0 || avctx->block_align <= 0 ||
298
641
            avctx->block_align % avctx->ch_layout.nb_channels)
299
75
            return AVERROR_INVALIDDATA;
300
571
        break;
301
577
    case AV_CODEC_ID_ADPCM_IMA_DAT4:
302
1.28k
    case AV_CODEC_ID_ADPCM_THP:
303
1.96k
    case AV_CODEC_ID_ADPCM_THP_LE:
304
1.96k
        max_channels = 14;
305
1.96k
        break;
306
32.5k
    }
307
32.3k
    if (avctx->ch_layout.nb_channels < min_channels ||
308
32.3k
        avctx->ch_layout.nb_channels > max_channels) {
309
2.87k
        av_log(avctx, AV_LOG_ERROR, "Invalid number of channels\n");
310
2.87k
        return AVERROR(EINVAL);
311
2.87k
    }
312
313
29.5k
    switch(avctx->codec->id) {
314
568
    case AV_CODEC_ID_ADPCM_IMA_WAV:
315
568
        if (avctx->bits_per_coded_sample < 2 || avctx->bits_per_coded_sample > 5)
316
62
            return AVERROR_INVALIDDATA;
317
506
        break;
318
554
    case AV_CODEC_ID_ADPCM_ARGO:
319
554
        if (avctx->bits_per_coded_sample != 4 ||
320
509
            avctx->block_align != 17 * avctx->ch_layout.nb_channels)
321
92
            return AVERROR_INVALIDDATA;
322
462
        break;
323
592
    case AV_CODEC_ID_ADPCM_SANYO:
324
592
        if (avctx->bits_per_coded_sample < 3 || avctx->bits_per_coded_sample > 5)
325
60
            return AVERROR_INVALIDDATA;
326
532
        break;
327
532
    case AV_CODEC_ID_ADPCM_IMA_XBOX:
328
514
        if (avctx->bits_per_coded_sample != 4)
329
54
            return AVERROR_INVALIDDATA;
330
460
        break;
331
465
    case AV_CODEC_ID_ADPCM_ZORK:
332
465
        if (avctx->bits_per_coded_sample != 8)
333
50
            return AVERROR_INVALIDDATA;
334
415
        break;
335
26.8k
    default:
336
26.8k
        break;
337
29.5k
    }
338
339
29.2k
    switch (avctx->codec->id) {
340
474
    case AV_CODEC_ID_ADPCM_AICA:
341
928
    case AV_CODEC_ID_ADPCM_IMA_CUNNING:
342
1.46k
    case AV_CODEC_ID_ADPCM_IMA_DAT4:
343
1.96k
    case AV_CODEC_ID_ADPCM_IMA_QT:
344
2.47k
    case AV_CODEC_ID_ADPCM_IMA_WAV:
345
2.93k
    case AV_CODEC_ID_ADPCM_IMA_XBOX:
346
3.42k
    case AV_CODEC_ID_ADPCM_4XM:
347
3.99k
    case AV_CODEC_ID_ADPCM_XA:
348
4.50k
    case AV_CODEC_ID_ADPCM_XMD:
349
5.12k
    case AV_CODEC_ID_ADPCM_EA_R1:
350
5.69k
    case AV_CODEC_ID_ADPCM_EA_R2:
351
6.31k
    case AV_CODEC_ID_ADPCM_EA_R3:
352
6.81k
    case AV_CODEC_ID_ADPCM_EA_XAS:
353
7.47k
    case AV_CODEC_ID_ADPCM_THP:
354
8.12k
    case AV_CODEC_ID_ADPCM_THP_LE:
355
8.65k
    case AV_CODEC_ID_ADPCM_AFC:
356
9.17k
    case AV_CODEC_ID_ADPCM_DTK:
357
9.70k
    case AV_CODEC_ID_ADPCM_PSX:
358
10.2k
    case AV_CODEC_ID_ADPCM_PSXC:
359
10.7k
    case AV_CODEC_ID_ADPCM_SANYO:
360
11.3k
    case AV_CODEC_ID_ADPCM_MTAF:
361
11.7k
    case AV_CODEC_ID_ADPCM_ARGO:
362
12.3k
    case AV_CODEC_ID_ADPCM_IMA_MOFLEX:
363
12.9k
    case AV_CODEC_ID_ADPCM_N64:
364
12.9k
        avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
365
12.9k
        break;
366
463
    case AV_CODEC_ID_ADPCM_IMA_WS:
367
463
        avctx->sample_fmt = c->vqa_version == 3 ? AV_SAMPLE_FMT_S16P :
368
463
                                                  AV_SAMPLE_FMT_S16;
369
463
        break;
370
627
    case AV_CODEC_ID_ADPCM_MS:
371
627
        avctx->sample_fmt = avctx->ch_layout.nb_channels > 2 ? AV_SAMPLE_FMT_S16P :
372
627
                                                  AV_SAMPLE_FMT_S16;
373
627
        break;
374
15.1k
    default:
375
15.1k
        avctx->sample_fmt = AV_SAMPLE_FMT_S16;
376
29.2k
    }
377
29.2k
    return 0;
378
29.2k
}
379
380
static inline int16_t adpcm_agm_expand_nibble(ADPCMChannelStatus *c, int8_t nibble)
381
28.4M
{
382
28.4M
    int delta, pred, step, add;
383
384
28.4M
    pred = c->predictor;
385
28.4M
    delta = nibble & 7;
386
28.4M
    step = c->step;
387
28.4M
    add = (delta * 2 + 1) * step;
388
28.4M
    if (add < 0)
389
95.0k
        add = add + 7;
390
391
28.4M
    if ((nibble & 8) == 0)
392
21.9M
        pred = av_clip(pred + (add >> 3), -32767, 32767);
393
6.48M
    else
394
6.48M
        pred = av_clip(pred - (add >> 3), -32767, 32767);
395
396
28.4M
    switch (delta) {
397
4.02M
    case 7:
398
4.02M
        step *= 0x99;
399
4.02M
        break;
400
1.02M
    case 6:
401
1.02M
        c->step = av_clip(c->step * 2, 127, 24576);
402
1.02M
        c->predictor = pred;
403
1.02M
        return pred;
404
1.32M
    case 5:
405
1.32M
        step *= 0x66;
406
1.32M
        break;
407
1.22M
    case 4:
408
1.22M
        step *= 0x4d;
409
1.22M
        break;
410
20.8M
    default:
411
20.8M
        step *= 0x39;
412
20.8M
        break;
413
28.4M
    }
414
415
27.4M
    if (step < 0)
416
55.1k
        step += 0x3f;
417
418
27.4M
    c->step = step >> 6;
419
27.4M
    c->step = av_clip(c->step, 127, 24576);
420
27.4M
    c->predictor = pred;
421
27.4M
    return pred;
422
28.4M
}
423
424
static inline int16_t adpcm_ima_escape_expand_nibble(ADPCMChannelStatus *c, int8_t nibble)
425
30.5M
{
426
30.5M
    int step_index;
427
30.5M
    int predictor;
428
30.5M
    int sign, delta, diff, step;
429
430
30.5M
    step = ff_adpcm_step_table[c->step_index];
431
30.5M
    step_index = c->step_index + ff_adpcm_index_table[(unsigned)nibble];
432
30.5M
    step_index = av_clip(step_index, 0, 88);
433
434
30.5M
    sign = nibble & 8;
435
30.5M
    delta = nibble & 7;
436
30.5M
    diff = (delta * step) >> 2;
437
30.5M
    predictor = c->predictor;
438
30.5M
    if (sign) predictor -= diff;
439
23.0M
    else predictor += diff;
440
441
30.5M
    c->predictor = av_clip_int16(predictor);
442
30.5M
    c->step_index = step_index;
443
444
30.5M
    return (int16_t)c->predictor;
445
30.5M
}
446
447
static inline int16_t adpcm_ima_expand_nibble(ADPCMChannelStatus *c, int8_t nibble, int shift)
448
373M
{
449
373M
    int step_index;
450
373M
    int predictor;
451
373M
    int sign, delta, diff, step;
452
453
373M
    step = ff_adpcm_step_table[c->step_index];
454
373M
    step_index = c->step_index + ff_adpcm_index_table[(unsigned)nibble];
455
373M
    step_index = av_clip(step_index, 0, 88);
456
457
373M
    sign = nibble & 8;
458
373M
    delta = nibble & 7;
459
    /* perform direct multiplication instead of series of jumps proposed by
460
     * the reference ADPCM implementation since modern CPUs can do the mults
461
     * quickly enough */
462
373M
    diff = ((2 * delta + 1) * step) >> shift;
463
373M
    predictor = c->predictor;
464
373M
    if (sign) predictor -= diff;
465
285M
    else predictor += diff;
466
467
373M
    c->predictor = av_clip_int16(predictor);
468
373M
    c->step_index = step_index;
469
470
373M
    return (int16_t)c->predictor;
471
373M
}
472
473
static inline int16_t adpcm_ima_alp_expand_nibble(ADPCMChannelStatus *c, int8_t nibble, int shift)
474
32.8M
{
475
32.8M
    int step_index;
476
32.8M
    int predictor;
477
32.8M
    int sign, delta, diff, step;
478
479
32.8M
    step = ff_adpcm_step_table[c->step_index];
480
32.8M
    step_index = c->step_index + ff_adpcm_index_table[(unsigned)nibble];
481
32.8M
    step_index = av_clip(step_index, 0, 88);
482
483
32.8M
    sign = nibble & 8;
484
32.8M
    delta = nibble & 7;
485
32.8M
    diff = (delta * step) >> shift;
486
32.8M
    predictor = c->predictor;
487
32.8M
    if (sign) predictor -= diff;
488
26.3M
    else predictor += diff;
489
490
32.8M
    c->predictor = av_clip_int16(predictor);
491
32.8M
    c->step_index = step_index;
492
493
32.8M
    return (int16_t)c->predictor;
494
32.8M
}
495
496
static inline int16_t adpcm_ima_mtf_expand_nibble(ADPCMChannelStatus *c, int nibble)
497
24.5M
{
498
24.5M
    int step_index, step, delta, predictor;
499
500
24.5M
    step = ff_adpcm_step_table[c->step_index];
501
502
24.5M
    delta = step * (2 * nibble - 15);
503
24.5M
    predictor = c->predictor + delta;
504
505
24.5M
    step_index = c->step_index + mtf_index_table[(unsigned)nibble];
506
24.5M
    c->predictor = av_clip_int16(predictor >> 4);
507
24.5M
    c->step_index = av_clip(step_index, 0, 88);
508
509
24.5M
    return (int16_t)c->predictor;
510
24.5M
}
511
512
static inline int16_t adpcm_ima_cunning_expand_nibble(ADPCMChannelStatus *c, int8_t nibble)
513
29.0M
{
514
29.0M
    int step_index;
515
29.0M
    int predictor;
516
29.0M
    int step;
517
518
29.0M
    nibble = sign_extend(nibble & 0xF, 4);
519
520
29.0M
    step = ima_cunning_step_table[c->step_index];
521
29.0M
    step_index = c->step_index + ima_cunning_index_table[abs(nibble)];
522
29.0M
    step_index = av_clip(step_index, 0, 60);
523
524
29.0M
    predictor = c->predictor + step * nibble;
525
526
29.0M
    c->predictor = av_clip_int16(predictor);
527
29.0M
    c->step_index = step_index;
528
529
29.0M
    return c->predictor;
530
29.0M
}
531
532
static inline int16_t adpcm_ima_wav_expand_nibble(ADPCMChannelStatus *c, GetBitContext *gb, int bps)
533
41.7M
{
534
41.7M
    int nibble, step_index, predictor, sign, delta, diff, step, shift;
535
536
41.7M
    shift = bps - 1;
537
41.7M
    nibble = get_bits_le(gb, bps),
538
41.7M
    step = ff_adpcm_step_table[c->step_index];
539
41.7M
    step_index = c->step_index + adpcm_index_tables[bps - 2][nibble];
540
41.7M
    step_index = av_clip(step_index, 0, 88);
541
542
41.7M
    sign = nibble & (1 << shift);
543
41.7M
    delta = av_zero_extend(nibble, shift);
544
41.7M
    diff = step >> shift;
545
83.5M
    for (int i = 0; i < shift; i++)
546
41.7M
        diff += (step >> (shift-1-i)) * !!(delta & (1 << i));
547
41.7M
    predictor = c->predictor;
548
41.7M
    if (sign) predictor -= diff;
549
30.2M
    else predictor += diff;
550
551
41.7M
    c->predictor = av_clip_int16(predictor);
552
41.7M
    c->step_index = step_index;
553
554
41.7M
    return (int16_t)c->predictor;
555
41.7M
}
556
557
int16_t ff_adpcm_ima_qt_expand_nibble(ADPCMChannelStatus *c, int nibble)
558
750M
{
559
750M
    int step_index;
560
750M
    int predictor;
561
750M
    int diff, step;
562
563
750M
    step = ff_adpcm_step_table[c->step_index];
564
750M
    step_index = c->step_index + ff_adpcm_index_table[nibble];
565
750M
    step_index = av_clip(step_index, 0, 88);
566
567
750M
    diff = step >> 3;
568
750M
    if (nibble & 4) diff += step;
569
750M
    if (nibble & 2) diff += step >> 1;
570
750M
    if (nibble & 1) diff += step >> 2;
571
572
750M
    if (nibble & 8)
573
45.1M
        predictor = c->predictor - diff;
574
705M
    else
575
705M
        predictor = c->predictor + diff;
576
577
750M
    c->predictor = av_clip_int16(predictor);
578
750M
    c->step_index = step_index;
579
580
750M
    return c->predictor;
581
750M
}
582
583
static void decode_adpcm_ima_hvqm2(AVCodecContext *avctx, int16_t *outbuf, int samples_to_do,
584
                                   int frame_format, GetByteContext *gb)
585
120k
{
586
120k
    ADPCMDecodeContext *c = avctx->priv_data;
587
120k
    int st = avctx->ch_layout.nb_channels == 2;
588
120k
    uint8_t nibble;
589
590
259k
    for (int ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
591
138k
        unsigned tmp;
592
593
138k
        switch (frame_format) {
594
28.2k
        case 0: /* combined hist+index */
595
28.2k
            tmp = bytestream2_get_be16(gb);
596
28.2k
            c->status[ch].predictor  = sign_extend(tmp & 0xFF80, 16);
597
28.2k
            c->status[ch].step_index = tmp & 0x7f;
598
28.2k
            *outbuf++ = c->status[ch].predictor;
599
28.2k
            samples_to_do--;
600
28.2k
            break;
601
110k
        default:
602
110k
            break;
603
138k
        }
604
605
138k
        c->status[ch].step_index = av_clip(c->status[ch].step_index, 0, 88);
606
138k
    }
607
608
580M
    for (int i = 0; i < samples_to_do; i++) {
609
580M
        if (!(i&1)) {
610
290M
            nibble = bytestream2_get_byte(gb);
611
290M
            *outbuf++ = ff_adpcm_ima_qt_expand_nibble(&c->status[st], nibble >>  4);
612
290M
        } else {
613
289M
            *outbuf++ = ff_adpcm_ima_qt_expand_nibble(&c->status[ 0], nibble & 0xF);
614
289M
        }
615
580M
    }
616
617
120k
    bytestream2_seek(gb, 0, SEEK_END);
618
120k
}
619
620
static void decode_adpcm_ima_hvqm4(AVCodecContext *avctx, int16_t *outbuf, int samples_to_do,
621
                                   int frame_format, GetByteContext *gb)
622
67.7k
{
623
67.7k
    ADPCMDecodeContext *c = avctx->priv_data;
624
67.7k
    int st = avctx->ch_layout.nb_channels == 2;
625
67.7k
    unsigned tmp;
626
627
164k
    for (int ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
628
96.5k
        switch (frame_format) {
629
2.31k
        case 1: /* combined hist+index */
630
2.31k
            tmp = bytestream2_get_be16(gb);
631
2.31k
            c->status[ch].predictor  = sign_extend(tmp & 0xFF80, 16);
632
2.31k
            c->status[ch].step_index = tmp & 0x7f;
633
2.31k
            break;
634
12
        case 2:  /* no hist/index (continues from previous frame) */
635
92.5k
        default:
636
92.5k
            break;
637
92.5k
        case 3: /* separate hist+index */
638
1.64k
            tmp = bytestream2_get_be16(gb);
639
1.64k
            c->status[ch].predictor  = sign_extend(tmp, 16);
640
1.64k
            c->status[ch].step_index = bytestream2_get_byte(gb);
641
1.64k
            break;
642
96.5k
        }
643
644
96.5k
        c->status[ch].step_index = av_clip(c->status[ch].step_index, 0, 88);
645
96.5k
    }
646
647
67.7k
    if (frame_format == 1 || frame_format == 3) {
648
6.21k
        for (int ch = 0; ch < avctx->ch_layout.nb_channels; ch++)
649
3.95k
            *outbuf++ = (int16_t)c->status[st - ch].predictor;
650
2.25k
        samples_to_do--;
651
2.25k
    }
652
653
18.0M
    for (int i = 0; i < samples_to_do; i += 1+(!st)) {
654
17.9M
        uint8_t nibble = bytestream2_get_byte(gb);
655
656
17.9M
        *outbuf++ = ff_adpcm_ima_qt_expand_nibble(&c->status[st], nibble & 0xF);
657
17.9M
        *outbuf++ = ff_adpcm_ima_qt_expand_nibble(&c->status[ 0], nibble >>  4);
658
17.9M
    }
659
660
67.7k
    bytestream2_seek(gb, 0, SEEK_END);
661
67.7k
}
662
663
static inline int16_t adpcm_ms_expand_nibble(ADPCMChannelStatus *c, int nibble)
664
22.7M
{
665
22.7M
    int predictor;
666
667
22.7M
    predictor = (((c->sample1) * (c->coeff1)) + ((c->sample2) * (c->coeff2))) / 64;
668
22.7M
    predictor += ((nibble & 0x08)?(nibble - 0x10):(nibble)) * c->idelta;
669
670
22.7M
    c->sample2 = c->sample1;
671
22.7M
    c->sample1 = av_clip_int16(predictor);
672
22.7M
    c->idelta = (ff_adpcm_AdaptationTable[(int)nibble] * c->idelta) >> 8;
673
22.7M
    if (c->idelta < 16) c->idelta = 16;
674
22.7M
    if (c->idelta > INT_MAX/768) {
675
5.25M
        av_log(NULL, AV_LOG_WARNING, "idelta overflow\n");
676
5.25M
        c->idelta = INT_MAX/768;
677
5.25M
    }
678
679
22.7M
    return c->sample1;
680
22.7M
}
681
682
static inline int16_t adpcm_ima_oki_expand_nibble(ADPCMChannelStatus *c, int nibble)
683
25.7M
{
684
25.7M
    int step_index, predictor, sign, delta, diff, step;
685
686
25.7M
    step = oki_step_table[c->step_index];
687
25.7M
    step_index = c->step_index + ff_adpcm_index_table[(unsigned)nibble];
688
25.7M
    step_index = av_clip(step_index, 0, 48);
689
690
25.7M
    sign = nibble & 8;
691
25.7M
    delta = nibble & 7;
692
25.7M
    diff = ((2 * delta + 1) * step) >> 3;
693
25.7M
    predictor = c->predictor;
694
25.7M
    if (sign) predictor -= diff;
695
19.8M
    else predictor += diff;
696
697
25.7M
    c->predictor = av_clip_intp2(predictor, 11);
698
25.7M
    c->step_index = step_index;
699
700
25.7M
    return c->predictor * 16;
701
25.7M
}
702
703
static inline int16_t adpcm_ct_expand_nibble(ADPCMChannelStatus *c, int8_t nibble)
704
26.8M
{
705
26.8M
    int sign, delta, diff;
706
26.8M
    int new_step;
707
708
26.8M
    sign = nibble & 8;
709
26.8M
    delta = nibble & 7;
710
    /* perform direct multiplication instead of series of jumps proposed by
711
     * the reference ADPCM implementation since modern CPUs can do the mults
712
     * quickly enough */
713
26.8M
    diff = ((2 * delta + 1) * c->step) >> 3;
714
    /* predictor update is not so trivial: predictor is multiplied on 254/256 before updating */
715
26.8M
    c->predictor = ((c->predictor * 254) >> 8) + (sign ? -diff : diff);
716
26.8M
    c->predictor = av_clip_int16(c->predictor);
717
    /* calculate new step and clamp it to range 511..32767 */
718
26.8M
    new_step = (ff_adpcm_AdaptationTable[nibble & 7] * c->step) >> 8;
719
26.8M
    c->step = av_clip(new_step, 511, 32767);
720
721
26.8M
    return (int16_t)c->predictor;
722
26.8M
}
723
724
static inline int16_t adpcm_sbpro_expand_nibble(ADPCMChannelStatus *c, int8_t nibble, int size, int shift)
725
154M
{
726
154M
    int sign, delta, diff;
727
728
154M
    sign = nibble & (1<<(size-1));
729
154M
    delta = nibble & ((1<<(size-1))-1);
730
154M
    diff = delta << (7 + c->step + shift);
731
732
    /* clamp result */
733
154M
    c->predictor = av_clip(c->predictor + (sign ? -diff : diff), -16384,16256);
734
735
    /* calculate new step */
736
154M
    if (delta >= (2*size - 3) && c->step < 3)
737
14.7M
        c->step++;
738
139M
    else if (delta == 0 && c->step > 0)
739
14.5M
        c->step--;
740
741
154M
    return (int16_t) c->predictor;
742
154M
}
743
744
static inline int16_t adpcm_yamaha_expand_nibble(ADPCMChannelStatus *c, uint8_t nibble)
745
56.1M
{
746
56.1M
    if(!c->step) {
747
222k
        c->predictor = 0;
748
222k
        c->step = 127;
749
222k
    }
750
751
56.1M
    c->predictor += (c->step * ff_adpcm_yamaha_difflookup[nibble]) / 8;
752
56.1M
    c->predictor = av_clip_int16(c->predictor);
753
56.1M
    c->step = (c->step * ff_adpcm_yamaha_indexscale[nibble]) >> 8;
754
56.1M
    c->step = av_clip(c->step, 127, 24576);
755
56.1M
    return c->predictor;
756
56.1M
}
757
758
static inline int16_t adpcm_mtaf_expand_nibble(ADPCMChannelStatus *c, uint8_t nibble)
759
33.4M
{
760
33.4M
    c->predictor += mtaf_stepsize[c->step][nibble];
761
33.4M
    c->predictor = av_clip_int16(c->predictor);
762
33.4M
    c->step += ff_adpcm_index_table[nibble];
763
33.4M
    c->step = av_clip_uintp2(c->step, 5);
764
33.4M
    return c->predictor;
765
33.4M
}
766
767
static inline int16_t adpcm_circus_expand_nibble(ADPCMChannelStatus *c, uint8_t nibble)
768
16.5M
{
769
16.5M
    int32_t sample = c->predictor;
770
16.5M
    int32_t scale = c->step;
771
16.5M
    int32_t code = sign_extend(nibble, 8);
772
773
16.5M
    sample += code * (1 << scale);
774
16.5M
    if (code == 0) {
775
7.23M
        scale--;
776
9.32M
    } else if (code == 127 || code == -128) {
777
19.7k
        scale++;
778
19.7k
    }
779
16.5M
    scale = av_clip(scale, 0, 8);
780
16.5M
    sample = av_clip_int16(sample);
781
782
16.5M
    c->predictor = sample;
783
16.5M
    c->step = scale;
784
785
16.5M
    return sample;
786
16.5M
}
787
788
static inline int16_t adpcm_zork_expand_nibble(ADPCMChannelStatus *c, uint8_t nibble)
789
12.2M
{
790
12.2M
    int16_t index = c->step_index;
791
12.2M
    uint32_t lookup_sample = ff_adpcm_step_table[index];
792
12.2M
    int32_t sample = 0;
793
794
12.2M
    if (nibble & 0x40)
795
6.24M
        sample += lookup_sample;
796
12.2M
    if (nibble & 0x20)
797
4.15M
        sample += lookup_sample >> 1;
798
12.2M
    if (nibble & 0x10)
799
4.14M
        sample += lookup_sample >> 2;
800
12.2M
    if (nibble & 0x08)
801
6.07M
        sample += lookup_sample >> 3;
802
12.2M
    if (nibble & 0x04)
803
9.00M
        sample += lookup_sample >> 4;
804
12.2M
    if (nibble & 0x02)
805
6.70M
        sample += lookup_sample >> 5;
806
12.2M
    if (nibble & 0x01)
807
7.09M
        sample += lookup_sample >> 6;
808
12.2M
    if (nibble & 0x80)
809
8.31M
        sample = -sample;
810
811
12.2M
    sample += c->predictor;
812
12.2M
    sample = av_clip_int16(sample);
813
814
12.2M
    index += zork_index_table[(nibble >> 4) & 7];
815
12.2M
    index = av_clip(index, 0, 88);
816
817
12.2M
    c->predictor = sample;
818
12.2M
    c->step_index = index;
819
820
12.2M
    return sample;
821
12.2M
}
822
823
static int xa_decode(AVCodecContext *avctx, int16_t *out0, int16_t *out1,
824
                     const uint8_t *in, ADPCMChannelStatus *left,
825
                     ADPCMChannelStatus *right, int channels, int sample_offset)
826
205k
{
827
205k
    int i, j;
828
205k
    int shift,filter,f0,f1;
829
205k
    int s_1,s_2;
830
205k
    int d,s,t;
831
832
205k
    out0 += sample_offset;
833
205k
    if (channels == 1)
834
127k
        out1 = out0 + 28;
835
78.1k
    else
836
78.1k
        out1 += sample_offset;
837
838
1.02M
    for(i=0;i<4;i++) {
839
823k
        shift  = 12 - (in[4+i*2] & 15);
840
823k
        filter = in[4+i*2] >> 4;
841
823k
        if (filter >= FF_ARRAY_ELEMS(xa_adpcm_table)) {
842
304k
            avpriv_request_sample(avctx, "unknown XA-ADPCM filter %d", filter);
843
304k
            filter=0;
844
304k
        }
845
823k
        if (shift < 0) {
846
165k
            avpriv_request_sample(avctx, "unknown XA-ADPCM shift %d", shift);
847
165k
            shift = 0;
848
165k
        }
849
823k
        f0 = xa_adpcm_table[filter][0];
850
823k
        f1 = xa_adpcm_table[filter][1];
851
852
823k
        s_1 = left->sample1;
853
823k
        s_2 = left->sample2;
854
855
23.8M
        for(j=0;j<28;j++) {
856
23.0M
            d = in[16+i+j*4];
857
858
23.0M
            t = sign_extend(d, 4);
859
23.0M
            s = t*(1<<shift) + ((s_1*f0 + s_2*f1+32)>>6);
860
23.0M
            s_2 = s_1;
861
23.0M
            s_1 = av_clip_int16(s);
862
23.0M
            out0[j] = s_1;
863
23.0M
        }
864
865
823k
        if (channels == 2) {
866
312k
            left->sample1 = s_1;
867
312k
            left->sample2 = s_2;
868
312k
            s_1 = right->sample1;
869
312k
            s_2 = right->sample2;
870
312k
        }
871
872
823k
        shift  = 12 - (in[5+i*2] & 15);
873
823k
        filter = in[5+i*2] >> 4;
874
823k
        if (filter >= FF_ARRAY_ELEMS(xa_adpcm_table) || shift < 0) {
875
286k
            avpriv_request_sample(avctx, "unknown XA-ADPCM filter %d", filter);
876
286k
            filter=0;
877
286k
        }
878
823k
        if (shift < 0) {
879
169k
            avpriv_request_sample(avctx, "unknown XA-ADPCM shift %d", shift);
880
169k
            shift = 0;
881
169k
        }
882
883
823k
        f0 = xa_adpcm_table[filter][0];
884
823k
        f1 = xa_adpcm_table[filter][1];
885
886
23.8M
        for(j=0;j<28;j++) {
887
23.0M
            d = in[16+i+j*4];
888
889
23.0M
            t = sign_extend(d >> 4, 4);
890
23.0M
            s = t*(1<<shift) + ((s_1*f0 + s_2*f1+32)>>6);
891
23.0M
            s_2 = s_1;
892
23.0M
            s_1 = av_clip_int16(s);
893
23.0M
            out1[j] = s_1;
894
23.0M
        }
895
896
823k
        if (channels == 2) {
897
312k
            right->sample1 = s_1;
898
312k
            right->sample2 = s_2;
899
510k
        } else {
900
510k
            left->sample1 = s_1;
901
510k
            left->sample2 = s_2;
902
510k
        }
903
904
823k
        out0 += 28 * (3 - channels);
905
823k
        out1 += 28 * (3 - channels);
906
823k
    }
907
908
205k
    return 0;
909
205k
}
910
911
static void adpcm_swf_decode(AVCodecContext *avctx, const uint8_t *buf, int buf_size, int16_t *samples)
912
126k
{
913
126k
    ADPCMDecodeContext *c = avctx->priv_data;
914
126k
    GetBitContext gb;
915
126k
    const int8_t *table;
916
126k
    int channels = avctx->ch_layout.nb_channels;
917
126k
    int k0, signmask, nb_bits, count;
918
126k
    int size = buf_size*8;
919
126k
    int i;
920
921
126k
    init_get_bits(&gb, buf, size);
922
923
    //read bits & initial values
924
126k
    nb_bits = get_bits(&gb, 2)+2;
925
126k
    table = swf_index_tables[nb_bits-2];
926
126k
    k0 = 1 << (nb_bits-2);
927
126k
    signmask = 1 << (nb_bits-1);
928
929
268k
    while (get_bits_count(&gb) <= size - 22 * channels) {
930
290k
        for (i = 0; i < channels; i++) {
931
147k
            *samples++ = c->status[i].predictor = get_sbits(&gb, 16);
932
147k
            c->status[i].step_index = get_bits(&gb, 6);
933
147k
        }
934
935
70.3M
        for (count = 0; get_bits_count(&gb) <= size - nb_bits * channels && count < 4095; count++) {
936
70.2M
            int i;
937
938
143M
            for (i = 0; i < channels; i++) {
939
                // similar to IMA adpcm
940
73.4M
                int delta = get_bits(&gb, nb_bits);
941
73.4M
                int step = ff_adpcm_step_table[c->status[i].step_index];
942
73.4M
                int vpdiff = 0; // vpdiff = (delta+0.5)*step/4
943
73.4M
                int k = k0;
944
945
98.6M
                do {
946
98.6M
                    if (delta & k)
947
33.8M
                        vpdiff += step;
948
98.6M
                    step >>= 1;
949
98.6M
                    k >>= 1;
950
98.6M
                } while(k);
951
73.4M
                vpdiff += step;
952
953
73.4M
                if (delta & signmask)
954
24.1M
                    c->status[i].predictor -= vpdiff;
955
49.3M
                else
956
49.3M
                    c->status[i].predictor += vpdiff;
957
958
73.4M
                c->status[i].step_index += table[delta & (~signmask)];
959
960
73.4M
                c->status[i].step_index = av_clip(c->status[i].step_index, 0, 88);
961
73.4M
                c->status[i].predictor = av_clip_int16(c->status[i].predictor);
962
963
73.4M
                *samples++ = c->status[i].predictor;
964
73.4M
            }
965
70.2M
        }
966
142k
    }
967
126k
}
968
969
int16_t ff_adpcm_argo_expand_nibble(ADPCMChannelStatus *cs, int nibble, int shift, int flag)
970
23.6M
{
971
23.6M
    int sample = sign_extend(nibble, 4) * (1 << shift);
972
973
23.6M
    if (flag)
974
8.72M
        sample += (8 * cs->sample1) - (4 * cs->sample2);
975
14.8M
    else
976
14.8M
        sample += 4 * cs->sample1;
977
978
23.6M
    sample = av_clip_int16(sample >> 2);
979
980
23.6M
    cs->sample2 = cs->sample1;
981
23.6M
    cs->sample1 = sample;
982
983
23.6M
    return sample;
984
23.6M
}
985
986
static int adpcm_sanyo_expand3(ADPCMChannelStatus *c, int bits)
987
109M
{
988
109M
    int sign, delta, add;
989
990
109M
    sign = bits & 4;
991
109M
    if (sign)
992
967k
        delta = 4 - (bits & 3);
993
108M
    else
994
108M
        delta = bits;
995
996
109M
    switch (delta) {
997
107M
    case 0:
998
107M
        add = 0;
999
107M
        c->step = (3 * c->step) >> 2;
1000
107M
        break;
1001
653k
    case 1:
1002
653k
        add = c->step;
1003
653k
        c->step = (4 * c->step - (c->step >> 1)) >> 2;
1004
653k
        break;
1005
610k
    case 2:
1006
610k
        add = 2 * c->step;
1007
610k
        c->step = ((c->step >> 1) + add) >> 1;
1008
610k
        break;
1009
292k
    case 3:
1010
292k
        add = 4 * c->step - (c->step >> 1);
1011
292k
        c->step = 2 * c->step;
1012
292k
        break;
1013
486k
    case 4:
1014
486k
        add = (11 * c->step) >> 1;
1015
486k
        c->step = 3 * c->step;
1016
486k
        break;
1017
0
    default:
1018
0
        av_unreachable("There are cases for all control paths when bits is 3-bit");
1019
109M
    }
1020
1021
109M
    if (sign)
1022
967k
        add = -add;
1023
1024
109M
    c->predictor = av_clip_int16(c->predictor + add);
1025
109M
    c->step = av_clip(c->step, 1, 7281);
1026
109M
    return c->predictor;
1027
109M
}
1028
1029
static int adpcm_sanyo_expand4(ADPCMChannelStatus *c, int bits)
1030
408M
{
1031
408M
    int sign, delta, add;
1032
1033
408M
    sign = bits & 8;
1034
408M
    if (sign)
1035
82.0k
        delta = 8 - (bits & 7);
1036
408M
    else
1037
408M
        delta = bits;
1038
1039
408M
    switch (delta) {
1040
408M
    case 0:
1041
408M
        add = 0;
1042
408M
        c->step = (3 * c->step) >> 2;
1043
408M
        break;
1044
44.8k
    case 1:
1045
44.8k
        add = c->step;
1046
44.8k
        c->step = (3 * c->step) >> 2;
1047
44.8k
        break;
1048
10.4k
    case 2:
1049
10.4k
        add = 2 * c->step;
1050
10.4k
        break;
1051
14.6k
    case 3:
1052
14.6k
        add = 3 * c->step;
1053
14.6k
        break;
1054
28.4k
    case 4:
1055
28.4k
        add = 4 * c->step;
1056
28.4k
        break;
1057
11.6k
    case 5:
1058
11.6k
        add = (11 * c->step) >> 1;
1059
11.6k
        c->step += c->step >> 2;
1060
11.6k
        break;
1061
17.8k
    case 6:
1062
17.8k
        add = (15 * c->step) >> 1;
1063
17.8k
        c->step = 2 * c->step;
1064
17.8k
        break;
1065
29.3k
    case 7:
1066
29.3k
        if (sign)
1067
4.40k
            add = (19 * c->step) >> 1;
1068
24.9k
        else
1069
24.9k
            add = (21 * c->step) >> 1;
1070
29.3k
        c->step = (c->step >> 1) + 2 * c->step;
1071
29.3k
        break;
1072
8.04k
    case 8:
1073
8.04k
        add = (25 * c->step) >> 1;
1074
8.04k
        c->step = 5 * c->step;
1075
8.04k
        break;
1076
0
    default:
1077
0
        av_unreachable("There are cases for all control paths when bits is 4-bit");
1078
408M
    }
1079
1080
408M
    if (sign)
1081
82.0k
        add = -add;
1082
1083
408M
    c->predictor = av_clip_int16(c->predictor + add);
1084
408M
    c->step = av_clip(c->step, 1, 2621);
1085
408M
    return c->predictor;
1086
408M
}
1087
1088
static int adpcm_sanyo_expand5(ADPCMChannelStatus *c, int bits)
1089
940M
{
1090
940M
    int sign, delta, add;
1091
1092
940M
    sign = bits & 0x10;
1093
940M
    if (sign)
1094
1.77M
        delta = 16 - (bits & 0xF);
1095
938M
    else
1096
938M
        delta = bits;
1097
1098
940M
    add = delta * c->step;
1099
940M
    switch (delta) {
1100
935M
    case 0:
1101
935M
        c->step += (c->step >> 2) - (c->step >> 1);
1102
935M
        break;
1103
230k
    case 1:
1104
769k
    case 2:
1105
815k
    case 3:
1106
815k
        c->step += (c->step >> 3) - (c->step >> 2);
1107
815k
        break;
1108
462k
    case 4:
1109
583k
    case 5:
1110
583k
        c->step += (c->step >> 4) - (c->step >> 3);
1111
583k
        break;
1112
449k
    case 6:
1113
449k
        break;
1114
33.1k
    case 7:
1115
33.1k
        c->step += c->step >> 3;
1116
33.1k
        break;
1117
562k
    case 8:
1118
562k
        c->step += c->step >> 2;
1119
562k
        break;
1120
433k
    case 9:
1121
433k
        c->step += c->step >> 1;
1122
433k
        break;
1123
133k
    case 10:
1124
133k
        c->step = 2 * c->step - (c->step >> 3);
1125
133k
        break;
1126
39.9k
    case 11:
1127
39.9k
        c->step = 2 * c->step + (c->step >> 3);
1128
39.9k
        break;
1129
538k
    case 12:
1130
538k
        c->step = 2 * c->step + (c->step >> 1) - (c->step >> 3);
1131
538k
        break;
1132
428k
    case 13:
1133
428k
        c->step = 3 * c->step - (c->step >> 2);
1134
428k
        break;
1135
41.8k
    case 14:
1136
41.8k
        c->step *= 3;
1137
41.8k
        break;
1138
458k
    case 15:
1139
573k
    case 16:
1140
573k
        c->step = (7 * c->step) >> 1;
1141
573k
        break;
1142
940M
    }
1143
1144
940M
    if (sign)
1145
1.77M
        add = -add;
1146
1147
940M
    c->predictor = av_clip_int16(c->predictor + add);
1148
940M
    c->step = av_clip(c->step, 1, 1024);
1149
940M
    return c->predictor;
1150
940M
}
1151
1152
/**
1153
 * Get the number of samples (per channel) that will be decoded from the packet.
1154
 * In one case, this is actually the maximum number of samples possible to
1155
 * decode with the given buf_size.
1156
 *
1157
 * @param[out] coded_samples set to the number of samples as coded in the
1158
 *                           packet, or 0 if the codec does not encode the
1159
 *                           number of samples in each frame.
1160
 * @param[out] approx_nb_samples set to non-zero if the number of samples
1161
 *                               returned is an approximation.
1162
 */
1163
static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb,
1164
                          int buf_size, int *coded_samples, int *approx_nb_samples)
1165
17.5M
{
1166
17.5M
    ADPCMDecodeContext *s = avctx->priv_data;
1167
17.5M
    int nb_samples        = 0;
1168
17.5M
    int ch                = avctx->ch_layout.nb_channels;
1169
17.5M
    int has_coded_samples = 0;
1170
17.5M
    int header_size;
1171
1172
17.5M
    *coded_samples = 0;
1173
17.5M
    *approx_nb_samples = 0;
1174
1175
17.5M
    if(ch <= 0)
1176
0
        return 0;
1177
17.5M
    if (buf_size > INT_MAX / 14)
1178
0
        return 0;
1179
1180
17.5M
    switch (avctx->codec->id) {
1181
    /* constant, only check buf_size */
1182
426k
    case AV_CODEC_ID_ADPCM_EA_XAS:
1183
426k
        if (buf_size < 76 * ch)
1184
129k
            return 0;
1185
297k
        nb_samples = 128;
1186
297k
        break;
1187
430k
    case AV_CODEC_ID_ADPCM_IMA_QT:
1188
430k
        if (buf_size < 34 * ch)
1189
141k
            return 0;
1190
288k
        nb_samples = 64;
1191
288k
        break;
1192
277k
    case AV_CODEC_ID_ADPCM_N64:
1193
277k
        nb_samples = (buf_size / 9) * 16;
1194
277k
        break;
1195
    /* simple 4-bit adpcm */
1196
167k
    case AV_CODEC_ID_ADPCM_CT:
1197
353k
    case AV_CODEC_ID_ADPCM_IMA_APC:
1198
704k
    case AV_CODEC_ID_ADPCM_IMA_CUNNING:
1199
885k
    case AV_CODEC_ID_ADPCM_IMA_EA_SEAD:
1200
1.05M
    case AV_CODEC_ID_ADPCM_IMA_ESCAPE:
1201
1.22M
    case AV_CODEC_ID_ADPCM_IMA_OKI:
1202
1.40M
    case AV_CODEC_ID_ADPCM_IMA_WS:
1203
1.59M
    case AV_CODEC_ID_ADPCM_YAMAHA:
1204
1.94M
    case AV_CODEC_ID_ADPCM_AICA:
1205
2.13M
    case AV_CODEC_ID_ADPCM_IMA_SSI:
1206
2.48M
    case AV_CODEC_ID_ADPCM_IMA_APM:
1207
2.82M
    case AV_CODEC_ID_ADPCM_IMA_ALP:
1208
3.20M
    case AV_CODEC_ID_ADPCM_IMA_MTF:
1209
3.20M
        nb_samples = buf_size * 2 / ch;
1210
3.20M
        break;
1211
17.5M
    }
1212
17.2M
    if (nb_samples)
1213
3.93M
        return nb_samples;
1214
1215
    /* simple 4-bit adpcm, with header */
1216
13.3M
    header_size = 0;
1217
13.3M
    switch (avctx->codec->id) {
1218
468k
        case AV_CODEC_ID_ADPCM_4XM:
1219
751k
        case AV_CODEC_ID_ADPCM_AGM:
1220
992k
        case AV_CODEC_ID_ADPCM_IMA_ACORN:
1221
1.35M
        case AV_CODEC_ID_ADPCM_IMA_DAT4:
1222
1.65M
        case AV_CODEC_ID_ADPCM_IMA_MOFLEX:
1223
1.92M
        case AV_CODEC_ID_ADPCM_IMA_ISS:     header_size = 4 * ch;      break;
1224
254k
        case AV_CODEC_ID_ADPCM_IMA_SMJPEG:  header_size = 4 * ch;      break;
1225
13.3M
    }
1226
13.3M
    if (header_size > 0)
1227
2.18M
        return (buf_size - header_size) * 2 / ch;
1228
1229
    /* more complex formats */
1230
11.1M
    switch (avctx->codec->id) {
1231
357k
    case AV_CODEC_ID_ADPCM_IMA_AMV:
1232
357k
        bytestream2_skip(gb, 4);
1233
357k
        has_coded_samples  = 1;
1234
357k
        *coded_samples     = bytestream2_get_le32u(gb);
1235
357k
        nb_samples         = FFMIN((buf_size - 8) * 2, *coded_samples);
1236
357k
        bytestream2_seek(gb, -8, SEEK_CUR);
1237
357k
        break;
1238
340k
    case AV_CODEC_ID_ADPCM_EA:
1239
        /* Stereo is 30 bytes per block */
1240
        /* Mono is 15 bytes per block */
1241
340k
        has_coded_samples = 1;
1242
340k
        *coded_samples  = bytestream2_get_le32(gb);
1243
340k
        *coded_samples -= *coded_samples % 28;
1244
340k
        nb_samples      = (buf_size - 12) / (ch == 2 ? 30 : 15) * 28;
1245
340k
        break;
1246
272k
    case AV_CODEC_ID_ADPCM_IMA_HVQM2:
1247
272k
        nb_samples = ((bytestream2_peek_be64(gb) >> 16) & 0xFFFF);
1248
272k
        break;
1249
205k
    case AV_CODEC_ID_ADPCM_IMA_HVQM4:
1250
205k
        {
1251
205k
            int frame_format = bytestream2_get_be16(gb);
1252
205k
            int skip = 6;
1253
1254
205k
            if (frame_format == 1)
1255
1.41k
                skip += 2 * ch;
1256
205k
            if (frame_format == 3)
1257
893
                skip += 3 * ch;
1258
1259
205k
            nb_samples = (buf_size - skip) * 2 / ch;
1260
205k
            bytestream2_seek(gb, 0, SEEK_SET);
1261
205k
        }
1262
205k
        break;
1263
321k
    case AV_CODEC_ID_ADPCM_IMA_EA_EACS:
1264
321k
        has_coded_samples = 1;
1265
321k
        *coded_samples = bytestream2_get_le32(gb);
1266
321k
        nb_samples     = (buf_size - (4 + 8 * ch)) * 2 / ch;
1267
321k
        break;
1268
269k
    case AV_CODEC_ID_ADPCM_EA_MAXIS_XA:
1269
269k
        nb_samples = (buf_size - ch) / ch * 2;
1270
269k
        break;
1271
278k
    case AV_CODEC_ID_ADPCM_EA_R1:
1272
534k
    case AV_CODEC_ID_ADPCM_EA_R2:
1273
823k
    case AV_CODEC_ID_ADPCM_EA_R3:
1274
        /* maximum number of samples */
1275
        /* has internal offsets and a per-frame switch to signal raw 16-bit */
1276
823k
        has_coded_samples = 1;
1277
823k
        switch (avctx->codec->id) {
1278
278k
        case AV_CODEC_ID_ADPCM_EA_R1:
1279
278k
            header_size    = 4 + 9 * ch;
1280
278k
            *coded_samples = bytestream2_get_le32(gb);
1281
278k
            break;
1282
255k
        case AV_CODEC_ID_ADPCM_EA_R2:
1283
255k
            header_size    = 4 + 5 * ch;
1284
255k
            *coded_samples = bytestream2_get_le32(gb);
1285
255k
            break;
1286
289k
        case AV_CODEC_ID_ADPCM_EA_R3:
1287
289k
            header_size    = 4 + 5 * ch;
1288
289k
            *coded_samples = bytestream2_get_be32(gb);
1289
289k
            break;
1290
823k
        }
1291
823k
        *coded_samples -= *coded_samples % 28;
1292
823k
        nb_samples      = (buf_size - header_size) * 2 / ch;
1293
823k
        nb_samples     -= nb_samples % 28;
1294
823k
        *approx_nb_samples = 1;
1295
823k
        break;
1296
333k
    case AV_CODEC_ID_ADPCM_IMA_DK3:
1297
333k
        if (avctx->block_align > 0)
1298
315k
            buf_size = FFMIN(buf_size, avctx->block_align);
1299
333k
        nb_samples = ((buf_size - 16) * 2 / 3 * 4) / ch;
1300
333k
        break;
1301
335k
    case AV_CODEC_ID_ADPCM_IMA_DK4:
1302
335k
        if (avctx->block_align > 0)
1303
306k
            buf_size = FFMIN(buf_size, avctx->block_align);
1304
335k
        if (buf_size < 4 * ch)
1305
130k
            return AVERROR_INVALIDDATA;
1306
205k
        nb_samples = 1 + (buf_size - 4 * ch) * 2 / ch;
1307
205k
        break;
1308
309k
    case AV_CODEC_ID_ADPCM_IMA_RAD:
1309
309k
        if (avctx->block_align > 0)
1310
287k
            buf_size = FFMIN(buf_size, avctx->block_align);
1311
309k
        nb_samples = (buf_size - 4 * ch) * 2 / ch;
1312
309k
        break;
1313
337k
    case AV_CODEC_ID_ADPCM_IMA_PDA:
1314
337k
        if (avctx->block_align > 0)
1315
336k
            buf_size = FFMIN(buf_size, avctx->block_align);
1316
337k
        nb_samples = (buf_size - 4 * ch) * 2 / ch;
1317
337k
        break;
1318
329k
    case AV_CODEC_ID_ADPCM_IMA_MAGIX:
1319
329k
        if (avctx->block_align > 0)
1320
278k
            buf_size = FFMIN(buf_size, avctx->block_align);
1321
329k
        nb_samples = (buf_size - 4 * ch) * 2 / ch;
1322
329k
        if (ch == 1) {
1323
21.8k
            avpriv_request_sample(avctx, "mono ADPCM Magix");
1324
21.8k
            return AVERROR_PATCHWELCOME;
1325
21.8k
        }
1326
307k
        break;
1327
307k
    CASE(ADPCM_IMA_WAV,
1328
0
        int bsize = ff_adpcm_ima_block_sizes[avctx->bits_per_coded_sample - 2];
1329
0
        int bsamples = ff_adpcm_ima_block_samples[avctx->bits_per_coded_sample - 2];
1330
0
        if (avctx->block_align > 0)
1331
0
            buf_size = FFMIN(buf_size, avctx->block_align);
1332
0
        if (buf_size < 4 * ch)
1333
0
            return AVERROR_INVALIDDATA;
1334
0
        nb_samples = 1 + (buf_size - 4 * ch) / (bsize * ch) * bsamples;
1335
        ) /* End of CASE */
1336
304k
    CASE(ADPCM_IMA_XBOX,
1337
0
        int bsize = ff_adpcm_ima_block_sizes[avctx->bits_per_coded_sample - 2];
1338
0
        int bsamples = ff_adpcm_ima_block_samples[avctx->bits_per_coded_sample - 2];
1339
0
        if (avctx->block_align > 0)
1340
0
            buf_size = FFMIN(buf_size, avctx->block_align);
1341
0
        if (buf_size < 4 * ch)
1342
0
            return AVERROR_INVALIDDATA;
1343
0
        nb_samples = (buf_size - 4 * ch) / (bsize * ch) * bsamples + 1;
1344
        ) /* End of CASE */
1345
340k
    case AV_CODEC_ID_ADPCM_MS:
1346
340k
        if (avctx->block_align > 0)
1347
320k
            buf_size = FFMIN(buf_size, avctx->block_align);
1348
340k
        nb_samples = (buf_size - 6 * ch) * 2 / ch;
1349
340k
        break;
1350
376k
    case AV_CODEC_ID_ADPCM_MTAF:
1351
376k
        if (avctx->block_align > 0)
1352
373k
            buf_size = FFMIN(buf_size, avctx->block_align);
1353
376k
        nb_samples = (buf_size - 16 * (ch / 2)) * 2 / ch;
1354
376k
        break;
1355
266k
    case AV_CODEC_ID_ADPCM_SBPRO_2:
1356
605k
    case AV_CODEC_ID_ADPCM_SBPRO_3:
1357
897k
    case AV_CODEC_ID_ADPCM_SBPRO_4:
1358
897k
    {
1359
897k
        int samples_per_byte;
1360
897k
        switch (avctx->codec->id) {
1361
266k
        case AV_CODEC_ID_ADPCM_SBPRO_2: samples_per_byte = 4; break;
1362
338k
        case AV_CODEC_ID_ADPCM_SBPRO_3: samples_per_byte = 3; break;
1363
292k
        case AV_CODEC_ID_ADPCM_SBPRO_4: samples_per_byte = 2; break;
1364
897k
        }
1365
897k
        if (!s->status[0].step_index) {
1366
445k
            if (buf_size < ch)
1367
286k
                return AVERROR_INVALIDDATA;
1368
159k
            nb_samples++;
1369
159k
            buf_size -= ch;
1370
159k
        }
1371
611k
        nb_samples += buf_size * samples_per_byte / ch;
1372
611k
        break;
1373
897k
    }
1374
242k
    case AV_CODEC_ID_ADPCM_SWF:
1375
242k
    {
1376
242k
        int buf_bits       = buf_size * 8 - 2;
1377
242k
        int nbits          = (bytestream2_get_byte(gb) >> 6) + 2;
1378
242k
        int block_hdr_size = 22 * ch;
1379
242k
        int block_size     = block_hdr_size + nbits * ch * 4095;
1380
242k
        int nblocks        = buf_bits / block_size;
1381
242k
        int bits_left      = buf_bits - nblocks * block_size;
1382
242k
        nb_samples         = nblocks * 4096;
1383
242k
        if (bits_left >= block_hdr_size)
1384
126k
            nb_samples += 1 + (bits_left - block_hdr_size) / (nbits * ch);
1385
242k
        break;
1386
897k
    }
1387
384k
    case AV_CODEC_ID_ADPCM_THP:
1388
724k
    case AV_CODEC_ID_ADPCM_THP_LE:
1389
724k
        if (avctx->extradata) {
1390
593k
            nb_samples = buf_size * 14 / (8 * ch);
1391
593k
            break;
1392
593k
        }
1393
130k
        has_coded_samples = 1;
1394
130k
        bytestream2_skip(gb, 4); // channel size
1395
130k
        *coded_samples  = (avctx->codec->id == AV_CODEC_ID_ADPCM_THP_LE) ?
1396
64.9k
                          bytestream2_get_le32(gb) :
1397
130k
                          bytestream2_get_be32(gb);
1398
130k
        buf_size       -= 8 + 36 * ch;
1399
130k
        buf_size       /= ch;
1400
130k
        nb_samples      = buf_size / 8 * 14;
1401
130k
        if (buf_size % 8 > 1)
1402
3.94k
            nb_samples     += (buf_size % 8 - 1) * 2;
1403
130k
        *approx_nb_samples = 1;
1404
130k
        break;
1405
308k
    case AV_CODEC_ID_ADPCM_AFC:
1406
308k
        nb_samples = buf_size / (9 * ch) * 16;
1407
308k
        break;
1408
192k
    case AV_CODEC_ID_ADPCM_XA:
1409
192k
        nb_samples = (buf_size / 128) * 224 / ch;
1410
192k
        break;
1411
261k
    case AV_CODEC_ID_ADPCM_XMD:
1412
261k
        nb_samples = buf_size / (21 * ch) * 32;
1413
261k
        break;
1414
426k
    case AV_CODEC_ID_ADPCM_DTK:
1415
794k
    case AV_CODEC_ID_ADPCM_PSX:
1416
794k
        nb_samples = buf_size / (16 * ch) * 28;
1417
794k
        break;
1418
375k
    case AV_CODEC_ID_ADPCM_PSXC:
1419
375k
        nb_samples = ((buf_size - 1) / ch) * 2;
1420
375k
        break;
1421
384k
    case AV_CODEC_ID_ADPCM_ARGO:
1422
384k
        nb_samples = buf_size / avctx->block_align * 32;
1423
384k
        break;
1424
354k
    case AV_CODEC_ID_ADPCM_CIRCUS:
1425
712k
    case AV_CODEC_ID_ADPCM_ZORK:
1426
712k
        nb_samples = buf_size / ch;
1427
712k
        break;
1428
589k
    case AV_CODEC_ID_ADPCM_SANYO:
1429
589k
        if (!avctx->extradata || avctx->extradata_size != 2)
1430
40.3k
            return AVERROR_INVALIDDATA;
1431
549k
        nb_samples = AV_RL16(avctx->extradata);
1432
549k
        break;
1433
11.1M
    }
1434
1435
    /* validate coded sample count */
1436
10.5M
    if (has_coded_samples && (*coded_samples <= 0 || *coded_samples > nb_samples))
1437
1.00M
        return AVERROR_INVALIDDATA;
1438
1439
9.51M
    return nb_samples;
1440
10.5M
}
1441
1442
static int adpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
1443
                              int *got_frame_ptr, AVPacket *avpkt)
1444
17.5M
{
1445
17.5M
    const uint8_t *buf = avpkt->data;
1446
17.5M
    int buf_size = avpkt->size;
1447
17.5M
    ADPCMDecodeContext *c = avctx->priv_data;
1448
17.5M
    int channels = avctx->ch_layout.nb_channels;
1449
17.5M
    int16_t *samples;
1450
17.5M
    int16_t **samples_p;
1451
17.5M
    int st; /* stereo */
1452
17.5M
    int nb_samples, coded_samples, approx_nb_samples, ret;
1453
17.5M
    GetByteContext gb;
1454
1455
17.5M
    bytestream2_init(&gb, buf, buf_size);
1456
17.5M
    nb_samples = get_nb_samples(avctx, &gb, buf_size, &coded_samples, &approx_nb_samples);
1457
17.5M
    if (nb_samples <= 0) {
1458
5.48M
        av_log(avctx, AV_LOG_ERROR, "invalid number of samples in packet\n");
1459
5.48M
        return AVERROR_INVALIDDATA;
1460
5.48M
    }
1461
1462
    /* get output buffer */
1463
12.0M
    frame->nb_samples = nb_samples;
1464
12.0M
    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1465
0
        return ret;
1466
12.0M
    samples = (int16_t *)frame->data[0];
1467
12.0M
    samples_p = (int16_t **)frame->extended_data;
1468
1469
    /* use coded_samples when applicable */
1470
    /* it is always <= nb_samples, so the output buffer will be large enough */
1471
12.0M
    if (coded_samples) {
1472
969k
        if (!approx_nb_samples && coded_samples != nb_samples)
1473
176k
            av_log(avctx, AV_LOG_WARNING, "mismatch in coded sample count\n");
1474
969k
        frame->nb_samples = nb_samples = coded_samples;
1475
969k
    }
1476
1477
12.0M
    st = channels == 2 ? 1 : 0;
1478
1479
12.0M
    switch(avctx->codec->id) {
1480
288k
    CASE(ADPCM_IMA_QT,
1481
        /* In QuickTime, IMA is encoded by chunks of 34 bytes (=64 samples).
1482
           Channel data is interleaved per-chunk. */
1483
288k
        for (int channel = 0; channel < channels; channel++) {
1484
288k
            ADPCMChannelStatus *cs = &c->status[channel];
1485
288k
            int predictor;
1486
288k
            int step_index;
1487
            /* (pppppp) (piiiiiii) */
1488
1489
            /* Bits 15-7 are the _top_ 9 bits of the 16-bit initial predictor value */
1490
288k
            predictor = sign_extend(bytestream2_get_be16u(&gb), 16);
1491
288k
            step_index = predictor & 0x7F;
1492
288k
            predictor &= ~0x7F;
1493
1494
288k
            if (cs->step_index == step_index) {
1495
288k
                int diff = predictor - cs->predictor;
1496
288k
                if (diff < 0)
1497
288k
                    diff = - diff;
1498
288k
                if (diff > 0x7f)
1499
288k
                    goto update;
1500
288k
            } else {
1501
288k
            update:
1502
288k
                cs->step_index = step_index;
1503
288k
                cs->predictor = predictor;
1504
288k
            }
1505
1506
288k
            if (cs->step_index > 88u){
1507
288k
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1508
288k
                       channel, cs->step_index);
1509
288k
                return AVERROR_INVALIDDATA;
1510
288k
            }
1511
1512
288k
            samples = samples_p[channel];
1513
1514
288k
            for (int m = 0; m < 64; m += 2) {
1515
288k
                int byte = bytestream2_get_byteu(&gb);
1516
288k
                samples[m    ] = ff_adpcm_ima_qt_expand_nibble(cs, byte & 0x0F);
1517
288k
                samples[m + 1] = ff_adpcm_ima_qt_expand_nibble(cs, byte >> 4  );
1518
288k
            }
1519
288k
        }
1520
        ) /* End of CASE */
1521
382k
    CASE(ADPCM_IMA_WAV,
1522
190k
        for (int i = 0; i < channels; i++) {
1523
190k
            ADPCMChannelStatus *cs = &c->status[i];
1524
190k
            cs->predictor = samples_p[i][0] = sign_extend(bytestream2_get_le16u(&gb), 16);
1525
1526
190k
            cs->step_index = bytestream2_get_byteu(&gb);
1527
190k
            bytestream2_skipu(&gb, 1);
1528
190k
            if (cs->step_index > 88u){
1529
190k
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1530
190k
                       i, cs->step_index);
1531
190k
                return AVERROR_INVALIDDATA;
1532
190k
            }
1533
190k
        }
1534
1535
190k
        if (avctx->bits_per_coded_sample != 4) {
1536
190k
            int samples_per_block = ff_adpcm_ima_block_samples[avctx->bits_per_coded_sample - 2];
1537
190k
            int block_size = ff_adpcm_ima_block_sizes[avctx->bits_per_coded_sample - 2];
1538
190k
            uint8_t temp[20 + AV_INPUT_BUFFER_PADDING_SIZE] = { 0 };
1539
190k
            GetBitContext g;
1540
1541
190k
            for (int n = 0; n < (nb_samples - 1) / samples_per_block; n++) {
1542
190k
                for (int i = 0; i < channels; i++) {
1543
190k
                    ADPCMChannelStatus *cs = &c->status[i];
1544
190k
                    samples = &samples_p[i][1 + n * samples_per_block];
1545
190k
                    for (int j = 0; j < block_size; j++) {
1546
190k
                        temp[j] = buf[4 * channels + block_size * n * channels +
1547
190k
                                        (j % 4) + (j / 4) * (channels * 4) + i * 4];
1548
190k
                    }
1549
190k
                    ret = init_get_bits8(&g, (const uint8_t *)&temp, block_size);
1550
190k
                    if (ret < 0)
1551
190k
                        return ret;
1552
190k
                    for (int m = 0; m < samples_per_block; m++) {
1553
190k
                        samples[m] = adpcm_ima_wav_expand_nibble(cs, &g,
1554
190k
                                          avctx->bits_per_coded_sample);
1555
190k
                    }
1556
190k
                }
1557
190k
            }
1558
190k
            bytestream2_skip(&gb, avctx->block_align - channels * 4);
1559
190k
        } else {
1560
190k
            for (int n = 0; n < (nb_samples - 1) / 8; n++) {
1561
190k
                for (int i = 0; i < channels; i++) {
1562
190k
                    ADPCMChannelStatus *cs = &c->status[i];
1563
190k
                    samples = &samples_p[i][1 + n * 8];
1564
190k
                    for (int m = 0; m < 8; m += 2) {
1565
190k
                        int v = bytestream2_get_byteu(&gb);
1566
190k
                        samples[m    ] = ff_adpcm_ima_qt_expand_nibble(cs, v & 0x0F);
1567
190k
                        samples[m + 1] = ff_adpcm_ima_qt_expand_nibble(cs, v >> 4);
1568
190k
                    }
1569
190k
                }
1570
190k
            }
1571
190k
        }
1572
        ) /* End of CASE */
1573
227k
    CASE(ADPCM_IMA_XBOX,
1574
0
        for (int i = 0; i < channels; i++) {
1575
0
            ADPCMChannelStatus *cs = &c->status[i];
1576
0
            cs->predictor = samples_p[i][0] = sign_extend(bytestream2_get_le16u(&gb), 16);
1577
1578
0
            cs->step_index = sign_extend(bytestream2_get_le16u(&gb), 16);
1579
0
            if (cs->step_index > 88u) {
1580
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1581
0
                       i, cs->step_index);
1582
0
                return AVERROR_INVALIDDATA;
1583
0
            }
1584
0
        }
1585
1586
0
        for (int n = 0; n < (nb_samples-1) / 8; n++) {
1587
0
            for (int i = 0; i < channels; i++) {
1588
0
                ADPCMChannelStatus *cs = &c->status[i];
1589
0
                samples = &samples_p[i][1 + n * 8];
1590
0
                for (int m = 0; m < 8; m += 2) {
1591
0
                    int v = bytestream2_get_byteu(&gb);
1592
0
                    samples[m    ] = adpcm_ima_expand_nibble(cs, v & 0x0F, 3);
1593
0
                    samples[m + 1] = adpcm_ima_expand_nibble(cs, v >> 4  , 3);
1594
0
                }
1595
0
            }
1596
0
        }
1597
0
        frame->nb_samples--;
1598
        ) /* End of CASE */
1599
253k
    CASE(ADPCM_4XM,
1600
0
        for (int i = 0; i < channels; i++)
1601
0
            c->status[i].predictor = sign_extend(bytestream2_get_le16u(&gb), 16);
1602
1603
0
        for (int i = 0; i < channels; i++) {
1604
0
            c->status[i].step_index = sign_extend(bytestream2_get_le16u(&gb), 16);
1605
0
            if (c->status[i].step_index > 88u) {
1606
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1607
0
                       i, c->status[i].step_index);
1608
0
                return AVERROR_INVALIDDATA;
1609
0
            }
1610
0
        }
1611
1612
0
        for (int i = 0; i < channels; i++) {
1613
0
            ADPCMChannelStatus *cs = &c->status[i];
1614
0
            samples = (int16_t *)frame->data[i];
1615
0
            for (int n = nb_samples >> 1; n > 0; n--) {
1616
0
                int v = bytestream2_get_byteu(&gb);
1617
0
                *samples++ = adpcm_ima_expand_nibble(cs, v & 0x0F, 4);
1618
0
                *samples++ = adpcm_ima_expand_nibble(cs, v >> 4  , 4);
1619
0
            }
1620
0
        }
1621
        ) /* End of CASE */
1622
253k
    CASE(ADPCM_AGM,
1623
0
        for (int i = 0; i < channels; i++)
1624
0
            c->status[i].predictor = sign_extend(bytestream2_get_le16u(&gb), 16);
1625
0
        for (int i = 0; i < channels; i++)
1626
0
            c->status[i].step = sign_extend(bytestream2_get_le16u(&gb), 16);
1627
1628
0
        for (int n = 0; n < nb_samples >> (1 - st); n++) {
1629
0
            int v = bytestream2_get_byteu(&gb);
1630
0
            *samples++ = adpcm_agm_expand_nibble(&c->status[0], v & 0xF);
1631
0
            *samples++ = adpcm_agm_expand_nibble(&c->status[st], v >> 4 );
1632
0
        }
1633
        ) /* End of CASE */
1634
215k
    CASE(ADPCM_MS,
1635
207k
        int block_predictor;
1636
1637
207k
        if (avctx->ch_layout.nb_channels > 2) {
1638
207k
            for (int channel = 0; channel < avctx->ch_layout.nb_channels; channel++) {
1639
207k
                samples = samples_p[channel];
1640
207k
                block_predictor = bytestream2_get_byteu(&gb);
1641
207k
                if (block_predictor > 6) {
1642
207k
                    av_log(avctx, AV_LOG_ERROR, "ERROR: block_predictor[%d] = %d\n",
1643
207k
                           channel, block_predictor);
1644
207k
                    return AVERROR_INVALIDDATA;
1645
207k
                }
1646
207k
                c->status[channel].coeff1 = ff_adpcm_AdaptCoeff1[block_predictor];
1647
207k
                c->status[channel].coeff2 = ff_adpcm_AdaptCoeff2[block_predictor];
1648
207k
                c->status[channel].idelta = sign_extend(bytestream2_get_le16u(&gb), 16);
1649
207k
                c->status[channel].sample1 = sign_extend(bytestream2_get_le16u(&gb), 16);
1650
207k
                c->status[channel].sample2 = sign_extend(bytestream2_get_le16u(&gb), 16);
1651
207k
                *samples++ = c->status[channel].sample2;
1652
207k
                *samples++ = c->status[channel].sample1;
1653
207k
                for (int n = (nb_samples - 2) >> 1; n > 0; n--) {
1654
207k
                    int byte = bytestream2_get_byteu(&gb);
1655
207k
                    *samples++ = adpcm_ms_expand_nibble(&c->status[channel], byte >> 4  );
1656
207k
                    *samples++ = adpcm_ms_expand_nibble(&c->status[channel], byte & 0x0F);
1657
207k
                }
1658
207k
            }
1659
207k
        } else {
1660
207k
            block_predictor = bytestream2_get_byteu(&gb);
1661
207k
            if (block_predictor > 6) {
1662
207k
                av_log(avctx, AV_LOG_ERROR, "ERROR: block_predictor[0] = %d\n",
1663
207k
                       block_predictor);
1664
207k
                return AVERROR_INVALIDDATA;
1665
207k
            }
1666
207k
            c->status[0].coeff1 = ff_adpcm_AdaptCoeff1[block_predictor];
1667
207k
            c->status[0].coeff2 = ff_adpcm_AdaptCoeff2[block_predictor];
1668
207k
            if (st) {
1669
207k
                block_predictor = bytestream2_get_byteu(&gb);
1670
207k
                if (block_predictor > 6) {
1671
207k
                    av_log(avctx, AV_LOG_ERROR, "ERROR: block_predictor[1] = %d\n",
1672
207k
                           block_predictor);
1673
207k
                    return AVERROR_INVALIDDATA;
1674
207k
                }
1675
207k
                c->status[1].coeff1 = ff_adpcm_AdaptCoeff1[block_predictor];
1676
207k
                c->status[1].coeff2 = ff_adpcm_AdaptCoeff2[block_predictor];
1677
207k
            }
1678
207k
            c->status[0].idelta = sign_extend(bytestream2_get_le16u(&gb), 16);
1679
207k
            if (st){
1680
207k
                c->status[1].idelta = sign_extend(bytestream2_get_le16u(&gb), 16);
1681
207k
            }
1682
1683
207k
            c->status[0].sample1 = sign_extend(bytestream2_get_le16u(&gb), 16);
1684
207k
            if (st) c->status[1].sample1 = sign_extend(bytestream2_get_le16u(&gb), 16);
1685
207k
            c->status[0].sample2 = sign_extend(bytestream2_get_le16u(&gb), 16);
1686
207k
            if (st) c->status[1].sample2 = sign_extend(bytestream2_get_le16u(&gb), 16);
1687
1688
207k
            *samples++ = c->status[0].sample2;
1689
207k
            if (st) *samples++ = c->status[1].sample2;
1690
207k
            *samples++ = c->status[0].sample1;
1691
207k
            if (st) *samples++ = c->status[1].sample1;
1692
207k
            for (int n = (nb_samples - 2) >> (1 - st); n > 0; n--) {
1693
207k
                int byte = bytestream2_get_byteu(&gb);
1694
207k
                *samples++ = adpcm_ms_expand_nibble(&c->status[0 ], byte >> 4  );
1695
207k
                *samples++ = adpcm_ms_expand_nibble(&c->status[st], byte & 0x0F);
1696
207k
            }
1697
207k
        }
1698
        ) /* End of CASE */
1699
261k
    CASE(ADPCM_MTAF,
1700
0
        for (int channel = 0; channel < channels; channel += 2) {
1701
0
            bytestream2_skipu(&gb, 4);
1702
0
            c->status[channel    ].step      = bytestream2_get_le16u(&gb) & 0x1f;
1703
0
            c->status[channel + 1].step      = bytestream2_get_le16u(&gb) & 0x1f;
1704
0
            c->status[channel    ].predictor = sign_extend(bytestream2_get_le16u(&gb), 16);
1705
0
            bytestream2_skipu(&gb, 2);
1706
0
            c->status[channel + 1].predictor = sign_extend(bytestream2_get_le16u(&gb), 16);
1707
0
            bytestream2_skipu(&gb, 2);
1708
0
            for (int n = 0; n < nb_samples; n += 2) {
1709
0
                int v = bytestream2_get_byteu(&gb);
1710
0
                samples_p[channel][n    ] = adpcm_mtaf_expand_nibble(&c->status[channel], v & 0x0F);
1711
0
                samples_p[channel][n + 1] = adpcm_mtaf_expand_nibble(&c->status[channel], v >> 4  );
1712
0
            }
1713
0
            for (int n = 0; n < nb_samples; n += 2) {
1714
0
                int v = bytestream2_get_byteu(&gb);
1715
0
                samples_p[channel + 1][n    ] = adpcm_mtaf_expand_nibble(&c->status[channel + 1], v & 0x0F);
1716
0
                samples_p[channel + 1][n + 1] = adpcm_mtaf_expand_nibble(&c->status[channel + 1], v >> 4  );
1717
0
            }
1718
0
        }
1719
        ) /* End of CASE */
1720
205k
    CASE(ADPCM_IMA_DK4,
1721
0
        for (int channel = 0; channel < channels; channel++) {
1722
0
            ADPCMChannelStatus *cs = &c->status[channel];
1723
0
            cs->predictor  = *samples++ = sign_extend(bytestream2_get_le16u(&gb), 16);
1724
0
            cs->step_index = sign_extend(bytestream2_get_le16u(&gb), 16);
1725
0
            if (cs->step_index > 88u){
1726
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1727
0
                       channel, cs->step_index);
1728
0
                return AVERROR_INVALIDDATA;
1729
0
            }
1730
0
        }
1731
0
        for (int n = (nb_samples - 1) >> (1 - st); n > 0; n--) {
1732
0
            int v = bytestream2_get_byteu(&gb);
1733
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0 ], v >> 4  , 3);
1734
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[st], v & 0x0F, 3);
1735
0
        }
1736
        ) /* End of CASE */
1737
1738
        /* DK3 ADPCM support macro */
1739
0
#define DK3_GET_NEXT_NIBBLE() \
1740
0
    if (decode_top_nibble_next) { \
1741
0
        nibble = last_byte >> 4; \
1742
0
        decode_top_nibble_next = 0; \
1743
0
    } else { \
1744
0
        last_byte = bytestream2_get_byteu(&gb); \
1745
0
        nibble = last_byte & 0x0F; \
1746
0
        decode_top_nibble_next = 1; \
1747
0
    }
1748
194k
    CASE(ADPCM_IMA_DK3,
1749
0
        int last_byte = 0;
1750
0
        int nibble;
1751
0
        int decode_top_nibble_next = 0;
1752
0
        int diff_channel;
1753
0
        const int16_t *samples_end = samples + channels * nb_samples;
1754
1755
0
        bytestream2_skipu(&gb, 10);
1756
0
        c->status[0].predictor  = sign_extend(bytestream2_get_le16u(&gb), 16);
1757
0
        c->status[1].predictor  = sign_extend(bytestream2_get_le16u(&gb), 16);
1758
0
        c->status[0].step_index = bytestream2_get_byteu(&gb);
1759
0
        c->status[1].step_index = bytestream2_get_byteu(&gb);
1760
0
        if (c->status[0].step_index > 88u || c->status[1].step_index > 88u){
1761
0
            av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i/%i\n",
1762
0
                   c->status[0].step_index, c->status[1].step_index);
1763
0
            return AVERROR_INVALIDDATA;
1764
0
        }
1765
        /* sign extend the predictors */
1766
0
        diff_channel = c->status[1].predictor;
1767
1768
0
        while (samples < samples_end) {
1769
1770
            /* for this algorithm, c->status[0] is the sum channel and
1771
             * c->status[1] is the diff channel */
1772
1773
            /* process the first predictor of the sum channel */
1774
0
            DK3_GET_NEXT_NIBBLE();
1775
0
            adpcm_ima_expand_nibble(&c->status[0], nibble, 3);
1776
1777
            /* process the diff channel predictor */
1778
0
            DK3_GET_NEXT_NIBBLE();
1779
0
            adpcm_ima_expand_nibble(&c->status[1], nibble, 3);
1780
1781
            /* process the first pair of stereo PCM samples */
1782
0
            diff_channel = (diff_channel + c->status[1].predictor) / 2;
1783
0
            *samples++ = c->status[0].predictor + c->status[1].predictor;
1784
0
            *samples++ = c->status[0].predictor - c->status[1].predictor;
1785
1786
            /* process the second predictor of the sum channel */
1787
0
            DK3_GET_NEXT_NIBBLE();
1788
0
            adpcm_ima_expand_nibble(&c->status[0], nibble, 3);
1789
1790
            /* process the second pair of stereo PCM samples */
1791
0
            diff_channel = (diff_channel + c->status[1].predictor) / 2;
1792
0
            *samples++ = c->status[0].predictor + c->status[1].predictor;
1793
0
            *samples++ = c->status[0].predictor - c->status[1].predictor;
1794
0
        }
1795
1796
0
        if ((bytestream2_tell(&gb) & 1))
1797
0
            bytestream2_skip(&gb, 1);
1798
        ) /* End of CASE */
1799
172k
    CASE(ADPCM_IMA_MAGIX,
1800
0
        for (int channel = 0; channel < channels; channel++) {
1801
0
            ADPCMChannelStatus *cs = &c->status[channel];
1802
0
            cs->predictor  = sign_extend(bytestream2_get_le16u(&gb), 16);
1803
0
            cs->step_index = sign_extend(bytestream2_get_le16u(&gb), 16);
1804
0
            if (cs->step_index > 88u){
1805
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1806
0
                       channel, cs->step_index);
1807
0
                return AVERROR_INVALIDDATA;
1808
0
            }
1809
0
        }
1810
1811
0
        for (int m = 0; m < channels*nb_samples/16; m ++) {
1812
0
            uint32_t v0 = bytestream2_get_le32u(&gb);
1813
0
            uint32_t v1 = bytestream2_get_le32u(&gb);
1814
1815
0
            for (int n = 8; n > 0; n--, v0 >>= 4, v1 >>= 4, samples += 2) {
1816
0
                samples[0] = adpcm_ima_expand_nibble(&c->status[0], v0 & 15, 3);
1817
0
                samples[1] = adpcm_ima_expand_nibble(&c->status[1], v1 & 15, 3);
1818
0
            }
1819
0
        }
1820
        ) /* End of CASE */
1821
141k
    CASE(ADPCM_IMA_ISS,
1822
0
        for (int channel = 0; channel < channels; channel++) {
1823
0
            ADPCMChannelStatus *cs = &c->status[channel];
1824
0
            cs->predictor  = sign_extend(bytestream2_get_le16u(&gb), 16);
1825
0
            cs->step_index = sign_extend(bytestream2_get_le16u(&gb), 16);
1826
0
            if (cs->step_index > 88u){
1827
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1828
0
                       channel, cs->step_index);
1829
0
                return AVERROR_INVALIDDATA;
1830
0
            }
1831
0
        }
1832
1833
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
1834
0
            int v1, v2;
1835
0
            int v = bytestream2_get_byteu(&gb);
1836
            /* nibbles are swapped for mono */
1837
0
            if (st) {
1838
0
                v1 = v >> 4;
1839
0
                v2 = v & 0x0F;
1840
0
            } else {
1841
0
                v2 = v >> 4;
1842
0
                v1 = v & 0x0F;
1843
0
            }
1844
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0 ], v1, 3);
1845
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[st], v2, 3);
1846
0
        }
1847
        ) /* End of CASE */
1848
182k
    CASE(ADPCM_IMA_MOFLEX,
1849
0
        for (int channel = 0; channel < channels; channel++) {
1850
0
            ADPCMChannelStatus *cs = &c->status[channel];
1851
0
            cs->step_index = sign_extend(bytestream2_get_le16u(&gb), 16);
1852
0
            cs->predictor  = sign_extend(bytestream2_get_le16u(&gb), 16);
1853
0
            if (cs->step_index > 88u){
1854
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1855
0
                       channel, cs->step_index);
1856
0
                return AVERROR_INVALIDDATA;
1857
0
            }
1858
0
        }
1859
1860
0
        for (int subframe = 0; subframe < nb_samples / 256; subframe++) {
1861
0
            for (int channel = 0; channel < channels; channel++) {
1862
0
                samples = samples_p[channel] + 256 * subframe;
1863
0
                for (int n = 0; n < 256; n += 2) {
1864
0
                    int v = bytestream2_get_byteu(&gb);
1865
0
                    *samples++ = adpcm_ima_expand_nibble(&c->status[channel], v & 0x0F, 3);
1866
0
                    *samples++ = adpcm_ima_expand_nibble(&c->status[channel], v >> 4  , 3);
1867
0
                }
1868
0
            }
1869
0
        }
1870
        ) /* End of CASE */
1871
227k
    CASE(ADPCM_IMA_DAT4,
1872
0
        for (int channel = 0; channel < channels; channel++) {
1873
0
            ADPCMChannelStatus *cs = &c->status[channel];
1874
0
            samples = samples_p[channel];
1875
0
            bytestream2_skip(&gb, 4);
1876
0
            for (int n = 0; n < nb_samples; n += 2) {
1877
0
                int v = bytestream2_get_byteu(&gb);
1878
0
                *samples++ = adpcm_ima_expand_nibble(cs, v >> 4  , 3);
1879
0
                *samples++ = adpcm_ima_expand_nibble(cs, v & 0x0F, 3);
1880
0
            }
1881
0
        }
1882
        ) /* End of CASE */
1883
186k
    CASE(ADPCM_IMA_APC,
1884
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
1885
0
            int v = bytestream2_get_byteu(&gb);
1886
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0],  v >> 4  , 3);
1887
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[st], v & 0x0F, 3);
1888
0
        }
1889
        ) /* End of CASE */
1890
182k
    CASE(ADPCM_IMA_HVQM2,
1891
0
        int format = bytestream2_get_be16(&gb);
1892
1893
0
        bytestream2_skip(&gb, 4);
1894
0
        decode_adpcm_ima_hvqm2(avctx, samples, nb_samples, format, &gb);
1895
        ) /* End of CASE */
1896
182k
    CASE(ADPCM_IMA_HVQM4,
1897
0
        int format = bytestream2_get_be16(&gb);
1898
1899
0
        bytestream2_skip(&gb, 4);
1900
0
        decode_adpcm_ima_hvqm4(avctx, samples, nb_samples, format, &gb);
1901
        ) /* End of CASE */
1902
189k
    CASE(ADPCM_IMA_SSI,
1903
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
1904
0
            int v = bytestream2_get_byteu(&gb);
1905
0
            *samples++ = ff_adpcm_ima_qt_expand_nibble(&c->status[0],  v >> 4  );
1906
0
            *samples++ = ff_adpcm_ima_qt_expand_nibble(&c->status[st], v & 0x0F);
1907
0
        }
1908
        ) /* End of CASE */
1909
356k
    CASE(ADPCM_IMA_APM,
1910
0
        for (int n = nb_samples / 2; n > 0; n--) {
1911
0
            for (int channel = 0; channel < channels; channel++) {
1912
0
                int v = bytestream2_get_byteu(&gb);
1913
0
                *samples++  = ff_adpcm_ima_qt_expand_nibble(&c->status[channel], v >> 4  );
1914
0
                samples[st] = ff_adpcm_ima_qt_expand_nibble(&c->status[channel], v & 0x0F);
1915
0
            }
1916
0
            samples += channels;
1917
0
        }
1918
        ) /* End of CASE */
1919
338k
    CASE(ADPCM_IMA_ALP,
1920
0
        for (int n = nb_samples / 2; n > 0; n--) {
1921
0
            for (int channel = 0; channel < channels; channel++) {
1922
0
                int v = bytestream2_get_byteu(&gb);
1923
0
                *samples++  = adpcm_ima_alp_expand_nibble(&c->status[channel], v >> 4  , 2);
1924
0
                samples[st] = adpcm_ima_alp_expand_nibble(&c->status[channel], v & 0x0F, 2);
1925
0
            }
1926
0
            samples += channels;
1927
0
        }
1928
        ) /* End of CASE */
1929
350k
    CASE(ADPCM_IMA_CUNNING,
1930
0
        for (int channel = 0; channel < channels; channel++) {
1931
0
            int16_t *smp = samples_p[channel];
1932
0
            for (int n = 0; n < nb_samples / 2; n++) {
1933
0
                int v = bytestream2_get_byteu(&gb);
1934
0
                *smp++ = adpcm_ima_cunning_expand_nibble(&c->status[channel], v & 0x0F);
1935
0
                *smp++ = adpcm_ima_cunning_expand_nibble(&c->status[channel], v >> 4);
1936
0
            }
1937
0
        }
1938
        ) /* End of CASE */
1939
182k
    CASE(ADPCM_IMA_OKI,
1940
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
1941
0
            int v = bytestream2_get_byteu(&gb);
1942
0
            *samples++ = adpcm_ima_oki_expand_nibble(&c->status[0],  v >> 4  );
1943
0
            *samples++ = adpcm_ima_oki_expand_nibble(&c->status[st], v & 0x0F);
1944
0
        }
1945
        ) /* End of CASE */
1946
177k
    CASE(ADPCM_IMA_RAD,
1947
0
        for (int channel = 0; channel < channels; channel++) {
1948
0
            ADPCMChannelStatus *cs = &c->status[channel];
1949
0
            cs->step_index = sign_extend(bytestream2_get_le16u(&gb), 16);
1950
0
            cs->predictor  = sign_extend(bytestream2_get_le16u(&gb), 16);
1951
0
            if (cs->step_index > 88u){
1952
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
1953
0
                       channel, cs->step_index);
1954
0
                return AVERROR_INVALIDDATA;
1955
0
            }
1956
0
        }
1957
0
        for (int n = 0; n < nb_samples / 2; n++) {
1958
0
            int byte[2];
1959
1960
0
            byte[0] = bytestream2_get_byteu(&gb);
1961
0
            if (st)
1962
0
                byte[1] = bytestream2_get_byteu(&gb);
1963
0
            for (int channel = 0; channel < channels; channel++) {
1964
0
                *samples++ = adpcm_ima_expand_nibble(&c->status[channel], byte[channel] & 0x0F, 3);
1965
0
            }
1966
0
            for (int channel = 0; channel < channels; channel++) {
1967
0
                *samples++ = adpcm_ima_expand_nibble(&c->status[channel], byte[channel] >> 4  , 3);
1968
0
            }
1969
0
        }
1970
        ) /* End of CASE */
1971
179k
    CASE(ADPCM_IMA_WS,
1972
0
        if (c->vqa_version == 3) {
1973
0
            for (int channel = 0; channel < channels; channel++) {
1974
0
                int16_t *smp = samples_p[channel];
1975
1976
0
                for (int n = nb_samples / 2; n > 0; n--) {
1977
0
                    int v = bytestream2_get_byteu(&gb);
1978
0
                    *smp++ = adpcm_ima_expand_nibble(&c->status[channel], v & 0x0F, 3);
1979
0
                    *smp++ = adpcm_ima_expand_nibble(&c->status[channel], v >> 4  , 3);
1980
0
                }
1981
0
            }
1982
0
        } else {
1983
0
            for (int n = nb_samples / 2; n > 0; n--) {
1984
0
                for (int channel = 0; channel < channels; channel++) {
1985
0
                    int v = bytestream2_get_byteu(&gb);
1986
0
                    *samples++  = adpcm_ima_expand_nibble(&c->status[channel], v & 0x0F, 3);
1987
0
                    samples[st] = adpcm_ima_expand_nibble(&c->status[channel], v >> 4  , 3);
1988
0
                }
1989
0
                samples += channels;
1990
0
            }
1991
0
        }
1992
0
        bytestream2_seek(&gb, 0, SEEK_END);
1993
        ) /* End of CASE */
1994
177k
    CASE(ADPCM_XMD,
1995
0
        int bytes_remaining, block = 0;
1996
0
        while (bytestream2_get_bytes_left(&gb) >= 21 * channels) {
1997
0
            for (int channel = 0; channel < channels; channel++) {
1998
0
                int16_t *out = samples_p[channel] + block * 32;
1999
0
                int16_t history[2];
2000
0
                uint16_t scale;
2001
2002
0
                history[1] = sign_extend(bytestream2_get_le16(&gb), 16);
2003
0
                history[0] = sign_extend(bytestream2_get_le16(&gb), 16);
2004
0
                scale = bytestream2_get_le16(&gb);
2005
2006
0
                out[0] = history[1];
2007
0
                out[1] = history[0];
2008
2009
0
                for (int n = 0; n < 15; n++) {
2010
0
                    unsigned byte = bytestream2_get_byte(&gb);
2011
0
                    int32_t nibble[2];
2012
2013
0
                    nibble[0] = sign_extend(byte & 15, 4);
2014
0
                    nibble[1] = sign_extend(byte >> 4, 4);
2015
2016
0
                    out[2+n*2] = nibble[0]*scale + ((history[0]*3667 - history[1]*1642) >> 11);
2017
0
                    history[1] = history[0];
2018
0
                    history[0] = out[2+n*2];
2019
2020
0
                    out[2+n*2+1] = nibble[1]*scale + ((history[0]*3667 - history[1]*1642) >> 11);
2021
0
                    history[1] = history[0];
2022
0
                    history[0] = out[2+n*2+1];
2023
0
                }
2024
0
            }
2025
2026
0
            block++;
2027
0
        }
2028
0
        bytes_remaining = bytestream2_get_bytes_left(&gb);
2029
0
        if (bytes_remaining > 0) {
2030
0
            bytestream2_skip(&gb, bytes_remaining);
2031
0
        }
2032
        ) /* End of CASE */
2033
61.9k
    CASE(ADPCM_XA,
2034
0
        int16_t *out0 = samples_p[0];
2035
0
        int16_t *out1 = samples_p[1];
2036
0
        int samples_per_block = 28 * (3 - channels) * 4;
2037
0
        int sample_offset = 0;
2038
0
        int bytes_remaining;
2039
0
        while (bytestream2_get_bytes_left(&gb) >= 128) {
2040
0
            if ((ret = xa_decode(avctx, out0, out1, buf + bytestream2_tell(&gb),
2041
0
                                 &c->status[0], &c->status[1],
2042
0
                                 channels, sample_offset)) < 0)
2043
0
                return ret;
2044
0
            bytestream2_skipu(&gb, 128);
2045
0
            sample_offset += samples_per_block;
2046
0
        }
2047
        /* Less than a full block of data left, e.g. when reading from
2048
         * 2324 byte per sector XA; the remainder is padding */
2049
0
        bytes_remaining = bytestream2_get_bytes_left(&gb);
2050
0
        if (bytes_remaining > 0) {
2051
0
            bytestream2_skip(&gb, bytes_remaining);
2052
0
        }
2053
        ) /* End of CASE */
2054
171k
    CASE(ADPCM_IMA_ESCAPE,
2055
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
2056
0
            int byte = bytestream2_get_byteu(&gb);
2057
0
            *samples++ = adpcm_ima_escape_expand_nibble(&c->status[0],  byte >> 4);
2058
0
            *samples++ = adpcm_ima_escape_expand_nibble(&c->status[st], byte & 0xF);
2059
0
        }
2060
        ) /* End of CASE */
2061
366k
    CASE(ADPCM_IMA_EA_EACS,
2062
0
        for (int i = 0; i <= st; i++) {
2063
0
            c->status[i].step_index = bytestream2_get_le32u(&gb);
2064
0
            if (c->status[i].step_index > 88u) {
2065
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
2066
0
                       i, c->status[i].step_index);
2067
0
                return AVERROR_INVALIDDATA;
2068
0
            }
2069
0
        }
2070
0
        for (int i = 0; i <= st; i++) {
2071
0
            c->status[i].predictor  = bytestream2_get_le32u(&gb);
2072
0
            if (FFABS((int64_t)c->status[i].predictor) > (1<<16))
2073
0
                return AVERROR_INVALIDDATA;
2074
0
        }
2075
2076
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
2077
0
            int byte   = bytestream2_get_byteu(&gb);
2078
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0],  byte >> 4,   3);
2079
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[st], byte & 0x0F, 3);
2080
0
        }
2081
        ) /* End of CASE */
2082
366k
    CASE(ADPCM_IMA_EA_SEAD,
2083
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
2084
0
            int byte = bytestream2_get_byteu(&gb);
2085
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0],  byte >> 4,   6);
2086
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[st], byte & 0x0F, 6);
2087
0
        }
2088
        ) /* End of CASE */
2089
212k
    CASE(ADPCM_EA,
2090
0
        int previous_left_sample, previous_right_sample;
2091
0
        int current_left_sample, current_right_sample;
2092
0
        int next_left_sample, next_right_sample;
2093
0
        int coeff1l, coeff2l, coeff1r, coeff2r;
2094
0
        int shift_left, shift_right;
2095
2096
        /* Each EA ADPCM frame has a 12-byte header followed by 30-byte (stereo) or 15-byte (mono) pieces,
2097
           each coding 28 stereo/mono samples. */
2098
2099
0
        if (channels != 2 && channels != 1)
2100
0
            return AVERROR_INVALIDDATA;
2101
2102
0
        current_left_sample   = sign_extend(bytestream2_get_le16u(&gb), 16);
2103
0
        previous_left_sample  = sign_extend(bytestream2_get_le16u(&gb), 16);
2104
0
        current_right_sample  = sign_extend(bytestream2_get_le16u(&gb), 16);
2105
0
        previous_right_sample = sign_extend(bytestream2_get_le16u(&gb), 16);
2106
2107
0
        for (int count1 = 0; count1 < nb_samples / 28; count1++) {
2108
0
            int byte = bytestream2_get_byteu(&gb);
2109
0
            coeff1l = ea_adpcm_table[ byte >> 4       ];
2110
0
            coeff2l = ea_adpcm_table[(byte >> 4  ) + 4];
2111
0
            coeff1r = ea_adpcm_table[ byte & 0x0F];
2112
0
            coeff2r = ea_adpcm_table[(byte & 0x0F) + 4];
2113
2114
0
            if (channels == 2){
2115
0
                byte = bytestream2_get_byteu(&gb);
2116
0
                shift_left = 20 - (byte >> 4);
2117
0
                shift_right = 20 - (byte & 0x0F);
2118
0
            } else{
2119
                /* Mono packs the shift into the coefficient byte's lower nibble instead */
2120
0
                shift_left = 20 - (byte & 0x0F);
2121
0
            }
2122
2123
0
            for (int count2 = 0; count2 < (channels == 2 ? 28 : 14); count2++) {
2124
0
                byte = bytestream2_get_byteu(&gb);
2125
0
                next_left_sample  = sign_extend(byte >> 4, 4) * (1 << shift_left);
2126
2127
0
                next_left_sample = (next_left_sample +
2128
0
                    (current_left_sample * coeff1l) +
2129
0
                    (previous_left_sample * coeff2l) + 0x80) >> 8;
2130
2131
0
                previous_left_sample = current_left_sample;
2132
0
                current_left_sample = av_clip_int16(next_left_sample);
2133
0
                *samples++ = current_left_sample;
2134
2135
0
                if (channels == 2){
2136
0
                    next_right_sample = sign_extend(byte, 4) * (1 << shift_right);
2137
2138
0
                    next_right_sample = (next_right_sample +
2139
0
                        (current_right_sample * coeff1r) +
2140
0
                        (previous_right_sample * coeff2r) + 0x80) >> 8;
2141
2142
0
                    previous_right_sample = current_right_sample;
2143
0
                    current_right_sample = av_clip_int16(next_right_sample);
2144
0
                    *samples++ = current_right_sample;
2145
0
                } else {
2146
0
                    next_left_sample  = sign_extend(byte, 4) * (1 << shift_left);
2147
2148
0
                    next_left_sample = (next_left_sample +
2149
0
                        (current_left_sample * coeff1l) +
2150
0
                        (previous_left_sample * coeff2l) + 0x80) >> 8;
2151
2152
0
                    previous_left_sample = current_left_sample;
2153
0
                    current_left_sample = av_clip_int16(next_left_sample);
2154
2155
0
                    *samples++ = current_left_sample;
2156
0
                }
2157
0
            }
2158
0
        }
2159
0
        bytestream2_skip(&gb, channels == 2 ? 2 : 3); // Skip terminating NULs
2160
        ) /* End of CASE */
2161
212k
    CASE(ADPCM_EA_MAXIS_XA,
2162
0
        int coeff[2][2], shift[2];
2163
2164
0
        for (int channel = 0; channel < channels; channel++) {
2165
0
            int byte = bytestream2_get_byteu(&gb);
2166
0
            for (int i = 0; i < 2; i++)
2167
0
                coeff[channel][i] = ea_adpcm_table[(byte >> 4) + 4*i];
2168
0
            shift[channel] = 20 - (byte & 0x0F);
2169
0
        }
2170
0
        for (int count1 = 0; count1 < nb_samples / 2; count1++) {
2171
0
            int byte[2];
2172
2173
0
            byte[0] = bytestream2_get_byteu(&gb);
2174
0
            if (st) byte[1] = bytestream2_get_byteu(&gb);
2175
0
            for (int i = 4; i >= 0; i-=4) { /* Pairwise samples LL RR (st) or LL LL (mono) */
2176
0
                for (int channel = 0; channel < channels; channel++) {
2177
0
                    int sample = sign_extend(byte[channel] >> i, 4) * (1 << shift[channel]);
2178
0
                    sample = (sample +
2179
0
                             c->status[channel].sample1 * coeff[channel][0] +
2180
0
                             c->status[channel].sample2 * coeff[channel][1] + 0x80) >> 8;
2181
0
                    c->status[channel].sample2 = c->status[channel].sample1;
2182
0
                    c->status[channel].sample1 = av_clip_int16(sample);
2183
0
                    *samples++ = c->status[channel].sample1;
2184
0
                }
2185
0
            }
2186
0
        }
2187
0
        bytestream2_seek(&gb, 0, SEEK_END);
2188
        ) /* End of CASE */
2189
0
#if CONFIG_ADPCM_EA_R1_DECODER || CONFIG_ADPCM_EA_R2_DECODER || CONFIG_ADPCM_EA_R3_DECODER
2190
130k
    case AV_CODEC_ID_ADPCM_EA_R1:
2191
262k
    case AV_CODEC_ID_ADPCM_EA_R2:
2192
391k
    case AV_CODEC_ID_ADPCM_EA_R3: {
2193
        /* channel numbering
2194
           2chan: 0=fl, 1=fr
2195
           4chan: 0=fl, 1=rl, 2=fr, 3=rr
2196
           6chan: 0=fl, 1=c,  2=fr, 3=rl,  4=rr, 5=sub */
2197
391k
        const int big_endian = avctx->codec->id == AV_CODEC_ID_ADPCM_EA_R3;
2198
391k
        int previous_sample, current_sample, next_sample;
2199
391k
        int coeff1, coeff2;
2200
391k
        int shift;
2201
391k
        uint16_t *samplesC;
2202
391k
        int count = 0;
2203
391k
        int offsets[6];
2204
2205
789k
        for (unsigned channel = 0; channel < channels; channel++)
2206
397k
            offsets[channel] = (big_endian ? bytestream2_get_be32(&gb) :
2207
397k
                                             bytestream2_get_le32(&gb)) +
2208
397k
                               (channels + 1) * 4;
2209
2210
789k
        for (unsigned channel = 0; channel < channels; channel++) {
2211
397k
            int count1;
2212
2213
397k
            bytestream2_seek(&gb, offsets[channel], SEEK_SET);
2214
397k
            samplesC = samples_p[channel];
2215
2216
397k
            if (avctx->codec->id == AV_CODEC_ID_ADPCM_EA_R1) {
2217
132k
                current_sample  = sign_extend(bytestream2_get_le16(&gb), 16);
2218
132k
                previous_sample = sign_extend(bytestream2_get_le16(&gb), 16);
2219
265k
            } else {
2220
265k
                current_sample  = c->status[channel].predictor;
2221
265k
                previous_sample = c->status[channel].prev_sample;
2222
265k
            }
2223
2224
2.97M
            for (count1 = 0; count1 < nb_samples / 28; count1++) {
2225
2.57M
                int byte = bytestream2_get_byte(&gb);
2226
2.57M
                if (byte == 0xEE) {  /* only seen in R2 and R3 */
2227
110k
                    current_sample  = sign_extend(bytestream2_get_be16(&gb), 16);
2228
110k
                    previous_sample = sign_extend(bytestream2_get_be16(&gb), 16);
2229
2230
3.19M
                    for (int count2 = 0; count2 < 28; count2++)
2231
3.08M
                        *samplesC++ = sign_extend(bytestream2_get_be16(&gb), 16);
2232
2.46M
                } else {
2233
2.46M
                    coeff1 = ea_adpcm_table[ byte >> 4     ];
2234
2.46M
                    coeff2 = ea_adpcm_table[(byte >> 4) + 4];
2235
2.46M
                    shift = 20 - (byte & 0x0F);
2236
2237
71.5M
                    for (int count2 = 0; count2 < 28; count2++) {
2238
69.0M
                        if (count2 & 1)
2239
34.5M
                            next_sample = (unsigned)sign_extend(byte,    4) << shift;
2240
34.5M
                        else {
2241
34.5M
                            byte = bytestream2_get_byte(&gb);
2242
34.5M
                            next_sample = (unsigned)sign_extend(byte >> 4, 4) << shift;
2243
34.5M
                        }
2244
2245
69.0M
                        next_sample += (current_sample  * coeff1) +
2246
69.0M
                                       (previous_sample * coeff2);
2247
69.0M
                        next_sample = av_clip_int16(next_sample >> 8);
2248
2249
69.0M
                        previous_sample = current_sample;
2250
69.0M
                        current_sample  = next_sample;
2251
69.0M
                        *samplesC++ = current_sample;
2252
69.0M
                    }
2253
2.46M
                }
2254
2.57M
            }
2255
397k
            if (!count) {
2256
391k
                count = count1;
2257
391k
            } else if (count != count1) {
2258
0
                av_log(avctx, AV_LOG_WARNING, "per-channel sample count mismatch\n");
2259
0
                count = FFMAX(count, count1);
2260
0
            }
2261
2262
397k
            if (avctx->codec->id != AV_CODEC_ID_ADPCM_EA_R1) {
2263
265k
                c->status[channel].predictor   = current_sample;
2264
265k
                c->status[channel].prev_sample = previous_sample;
2265
265k
            }
2266
397k
        }
2267
2268
391k
        frame->nb_samples = count * 28;
2269
391k
        bytestream2_seek(&gb, 0, SEEK_END);
2270
391k
        break;
2271
262k
    }
2272
0
#endif /* CONFIG_ADPCM_EA_Rx_DECODER */
2273
297k
    CASE(ADPCM_EA_XAS,
2274
0
        for (int channel=0; channel < channels; channel++) {
2275
0
            int coeff[2][4], shift[4];
2276
0
            int16_t *s = samples_p[channel];
2277
0
            for (int n = 0; n < 4; n++, s += 32) {
2278
0
                int val = sign_extend(bytestream2_get_le16u(&gb), 16);
2279
0
                for (int i = 0; i < 2; i++)
2280
0
                    coeff[i][n] = ea_adpcm_table[(val&0x0F)+4*i];
2281
0
                s[0] = val & ~0x0F;
2282
2283
0
                val = sign_extend(bytestream2_get_le16u(&gb), 16);
2284
0
                shift[n] = 20 - (val & 0x0F);
2285
0
                s[1] = val & ~0x0F;
2286
0
            }
2287
2288
0
            for (int m = 2; m < 32; m += 2) {
2289
0
                s = &samples_p[channel][m];
2290
0
                for (int n = 0; n < 4; n++, s += 32) {
2291
0
                    int level, pred;
2292
0
                    int byte = bytestream2_get_byteu(&gb);
2293
2294
0
                    level = sign_extend(byte >> 4, 4) * (1 << shift[n]);
2295
0
                    pred  = s[-1] * coeff[0][n] + s[-2] * coeff[1][n];
2296
0
                    s[0]  = av_clip_int16((level + pred + 0x80) >> 8);
2297
2298
0
                    level = sign_extend(byte, 4) * (1 << shift[n]);
2299
0
                    pred  = s[0] * coeff[0][n] + s[-1] * coeff[1][n];
2300
0
                    s[1]  = av_clip_int16((level + pred + 0x80) >> 8);
2301
0
                }
2302
0
            }
2303
0
        }
2304
        ) /* End of CASE */
2305
132k
    CASE(ADPCM_IMA_ACORN,
2306
0
        for (int channel = 0; channel < channels; channel++) {
2307
0
            ADPCMChannelStatus *cs = &c->status[channel];
2308
0
            cs->predictor  = sign_extend(bytestream2_get_le16u(&gb), 16);
2309
0
            cs->step_index = bytestream2_get_le16u(&gb) & 0xFF;
2310
0
            if (cs->step_index > 88u){
2311
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n",
2312
0
                       channel, cs->step_index);
2313
0
                return AVERROR_INVALIDDATA;
2314
0
            }
2315
0
        }
2316
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
2317
0
            int byte = bytestream2_get_byteu(&gb);
2318
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0],  byte & 0x0F, 3);
2319
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[st], byte >> 4,   3);
2320
0
        }
2321
        ) /* End of CASE */
2322
356k
    CASE(ADPCM_IMA_AMV,
2323
0
        av_assert0(channels == 1);
2324
2325
        /*
2326
         * Header format:
2327
         *   int16_t  predictor;
2328
         *   uint8_t  step_index;
2329
         *   uint8_t  reserved;
2330
         *   uint32_t frame_size;
2331
         *
2332
         * Some implementations have step_index as 16-bits, but others
2333
         * only use the lower 8 and store garbage in the upper 8.
2334
         */
2335
0
        c->status[0].predictor = sign_extend(bytestream2_get_le16u(&gb), 16);
2336
0
        c->status[0].step_index = bytestream2_get_byteu(&gb);
2337
0
        bytestream2_skipu(&gb, 5);
2338
0
        if (c->status[0].step_index > 88u) {
2339
0
            av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i\n",
2340
0
                   c->status[0].step_index);
2341
0
            return AVERROR_INVALIDDATA;
2342
0
        }
2343
2344
0
        for (int n = nb_samples >> 1; n > 0; n--) {
2345
0
            int v = bytestream2_get_byteu(&gb);
2346
2347
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0], v >> 4, 3);
2348
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0], v & 0xf, 3);
2349
0
        }
2350
2351
0
        if (nb_samples & 1) {
2352
0
            int v = bytestream2_get_byteu(&gb);
2353
0
            *samples++ = adpcm_ima_expand_nibble(&c->status[0], v >> 4, 3);
2354
2355
0
            if (v & 0x0F) {
2356
                /* Holds true on all the http://samples.mplayerhq.hu/amv samples. */
2357
0
                av_log(avctx, AV_LOG_WARNING, "Last nibble set on packet with odd sample count.\n");
2358
0
                av_log(avctx, AV_LOG_WARNING, "Sample will be skipped.\n");
2359
0
            }
2360
0
        }
2361
        ) /* End of CASE */
2362
204k
    CASE(ADPCM_IMA_PDA,
2363
0
        for (int i = 0; i < channels; i++) {
2364
0
            c->status[i].predictor = sign_extend(bytestream2_get_le16u(&gb), 16);
2365
0
            c->status[i].step_index = bytestream2_get_byteu(&gb);
2366
0
            bytestream2_skipu(&gb, 1);
2367
0
            if (c->status[i].step_index > 88u) {
2368
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i\n",
2369
0
                       c->status[i].step_index);
2370
0
                return AVERROR_INVALIDDATA;
2371
0
            }
2372
0
        }
2373
2374
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
2375
0
            int v = bytestream2_get_byteu(&gb);
2376
2377
0
            *samples++ = ff_adpcm_ima_qt_expand_nibble(&c->status[0 ], v >> 4 );
2378
0
            *samples++ = ff_adpcm_ima_qt_expand_nibble(&c->status[st], v & 0xf);
2379
0
        }
2380
        ) /* End of CASE */
2381
130k
    CASE(ADPCM_IMA_SMJPEG,
2382
0
        for (int i = 0; i < channels; i++) {
2383
0
            c->status[i].predictor = sign_extend(bytestream2_get_be16u(&gb), 16);
2384
0
            c->status[i].step_index = bytestream2_get_byteu(&gb);
2385
0
            bytestream2_skipu(&gb, 1);
2386
0
            if (c->status[i].step_index > 88u) {
2387
0
                av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i\n",
2388
0
                       c->status[i].step_index);
2389
0
                return AVERROR_INVALIDDATA;
2390
0
            }
2391
0
        }
2392
2393
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
2394
0
            int v = bytestream2_get_byteu(&gb);
2395
2396
0
            *samples++ = ff_adpcm_ima_qt_expand_nibble(&c->status[0 ], v >> 4 );
2397
0
            *samples++ = ff_adpcm_ima_qt_expand_nibble(&c->status[st], v & 0xf);
2398
0
        }
2399
        ) /* End of CASE */
2400
167k
    CASE(ADPCM_CT,
2401
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
2402
0
            int v = bytestream2_get_byteu(&gb);
2403
0
            *samples++ = adpcm_ct_expand_nibble(&c->status[0 ], v >> 4  );
2404
0
            *samples++ = adpcm_ct_expand_nibble(&c->status[st], v & 0x0F);
2405
0
        }
2406
        ) /* End of CASE */
2407
0
#if CONFIG_ADPCM_SBPRO_2_DECODER || CONFIG_ADPCM_SBPRO_3_DECODER || \
2408
0
    CONFIG_ADPCM_SBPRO_4_DECODER
2409
196k
    case AV_CODEC_ID_ADPCM_SBPRO_4:
2410
451k
    case AV_CODEC_ID_ADPCM_SBPRO_3:
2411
611k
    case AV_CODEC_ID_ADPCM_SBPRO_2:
2412
611k
        if (!c->status[0].step_index) {
2413
            /* the first byte is a raw sample */
2414
159k
            *samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2415
159k
            if (st)
2416
90.2k
                *samples++ = 128 * (bytestream2_get_byteu(&gb) - 0x80);
2417
159k
            c->status[0].step_index = 1;
2418
159k
            nb_samples--;
2419
159k
        }
2420
611k
        if (avctx->codec->id == AV_CODEC_ID_ADPCM_SBPRO_4) {
2421
16.0M
            for (int n = nb_samples >> (1 - st); n > 0; n--) {
2422
15.8M
                int byte = bytestream2_get_byteu(&gb);
2423
15.8M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
2424
15.8M
                                                       byte >> 4,   4, 0);
2425
15.8M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[st],
2426
15.8M
                                                       byte & 0x0F, 4, 0);
2427
15.8M
            }
2428
415k
        } else if (avctx->codec->id == AV_CODEC_ID_ADPCM_SBPRO_3) {
2429
19.7M
            for (int n = (nb_samples<<st) / 3; n > 0; n--) {
2430
19.5M
                int byte = bytestream2_get_byteu(&gb);
2431
19.5M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
2432
19.5M
                                                        byte >> 5        , 3, 0);
2433
19.5M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
2434
19.5M
                                                       (byte >> 2) & 0x07, 3, 0);
2435
19.5M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
2436
19.5M
                                                        byte & 0x03,       2, 0);
2437
19.5M
            }
2438
254k
        } else {
2439
16.1M
            for (int n = nb_samples >> (2 - st); n > 0; n--) {
2440
16.0M
                int byte = bytestream2_get_byteu(&gb);
2441
16.0M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
2442
16.0M
                                                        byte >> 6        , 2, 2);
2443
16.0M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[st],
2444
16.0M
                                                       (byte >> 4) & 0x03, 2, 2);
2445
16.0M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
2446
16.0M
                                                       (byte >> 2) & 0x03, 2, 2);
2447
16.0M
                *samples++ = adpcm_sbpro_expand_nibble(&c->status[st],
2448
16.0M
                                                        byte & 0x03,       2, 2);
2449
16.0M
            }
2450
160k
        }
2451
611k
        break;
2452
0
#endif /* CONFIG_ADPCM_SBPRO_x_DECODER */
2453
451k
    CASE(ADPCM_SWF,
2454
0
        adpcm_swf_decode(avctx, buf, buf_size, samples);
2455
0
        bytestream2_seek(&gb, 0, SEEK_END);
2456
        ) /* End of CASE */
2457
451k
    CASE(ADPCM_YAMAHA,
2458
0
        for (int n = nb_samples >> (1 - st); n > 0; n--) {
2459
0
            int v = bytestream2_get_byteu(&gb);
2460
0
            *samples++ = adpcm_yamaha_expand_nibble(&c->status[0 ], v & 0x0F);
2461
0
            *samples++ = adpcm_yamaha_expand_nibble(&c->status[st], v >> 4  );
2462
0
        }
2463
        ) /* End of CASE */
2464
451k
    CASE(ADPCM_AICA,
2465
0
        for (int channel = 0; channel < channels; channel++) {
2466
0
            samples = samples_p[channel];
2467
0
            for (int n = nb_samples >> 1; n > 0; n--) {
2468
0
                int v = bytestream2_get_byteu(&gb);
2469
0
                *samples++ = adpcm_yamaha_expand_nibble(&c->status[channel], v & 0x0F);
2470
0
                *samples++ = adpcm_yamaha_expand_nibble(&c->status[channel], v >> 4  );
2471
0
            }
2472
0
        }
2473
        ) /* End of CASE */
2474
451k
    CASE(ADPCM_AFC,
2475
0
        int samples_per_block;
2476
0
        int blocks;
2477
2478
0
        if (avctx->extradata && avctx->extradata_size == 1 && avctx->extradata[0]) {
2479
0
            samples_per_block = avctx->extradata[0] / 16;
2480
0
            blocks = nb_samples / avctx->extradata[0];
2481
0
        } else {
2482
0
            samples_per_block = nb_samples / 16;
2483
0
            blocks = 1;
2484
0
        }
2485
2486
0
        for (int m = 0; m < blocks; m++) {
2487
0
            for (int channel = 0; channel < channels; channel++) {
2488
0
                int prev1 = c->status[channel].sample1;
2489
0
                int prev2 = c->status[channel].sample2;
2490
2491
0
                samples = samples_p[channel] + m * 16;
2492
                /* Read in every sample for this channel.  */
2493
0
                for (int i = 0; i < samples_per_block; i++) {
2494
0
                    int byte = bytestream2_get_byteu(&gb);
2495
0
                    int scale = 1 << (byte >> 4);
2496
0
                    int index = byte & 0xf;
2497
0
                    int factor1 = afc_coeffs[0][index];
2498
0
                    int factor2 = afc_coeffs[1][index];
2499
2500
                    /* Decode 16 samples.  */
2501
0
                    for (int n = 0; n < 16; n++) {
2502
0
                        int32_t sampledat;
2503
2504
0
                        if (n & 1) {
2505
0
                            sampledat = sign_extend(byte, 4);
2506
0
                        } else {
2507
0
                            byte = bytestream2_get_byteu(&gb);
2508
0
                            sampledat = sign_extend(byte >> 4, 4);
2509
0
                        }
2510
2511
0
                        sampledat = ((prev1 * factor1 + prev2 * factor2) >> 11) +
2512
0
                                    sampledat * scale;
2513
0
                        *samples = av_clip_int16(sampledat);
2514
0
                        prev2 = prev1;
2515
0
                        prev1 = *samples++;
2516
0
                    }
2517
0
                }
2518
2519
0
                c->status[channel].sample1 = prev1;
2520
0
                c->status[channel].sample2 = prev2;
2521
0
            }
2522
0
        }
2523
0
        bytestream2_seek(&gb, 0, SEEK_END);
2524
        ) /* End of CASE */
2525
0
#if CONFIG_ADPCM_THP_DECODER || CONFIG_ADPCM_THP_LE_DECODER
2526
295k
    case AV_CODEC_ID_ADPCM_THP:
2527
538k
    case AV_CODEC_ID_ADPCM_THP_LE:
2528
538k
    {
2529
538k
        int table[14][16];
2530
2531
538k
#define THP_GET16(g) \
2532
13.4M
    sign_extend( \
2533
13.4M
        avctx->codec->id == AV_CODEC_ID_ADPCM_THP_LE ? \
2534
13.4M
        bytestream2_get_le16u(&(g)) : \
2535
13.4M
        bytestream2_get_be16u(&(g)), 16)
2536
2537
538k
        if (avctx->extradata) {
2538
534k
            GetByteContext tb;
2539
534k
            if (avctx->extradata_size < 32 * channels) {
2540
16.7k
                av_log(avctx, AV_LOG_ERROR, "Missing coeff table\n");
2541
16.7k
                return AVERROR_INVALIDDATA;
2542
16.7k
            }
2543
2544
517k
            bytestream2_init(&tb, avctx->extradata, avctx->extradata_size);
2545
1.32M
            for (int i = 0; i < channels; i++)
2546
13.6M
                for (int n = 0; n < 16; n++)
2547
12.8M
                    table[i][n] = THP_GET16(tb);
2548
517k
        } else {
2549
9.57k
            for (int i = 0; i < channels; i++)
2550
95.9k
                for (int n = 0; n < 16; n++)
2551
90.3k
                    table[i][n] = THP_GET16(gb);
2552
2553
3.92k
            if (!c->has_status) {
2554
                /* Initialize the previous sample.  */
2555
3.38k
                for (int i = 0; i < channels; i++) {
2556
2.24k
                    c->status[i].sample1 = THP_GET16(gb);
2557
2.24k
                    c->status[i].sample2 = THP_GET16(gb);
2558
2.24k
                }
2559
1.14k
                c->has_status = 1;
2560
2.78k
            } else {
2561
2.78k
                bytestream2_skip(&gb, channels * 4);
2562
2.78k
            }
2563
3.92k
        }
2564
2565
1.33M
        for (int ch = 0; ch < channels; ch++) {
2566
810k
            samples = samples_p[ch];
2567
2568
            /* Read in every sample for this channel.  */
2569
5.01M
            for (int i = 0; i < (nb_samples + 13) / 14; i++) {
2570
4.20M
                int byte = bytestream2_get_byteu(&gb);
2571
4.20M
                int index = (byte >> 4) & 7;
2572
4.20M
                unsigned int exp = byte & 0x0F;
2573
4.20M
                int64_t factor1 = table[ch][index * 2];
2574
4.20M
                int64_t factor2 = table[ch][index * 2 + 1];
2575
2576
                /* Decode 14 samples.  */
2577
53.2M
                for (int n = 0; n < 14 && (i * 14 + n < nb_samples); n++) {
2578
49.0M
                    int32_t sampledat;
2579
2580
49.0M
                    if (n & 1) {
2581
24.2M
                        sampledat = sign_extend(byte, 4);
2582
24.8M
                    } else {
2583
24.8M
                        byte = bytestream2_get_byteu(&gb);
2584
24.8M
                        sampledat = sign_extend(byte >> 4, 4);
2585
24.8M
                    }
2586
2587
49.0M
                    sampledat = ((c->status[ch].sample1 * factor1
2588
49.0M
                                + c->status[ch].sample2 * factor2) >> 11) + sampledat * (1 << exp);
2589
49.0M
                    *samples = av_clip_int16(sampledat);
2590
49.0M
                    c->status[ch].sample2 = c->status[ch].sample1;
2591
49.0M
                    c->status[ch].sample1 = *samples++;
2592
49.0M
                }
2593
4.20M
            }
2594
810k
        }
2595
521k
        break;
2596
538k
    }
2597
0
#endif /* CONFIG_ADPCM_THP(_LE)_DECODER */
2598
302k
    CASE(ADPCM_DTK,
2599
302k
        for (int channel = 0; channel < channels; channel++) {
2600
302k
            samples = samples_p[channel];
2601
2602
            /* Read in every sample for this channel.  */
2603
302k
            for (int i = 0; i < nb_samples / 28; i++) {
2604
302k
                int byte, header;
2605
302k
                if (channel)
2606
302k
                    bytestream2_skipu(&gb, 1);
2607
302k
                header = bytestream2_get_byteu(&gb);
2608
302k
                bytestream2_skipu(&gb, 3 - channel);
2609
2610
                /* Decode 28 samples.  */
2611
302k
                for (int n = 0; n < 28; n++) {
2612
302k
                    int32_t sampledat, prev;
2613
2614
302k
                    switch (header >> 4) {
2615
302k
                    case 1:
2616
302k
                        prev = (c->status[channel].sample1 * 0x3c);
2617
302k
                        break;
2618
302k
                    case 2:
2619
302k
                        prev = (c->status[channel].sample1 * 0x73) - (c->status[channel].sample2 * 0x34);
2620
302k
                        break;
2621
302k
                    case 3:
2622
302k
                        prev = (c->status[channel].sample1 * 0x62) - (c->status[channel].sample2 * 0x37);
2623
302k
                        break;
2624
302k
                    default:
2625
302k
                        prev = 0;
2626
302k
                    }
2627
2628
302k
                    prev = av_clip_intp2((prev + 0x20) >> 6, 21);
2629
2630
302k
                    byte = bytestream2_get_byteu(&gb);
2631
302k
                    if (!channel)
2632
302k
                        sampledat = sign_extend(byte, 4);
2633
302k
                    else
2634
302k
                        sampledat = sign_extend(byte >> 4, 4);
2635
2636
302k
                    sampledat = ((sampledat * (1 << 12)) >> (header & 0xf)) * (1 << 6) + prev;
2637
302k
                    *samples++ = av_clip_int16(sampledat >> 6);
2638
302k
                    c->status[channel].sample2 = c->status[channel].sample1;
2639
302k
                    c->status[channel].sample1 = sampledat;
2640
302k
                }
2641
302k
            }
2642
302k
            if (!channel)
2643
302k
                bytestream2_seek(&gb, 0, SEEK_SET);
2644
302k
        }
2645
        ) /* End of CASE */
2646
302k
    CASE(ADPCM_N64,
2647
0
        ADPCMChannelStatus *cs = &c->status[0];
2648
0
        int coefs[8*2*8] = { 0 };
2649
2650
0
        if (avctx->extradata) {
2651
0
            int version, order, entries;
2652
0
            GetByteContext cb;
2653
2654
0
            bytestream2_init(&cb, avctx->extradata, avctx->extradata_size);
2655
2656
0
            version = bytestream2_get_be16(&cb);
2657
0
            order = bytestream2_get_be16(&cb);
2658
0
            entries = bytestream2_get_be16(&cb);
2659
0
            if (version != 1 || order != 2 || entries > 8)
2660
0
                return AVERROR_INVALIDDATA;
2661
2662
0
            for (int n = 0; n < order * entries * 8; n++)
2663
0
                coefs[n] = sign_extend(bytestream2_get_be16(&cb), 16);
2664
0
        }
2665
2666
0
        for (int block = 0; block < avpkt->size / 9; block++) {
2667
0
            int scale, index, codes[16];
2668
0
            int16_t hist[8] = { 0 };
2669
0
            const int order = 2;
2670
0
            int16_t out[16];
2671
2672
0
            hist[6] = cs->sample2;
2673
0
            hist[7] = cs->sample1;
2674
2675
0
            samples = samples_p[0] + block * 16;
2676
2677
0
            scale = (buf[0] >> 4) & 0xF;
2678
0
            index = (buf[0] >> 0) & 0xF;
2679
0
            scale = 1 << scale;
2680
0
            index = FFMIN(index, 8);
2681
2682
0
            for (int i = 0, j = 0; i < 16; i += 2, j++) {
2683
0
                int n0 = (buf[j+1] >> 4) & 0xF;
2684
0
                int n1 = (buf[j+1] >> 0) & 0xF;
2685
2686
0
                if (n0 & 8)
2687
0
                    n0 = n0 - 16;
2688
0
                if (n1 & 8)
2689
0
                    n1 = n1 - 16;
2690
2691
0
                codes[i+0] = n0 * scale;
2692
0
                codes[i+1] = n1 * scale;
2693
0
            }
2694
2695
0
            for (int j = 0; j < 2; j++) {
2696
0
                int *sf_codes = &codes[j*8];
2697
0
                int16_t *sf_out = &out[j*8];
2698
2699
0
                for (int i = 0; i < 8; i++) {
2700
0
                    int sample;
2701
0
                    unsigned delta = 0;
2702
2703
0
                    for (int o = 0; o < order; o++)
2704
0
                        delta += coefs[o*8 + i] * hist[(8 - order) + o];
2705
2706
0
                    for (int k = i-1; k > -1; k--) {
2707
0
                        for (int o = 1; o < order; o++)
2708
0
                            delta += sf_codes[(i-1) - k] * (unsigned)coefs[(o*8) + k];
2709
0
                    }
2710
2711
0
                    sample = sf_codes[i] * 2048;
2712
0
                    sample = (int)(sample + delta) / 2048;
2713
0
                    sample = av_clip_int16(sample);
2714
0
                    sf_out[i] = sample;
2715
0
                }
2716
2717
0
                for (int i = 8 - order; i < 8; i++)
2718
0
                    hist[i] = sf_out[i];
2719
0
            }
2720
2721
0
            memcpy(samples, out, sizeof(out));
2722
2723
0
            cs->sample2 = hist[6];
2724
0
            cs->sample1 = hist[7];
2725
2726
0
            buf += 9;
2727
0
        }
2728
0
        bytestream2_seek(&gb, 0, SEEK_END);
2729
        ) /* End of CASE */
2730
253k
    CASE(ADPCM_PSX,
2731
251k
        for (int block = 0; block < avpkt->size / FFMAX(avctx->block_align, 16 * channels); block++) {
2732
251k
            int nb_samples_per_block = 28 * FFMAX(avctx->block_align, 16 * channels) / (16 * channels);
2733
251k
            for (int channel = 0; channel < channels; channel++) {
2734
251k
                samples = samples_p[channel] + block * nb_samples_per_block;
2735
251k
                av_assert0((block + 1) * nb_samples_per_block <= nb_samples);
2736
2737
                /* Read in every sample for this channel.  */
2738
251k
                for (int i = 0; i < nb_samples_per_block / 28; i++) {
2739
251k
                    int filter, shift, flag, byte;
2740
2741
251k
                    filter = bytestream2_get_byteu(&gb);
2742
251k
                    shift  = filter & 0xf;
2743
251k
                    filter = filter >> 4;
2744
251k
                    if (filter >= FF_ARRAY_ELEMS(xa_adpcm_table))
2745
251k
                        return AVERROR_INVALIDDATA;
2746
251k
                    flag   = bytestream2_get_byteu(&gb) & 0x7;
2747
2748
                    /* Decode 28 samples.  */
2749
251k
                    for (int n = 0; n < 28; n++) {
2750
251k
                        int sample = 0, scale;
2751
2752
251k
                        if (n & 1) {
2753
251k
                            scale = sign_extend(byte >> 4, 4);
2754
251k
                        } else {
2755
251k
                            byte  = bytestream2_get_byteu(&gb);
2756
251k
                            scale = sign_extend(byte, 4);
2757
251k
                        }
2758
2759
251k
                        if (flag < 0x07) {
2760
251k
                            scale  = scale * (1 << 12);
2761
251k
                            sample = (int)((scale >> shift) + (c->status[channel].sample1 * xa_adpcm_table[filter][0] + c->status[channel].sample2 * xa_adpcm_table[filter][1]) / 64);
2762
251k
                        }
2763
251k
                        *samples++ = av_clip_int16(sample);
2764
251k
                        c->status[channel].sample2 = c->status[channel].sample1;
2765
251k
                        c->status[channel].sample1 = sample;
2766
251k
                    }
2767
251k
                }
2768
251k
            }
2769
251k
        }
2770
        ) /* End of CASE */
2771
269k
    CASE(ADPCM_PSXC,
2772
232k
        for (int block = 0; block < avpkt->size / avctx->block_align; block++) {
2773
232k
            int nb_samples_per_block = ((avctx->block_align - 1) / channels) * 2;
2774
232k
            for (int channel = 0; channel < channels; channel++) {
2775
232k
                int filter, shift, byte;
2776
2777
232k
                samples = samples_p[channel] + block * nb_samples_per_block;
2778
232k
                av_assert0((block + 1) * nb_samples_per_block <= nb_samples);
2779
2780
232k
                filter = bytestream2_get_byteu(&gb);
2781
232k
                shift  = filter & 0xf;
2782
232k
                filter = filter >> 4;
2783
232k
                if (filter >= FF_ARRAY_ELEMS(xa_adpcm_table))
2784
232k
                    return AVERROR_INVALIDDATA;
2785
2786
232k
                for (int n = 0; n < nb_samples_per_block; n++) {
2787
232k
                    int sample = 0, scale;
2788
2789
232k
                    if (n & 1) {
2790
232k
                        scale = sign_extend(byte >> 4, 4);
2791
232k
                    } else {
2792
232k
                        byte  = bytestream2_get_byteu(&gb);
2793
232k
                        scale = sign_extend(byte & 0xF, 4);
2794
232k
                    }
2795
2796
232k
                    scale  = scale * (1 << 12);
2797
232k
                    sample = (int)((scale >> shift) + (c->status[channel].sample1 * xa_adpcm_table[filter][0] + c->status[channel].sample2 * xa_adpcm_table[filter][1]) / 64);
2798
232k
                    *samples++ = av_clip_int16(sample);
2799
232k
                    c->status[channel].sample2 = c->status[channel].sample1;
2800
232k
                    c->status[channel].sample1 = sample;
2801
232k
                }
2802
232k
            }
2803
232k
        }
2804
        ) /* End of CASE */
2805
549k
    CASE(ADPCM_SANYO,
2806
0
        int (*expand)(ADPCMChannelStatus *c, int bits);
2807
0
        GetBitContext g;
2808
2809
0
        switch(avctx->bits_per_coded_sample) {
2810
0
        case 3: expand = adpcm_sanyo_expand3; break;
2811
0
        case 4: expand = adpcm_sanyo_expand4; break;
2812
0
        case 5: expand = adpcm_sanyo_expand5; break;
2813
0
        }
2814
2815
0
        for (int ch = 0; ch < channels; ch++) {
2816
0
            c->status[ch].predictor = sign_extend(bytestream2_get_le16(&gb), 16);
2817
0
            c->status[ch].step = sign_extend(bytestream2_get_le16(&gb), 16);
2818
0
        }
2819
2820
0
        init_get_bits8(&g, gb.buffer, bytestream2_get_bytes_left(&gb));
2821
0
        for (int i = 0; i < nb_samples; i++)
2822
0
            for (int ch = 0; ch < channels; ch++)
2823
0
                samples_p[ch][i] = expand(&c->status[ch], get_bits_le(&g, avctx->bits_per_coded_sample));
2824
2825
0
        align_get_bits(&g);
2826
0
        bytestream2_skip(&gb, get_bits_count(&g) / 8);
2827
        ) /* End of CASE */
2828
549k
    CASE(ADPCM_ARGO,
2829
        /*
2830
         * The format of each block:
2831
         *   uint8_t left_control;
2832
         *   uint4_t left_samples[nb_samples];
2833
         *   ---- and if stereo ----
2834
         *   uint8_t right_control;
2835
         *   uint4_t right_samples[nb_samples];
2836
         *
2837
         * Format of the control byte:
2838
         * MSB [SSSSRDRR] LSB
2839
         *   S = (Shift Amount - 2)
2840
         *   D = Decoder flag.
2841
         *   R = Reserved
2842
         *
2843
         * Each block relies on the previous two samples of each channel.
2844
         * They should be 0 initially.
2845
         */
2846
0
        for (int block = 0; block < avpkt->size / avctx->block_align; block++) {
2847
0
            for (int channel = 0; channel < avctx->ch_layout.nb_channels; channel++) {
2848
0
                ADPCMChannelStatus *cs = c->status + channel;
2849
0
                int control, shift;
2850
2851
0
                samples = samples_p[channel] + block * 32;
2852
2853
                /* Get the control byte and decode the samples, 2 at a time. */
2854
0
                control = bytestream2_get_byteu(&gb);
2855
0
                shift = (control >> 4) + 2;
2856
2857
0
                for (int n = 0; n < 16; n++) {
2858
0
                    int sample = bytestream2_get_byteu(&gb);
2859
0
                    *samples++ = ff_adpcm_argo_expand_nibble(cs, sample >> 4, shift, control & 0x04);
2860
0
                    *samples++ = ff_adpcm_argo_expand_nibble(cs, sample >> 0, shift, control & 0x04);
2861
0
                }
2862
0
            }
2863
0
        }
2864
        ) /* End of CASE */
2865
549k
    CASE(ADPCM_CIRCUS,
2866
0
        for (int n = 0; n < nb_samples; n++) {
2867
0
            for (int ch = 0; ch < channels; ch++) {
2868
0
                int v = bytestream2_get_byteu(&gb);
2869
0
                *samples++ = adpcm_circus_expand_nibble(&c->status[ch], v);
2870
0
            }
2871
0
        }
2872
        ) /* End of CASE */
2873
549k
    CASE(ADPCM_ZORK,
2874
0
        for (int n = 0; n < nb_samples * channels; n++) {
2875
0
            int v = bytestream2_get_byteu(&gb);
2876
0
            *samples++ = adpcm_zork_expand_nibble(&c->status[n % channels], v);
2877
0
        }
2878
        ) /* End of CASE */
2879
549k
    CASE(ADPCM_IMA_MTF,
2880
0
        for (int n = nb_samples / 2; n > 0; n--) {
2881
0
            for (int channel = 0; channel < channels; channel++) {
2882
0
                int v = bytestream2_get_byteu(&gb);
2883
0
                *samples++  = adpcm_ima_mtf_expand_nibble(&c->status[channel], v >> 4);
2884
0
                samples[st] = adpcm_ima_mtf_expand_nibble(&c->status[channel], v & 0x0F);
2885
0
            }
2886
0
            samples += channels;
2887
0
        }
2888
        ) /* End of CASE */
2889
0
    default:
2890
0
        av_unreachable("There are cases for all codec ids using adpcm_decode_frame");
2891
12.0M
    }
2892
2893
11.8M
    if (avpkt->size && bytestream2_tell(&gb) == 0) {
2894
553k
        av_log(avctx, AV_LOG_ERROR, "Nothing consumed\n");
2895
553k
        return AVERROR_INVALIDDATA;
2896
553k
    }
2897
2898
11.3M
    *got_frame_ptr = 1;
2899
2900
11.3M
    if (avpkt->size < bytestream2_tell(&gb)) {
2901
705k
        av_log(avctx, AV_LOG_ERROR, "Overread of %d < %d\n", avpkt->size, bytestream2_tell(&gb));
2902
705k
        return avpkt->size;
2903
705k
    }
2904
2905
10.6M
    return bytestream2_tell(&gb);
2906
11.3M
}
2907
2908
static av_cold void adpcm_flush(AVCodecContext *avctx)
2909
6.13M
{
2910
6.13M
    ADPCMDecodeContext *c = avctx->priv_data;
2911
2912
    /* Just nuke the entire state and re-init. */
2913
6.13M
    memset(c, 0, sizeof(ADPCMDecodeContext));
2914
2915
6.13M
    switch(avctx->codec_id) {
2916
28.9k
    case AV_CODEC_ID_ADPCM_CT:
2917
28.9k
        c->status[0].step = c->status[1].step = 511;
2918
28.9k
        break;
2919
2920
38.9k
    case AV_CODEC_ID_ADPCM_IMA_APC:
2921
38.9k
        if (avctx->extradata && avctx->extradata_size >= 8) {
2922
12.8k
            c->status[0].predictor = av_clip_intp2(AV_RL32(avctx->extradata    ), 18);
2923
12.8k
            c->status[1].predictor = av_clip_intp2(AV_RL32(avctx->extradata + 4), 18);
2924
12.8k
        }
2925
38.9k
        break;
2926
2927
76.7k
    case AV_CODEC_ID_ADPCM_IMA_APM:
2928
76.7k
        if (avctx->extradata && avctx->extradata_size >= 28) {
2929
25.0k
            c->status[0].predictor  = av_clip_intp2(AV_RL32(avctx->extradata + 16), 18);
2930
25.0k
            c->status[0].step_index = av_clip(AV_RL32(avctx->extradata + 20), 0, 88);
2931
25.0k
            c->status[1].predictor  = av_clip_intp2(AV_RL32(avctx->extradata + 4), 18);
2932
25.0k
            c->status[1].step_index = av_clip(AV_RL32(avctx->extradata + 8), 0, 88);
2933
25.0k
        }
2934
76.7k
        break;
2935
2936
35.6k
    case AV_CODEC_ID_ADPCM_IMA_WS:
2937
35.6k
        if (avctx->extradata && avctx->extradata_size >= 2)
2938
14.3k
            c->vqa_version = AV_RL16(avctx->extradata);
2939
35.6k
        break;
2940
5.95M
    default:
2941
        /* Other codecs may want to handle this during decoding. */
2942
5.95M
        c->has_status = 0;
2943
5.95M
        return;
2944
6.13M
    }
2945
2946
180k
    c->has_status = 1;
2947
180k
}
2948
2949
2950
#define ADPCM_DECODER_0(id_, name_, long_name_)
2951
#define ADPCM_DECODER_1(id_, name_, long_name_)             \
2952
const FFCodec ff_ ## name_ ## _decoder = {                  \
2953
    .p.name         = #name_,                               \
2954
    CODEC_LONG_NAME(long_name_),                            \
2955
    .p.type         = AVMEDIA_TYPE_AUDIO,                   \
2956
    .p.id           = id_,                                  \
2957
    .p.capabilities = AV_CODEC_CAP_DR1,                     \
2958
    .priv_data_size = sizeof(ADPCMDecodeContext),           \
2959
    .init           = adpcm_decode_init,                    \
2960
    FF_CODEC_DECODE_CB(adpcm_decode_frame),                 \
2961
    .flush          = adpcm_flush,                          \
2962
};
2963
#define ADPCM_DECODER_2(enabled, codec_id, name, long_name) \
2964
    ADPCM_DECODER_ ## enabled(codec_id, name, long_name)
2965
#define ADPCM_DECODER_3(config, codec_id, name, long_name) \
2966
    ADPCM_DECODER_2(config, codec_id, name, long_name)
2967
#define ADPCM_DECODER(codec, name, long_name) \
2968
    ADPCM_DECODER_3(CONFIG_ ## codec ## _DECODER, AV_CODEC_ID_ ## codec, \
2969
                    name, long_name)
2970
2971
/* Note: Do not forget to add new entries to the Makefile as well. */
2972
ADPCM_DECODER(ADPCM_4XM,         adpcm_4xm,         "ADPCM 4X Movie")
2973
ADPCM_DECODER(ADPCM_AFC,         adpcm_afc,         "ADPCM Nintendo Gamecube AFC")
2974
ADPCM_DECODER(ADPCM_AGM,         adpcm_agm,         "ADPCM AmuseGraphics Movie")
2975
ADPCM_DECODER(ADPCM_AICA,        adpcm_aica,        "ADPCM Yamaha AICA")
2976
ADPCM_DECODER(ADPCM_ARGO,        adpcm_argo,        "ADPCM Argonaut Games")
2977
ADPCM_DECODER(ADPCM_CIRCUS,      adpcm_circus,      "ADPCM Circus")
2978
ADPCM_DECODER(ADPCM_CT,          adpcm_ct,          "ADPCM Creative Technology")
2979
ADPCM_DECODER(ADPCM_DTK,         adpcm_dtk,         "ADPCM Nintendo Gamecube DTK")
2980
ADPCM_DECODER(ADPCM_EA,          adpcm_ea,          "ADPCM Electronic Arts")
2981
ADPCM_DECODER(ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa, "ADPCM Electronic Arts Maxis CDROM XA")
2982
ADPCM_DECODER(ADPCM_EA_R1,       adpcm_ea_r1,       "ADPCM Electronic Arts R1")
2983
ADPCM_DECODER(ADPCM_EA_R2,       adpcm_ea_r2,       "ADPCM Electronic Arts R2")
2984
ADPCM_DECODER(ADPCM_EA_R3,       adpcm_ea_r3,       "ADPCM Electronic Arts R3")
2985
ADPCM_DECODER(ADPCM_EA_XAS,      adpcm_ea_xas,      "ADPCM Electronic Arts XAS")
2986
ADPCM_DECODER(ADPCM_IMA_ACORN,   adpcm_ima_acorn,   "ADPCM IMA Acorn Replay")
2987
ADPCM_DECODER(ADPCM_IMA_AMV,     adpcm_ima_amv,     "ADPCM IMA AMV")
2988
ADPCM_DECODER(ADPCM_IMA_APC,     adpcm_ima_apc,     "ADPCM IMA CRYO APC")
2989
ADPCM_DECODER(ADPCM_IMA_APM,     adpcm_ima_apm,     "ADPCM IMA Ubisoft APM")
2990
ADPCM_DECODER(ADPCM_IMA_CUNNING, adpcm_ima_cunning, "ADPCM IMA Cunning Developments")
2991
ADPCM_DECODER(ADPCM_IMA_DAT4,    adpcm_ima_dat4,    "ADPCM IMA Eurocom DAT4")
2992
ADPCM_DECODER(ADPCM_IMA_DK3,     adpcm_ima_dk3,     "ADPCM IMA Duck DK3")
2993
ADPCM_DECODER(ADPCM_IMA_DK4,     adpcm_ima_dk4,     "ADPCM IMA Duck DK4")
2994
ADPCM_DECODER(ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS")
2995
ADPCM_DECODER(ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead, "ADPCM IMA Electronic Arts SEAD")
2996
ADPCM_DECODER(ADPCM_IMA_ESCAPE,  adpcm_ima_escape,  "ADPCM IMA Acorn Escape")
2997
ADPCM_DECODER(ADPCM_IMA_HVQM2,   adpcm_ima_hvqm2,   "ADPCM IMA HVQM2")
2998
ADPCM_DECODER(ADPCM_IMA_HVQM4,   adpcm_ima_hvqm4,   "ADPCM IMA HVQM4")
2999
ADPCM_DECODER(ADPCM_IMA_ISS,     adpcm_ima_iss,     "ADPCM IMA Funcom ISS")
3000
ADPCM_DECODER(ADPCM_IMA_MAGIX,   adpcm_ima_magix,   "ADPCM IMA Magix")
3001
ADPCM_DECODER(ADPCM_IMA_MOFLEX,  adpcm_ima_moflex,  "ADPCM IMA MobiClip MOFLEX")
3002
ADPCM_DECODER(ADPCM_IMA_MTF,     adpcm_ima_mtf,     "ADPCM IMA Capcom's MT Framework")
3003
ADPCM_DECODER(ADPCM_IMA_OKI,     adpcm_ima_oki,     "ADPCM IMA Dialogic OKI")
3004
ADPCM_DECODER(ADPCM_IMA_PDA,     adpcm_ima_pda,     "ADPCM IMA PlayDate")
3005
ADPCM_DECODER(ADPCM_IMA_QT,      adpcm_ima_qt,      "ADPCM IMA QuickTime")
3006
ADPCM_DECODER(ADPCM_IMA_RAD,     adpcm_ima_rad,     "ADPCM IMA Radical")
3007
ADPCM_DECODER(ADPCM_IMA_SSI,     adpcm_ima_ssi,     "ADPCM IMA Simon & Schuster Interactive")
3008
ADPCM_DECODER(ADPCM_IMA_SMJPEG,  adpcm_ima_smjpeg,  "ADPCM IMA Loki SDL MJPEG")
3009
ADPCM_DECODER(ADPCM_IMA_ALP,     adpcm_ima_alp,     "ADPCM IMA High Voltage Software ALP")
3010
ADPCM_DECODER(ADPCM_IMA_WAV,     adpcm_ima_wav,     "ADPCM IMA WAV")
3011
ADPCM_DECODER(ADPCM_IMA_WS,      adpcm_ima_ws,      "ADPCM IMA Westwood")
3012
ADPCM_DECODER(ADPCM_IMA_XBOX,    adpcm_ima_xbox,    "ADPCM IMA Xbox")
3013
ADPCM_DECODER(ADPCM_MS,          adpcm_ms,          "ADPCM Microsoft")
3014
ADPCM_DECODER(ADPCM_MTAF,        adpcm_mtaf,        "ADPCM MTAF")
3015
ADPCM_DECODER(ADPCM_N64,         adpcm_n64,         "ADPCM Silicon Graphics N64")
3016
ADPCM_DECODER(ADPCM_PSX,         adpcm_psx,         "ADPCM Playstation")
3017
ADPCM_DECODER(ADPCM_PSXC,        adpcm_psxc,        "ADPCM Playstation C")
3018
ADPCM_DECODER(ADPCM_SANYO,       adpcm_sanyo,       "ADPCM Sanyo")
3019
ADPCM_DECODER(ADPCM_SBPRO_2,     adpcm_sbpro_2,     "ADPCM Sound Blaster Pro 2-bit")
3020
ADPCM_DECODER(ADPCM_SBPRO_3,     adpcm_sbpro_3,     "ADPCM Sound Blaster Pro 2.6-bit")
3021
ADPCM_DECODER(ADPCM_SBPRO_4,     adpcm_sbpro_4,     "ADPCM Sound Blaster Pro 4-bit")
3022
ADPCM_DECODER(ADPCM_SWF,         adpcm_swf,         "ADPCM Shockwave Flash")
3023
ADPCM_DECODER(ADPCM_THP_LE,      adpcm_thp_le,      "ADPCM Nintendo THP (little-endian)")
3024
ADPCM_DECODER(ADPCM_THP,         adpcm_thp,         "ADPCM Nintendo THP")
3025
ADPCM_DECODER(ADPCM_XA,          adpcm_xa,          "ADPCM CDROM XA")
3026
ADPCM_DECODER(ADPCM_XMD,         adpcm_xmd,         "ADPCM Konami XMD")
3027
ADPCM_DECODER(ADPCM_YAMAHA,      adpcm_yamaha,      "ADPCM Yamaha")
3028
ADPCM_DECODER(ADPCM_ZORK,        adpcm_zork,        "ADPCM Zork")