/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") |