]> git.sesse.net Git - ffmpeg/blob - libavcodec/adpcm.c
adpcmdec: Fix QT IMA ADPCM decoder
[ffmpeg] / libavcodec / adpcm.c
1 /*
2  * Copyright (c) 2001-2003 The ffmpeg Project
3  *
4  * This file is part of Libav.
5  *
6  * Libav is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * Libav is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with Libav; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 #include "avcodec.h"
21 #include "get_bits.h"
22 #include "put_bits.h"
23 #include "bytestream.h"
24 #include "adpcm.h"
25 #include "adpcm_data.h"
26
27 /**
28  * @file
29  * ADPCM decoders
30  * First version by Francois Revol (revol@free.fr)
31  * Fringe ADPCM codecs (e.g., DK3, DK4, Westwood)
32  *   by Mike Melanson (melanson@pcisys.net)
33  * CD-ROM XA ADPCM codec by BERO
34  * EA ADPCM decoder by Robin Kay (komadori@myrealbox.com)
35  * EA ADPCM R1/R2/R3 decoder by Peter Ross (pross@xvid.org)
36  * EA IMA EACS decoder by Peter Ross (pross@xvid.org)
37  * EA IMA SEAD decoder by Peter Ross (pross@xvid.org)
38  * EA ADPCM XAS decoder by Peter Ross (pross@xvid.org)
39  * MAXIS EA ADPCM decoder by Robert Marston (rmarston@gmail.com)
40  * THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl)
41  *
42  * Features and limitations:
43  *
44  * Reference documents:
45  * http://www.pcisys.net/~melanson/codecs/simpleaudio.html
46  * http://www.geocities.com/SiliconValley/8682/aud3.txt
47  * http://openquicktime.sourceforge.net/plugins.htm
48  * XAnim sources (xa_codec.c) http://www.rasnaimaging.com/people/lapus/download.html
49  * http://www.cs.ucla.edu/~leec/mediabench/applications.html
50  * SoX source code http://home.sprynet.com/~cbagwell/sox.html
51  *
52  * CD-ROM XA:
53  * http://ku-www.ss.titech.ac.jp/~yatsushi/xaadpcm.html
54  * vagpack & depack http://homepages.compuserve.de/bITmASTER32/psx-index.html
55  * readstr http://www.geocities.co.jp/Playtown/2004/
56  */
57
58 /* These are for CD-ROM XA ADPCM */
59 static const int xa_adpcm_table[5][2] = {
60    {   0,   0 },
61    {  60,   0 },
62    { 115, -52 },
63    {  98, -55 },
64    { 122, -60 }
65 };
66
67 static const int ea_adpcm_table[] = {
68     0, 240, 460, 392, 0, 0, -208, -220, 0, 1,
69     3, 4, 7, 8, 10, 11, 0, -1, -3, -4
70 };
71
72 // padded to zero where table size is less then 16
73 static const int swf_index_tables[4][16] = {
74     /*2*/ { -1, 2 },
75     /*3*/ { -1, -1, 2, 4 },
76     /*4*/ { -1, -1, -1, -1, 2, 4, 6, 8 },
77     /*5*/ { -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16 }
78 };
79
80 /* end of tables */
81
82 typedef struct ADPCMDecodeContext {
83     ADPCMChannelStatus status[6];
84 } ADPCMDecodeContext;
85
86 static av_cold int adpcm_decode_init(AVCodecContext * avctx)
87 {
88     ADPCMDecodeContext *c = avctx->priv_data;
89     unsigned int max_channels = 2;
90
91     switch(avctx->codec->id) {
92     case CODEC_ID_ADPCM_EA_R1:
93     case CODEC_ID_ADPCM_EA_R2:
94     case CODEC_ID_ADPCM_EA_R3:
95     case CODEC_ID_ADPCM_EA_XAS:
96         max_channels = 6;
97         break;
98     }
99     if(avctx->channels > max_channels){
100         return -1;
101     }
102
103     switch(avctx->codec->id) {
104     case CODEC_ID_ADPCM_CT:
105         c->status[0].step = c->status[1].step = 511;
106         break;
107     case CODEC_ID_ADPCM_IMA_WAV:
108         if (avctx->bits_per_coded_sample != 4) {
109             av_log(avctx, AV_LOG_ERROR, "Only 4-bit ADPCM IMA WAV files are supported\n");
110             return -1;
111         }
112         break;
113     case CODEC_ID_ADPCM_IMA_WS:
114         if (avctx->extradata && avctx->extradata_size == 2 * 4) {
115             c->status[0].predictor = AV_RL32(avctx->extradata);
116             c->status[1].predictor = AV_RL32(avctx->extradata + 4);
117         }
118         break;
119     default:
120         break;
121     }
122     avctx->sample_fmt = AV_SAMPLE_FMT_S16;
123     return 0;
124 }
125
126 static inline short adpcm_ima_expand_nibble(ADPCMChannelStatus *c, char nibble, int shift)
127 {
128     int step_index;
129     int predictor;
130     int sign, delta, diff, step;
131
132     step = ff_adpcm_step_table[c->step_index];
133     step_index = c->step_index + ff_adpcm_index_table[(unsigned)nibble];
134     if (step_index < 0) step_index = 0;
135     else if (step_index > 88) step_index = 88;
136
137     sign = nibble & 8;
138     delta = nibble & 7;
139     /* perform direct multiplication instead of series of jumps proposed by
140      * the reference ADPCM implementation since modern CPUs can do the mults
141      * quickly enough */
142     diff = ((2 * delta + 1) * step) >> shift;
143     predictor = c->predictor;
144     if (sign) predictor -= diff;
145     else predictor += diff;
146
147     c->predictor = av_clip_int16(predictor);
148     c->step_index = step_index;
149
150     return (short)c->predictor;
151 }
152
153 static inline int adpcm_ima_qt_expand_nibble(ADPCMChannelStatus *c, int nibble, int shift)
154 {
155     int step_index;
156     int predictor;
157     int diff, step;
158
159     step = ff_adpcm_step_table[c->step_index];
160     step_index = c->step_index + ff_adpcm_index_table[nibble];
161     step_index = av_clip(step_index, 0, 88);
162
163     diff = step >> 3;
164     if (nibble & 4) diff += step;
165     if (nibble & 2) diff += step >> 1;
166     if (nibble & 1) diff += step >> 2;
167
168     if (nibble & 8)
169         predictor = c->predictor - diff;
170     else
171         predictor = c->predictor + diff;
172
173     c->predictor = av_clip_int16(predictor);
174     c->step_index = step_index;
175
176     return c->predictor;
177 }
178
179 static inline short adpcm_ms_expand_nibble(ADPCMChannelStatus *c, char nibble)
180 {
181     int predictor;
182
183     predictor = (((c->sample1) * (c->coeff1)) + ((c->sample2) * (c->coeff2))) / 64;
184     predictor += (signed)((nibble & 0x08)?(nibble - 0x10):(nibble)) * c->idelta;
185
186     c->sample2 = c->sample1;
187     c->sample1 = av_clip_int16(predictor);
188     c->idelta = (ff_adpcm_AdaptationTable[(int)nibble] * c->idelta) >> 8;
189     if (c->idelta < 16) c->idelta = 16;
190
191     return c->sample1;
192 }
193
194 static inline short adpcm_ct_expand_nibble(ADPCMChannelStatus *c, char nibble)
195 {
196     int sign, delta, diff;
197     int new_step;
198
199     sign = nibble & 8;
200     delta = nibble & 7;
201     /* perform direct multiplication instead of series of jumps proposed by
202      * the reference ADPCM implementation since modern CPUs can do the mults
203      * quickly enough */
204     diff = ((2 * delta + 1) * c->step) >> 3;
205     /* predictor update is not so trivial: predictor is multiplied on 254/256 before updating */
206     c->predictor = ((c->predictor * 254) >> 8) + (sign ? -diff : diff);
207     c->predictor = av_clip_int16(c->predictor);
208     /* calculate new step and clamp it to range 511..32767 */
209     new_step = (ff_adpcm_AdaptationTable[nibble & 7] * c->step) >> 8;
210     c->step = av_clip(new_step, 511, 32767);
211
212     return (short)c->predictor;
213 }
214
215 static inline short adpcm_sbpro_expand_nibble(ADPCMChannelStatus *c, char nibble, int size, int shift)
216 {
217     int sign, delta, diff;
218
219     sign = nibble & (1<<(size-1));
220     delta = nibble & ((1<<(size-1))-1);
221     diff = delta << (7 + c->step + shift);
222
223     /* clamp result */
224     c->predictor = av_clip(c->predictor + (sign ? -diff : diff), -16384,16256);
225
226     /* calculate new step */
227     if (delta >= (2*size - 3) && c->step < 3)
228         c->step++;
229     else if (delta == 0 && c->step > 0)
230         c->step--;
231
232     return (short) c->predictor;
233 }
234
235 static inline short adpcm_yamaha_expand_nibble(ADPCMChannelStatus *c, unsigned char nibble)
236 {
237     if(!c->step) {
238         c->predictor = 0;
239         c->step = 127;
240     }
241
242     c->predictor += (c->step * ff_adpcm_yamaha_difflookup[nibble]) / 8;
243     c->predictor = av_clip_int16(c->predictor);
244     c->step = (c->step * ff_adpcm_yamaha_indexscale[nibble]) >> 8;
245     c->step = av_clip(c->step, 127, 24567);
246     return c->predictor;
247 }
248
249 static void xa_decode(short *out, const unsigned char *in,
250     ADPCMChannelStatus *left, ADPCMChannelStatus *right, int inc)
251 {
252     int i, j;
253     int shift,filter,f0,f1;
254     int s_1,s_2;
255     int d,s,t;
256
257     for(i=0;i<4;i++) {
258
259         shift  = 12 - (in[4+i*2] & 15);
260         filter = in[4+i*2] >> 4;
261         f0 = xa_adpcm_table[filter][0];
262         f1 = xa_adpcm_table[filter][1];
263
264         s_1 = left->sample1;
265         s_2 = left->sample2;
266
267         for(j=0;j<28;j++) {
268             d = in[16+i+j*4];
269
270             t = (signed char)(d<<4)>>4;
271             s = ( t<<shift ) + ((s_1*f0 + s_2*f1+32)>>6);
272             s_2 = s_1;
273             s_1 = av_clip_int16(s);
274             *out = s_1;
275             out += inc;
276         }
277
278         if (inc==2) { /* stereo */
279             left->sample1 = s_1;
280             left->sample2 = s_2;
281             s_1 = right->sample1;
282             s_2 = right->sample2;
283             out = out + 1 - 28*2;
284         }
285
286         shift  = 12 - (in[5+i*2] & 15);
287         filter = in[5+i*2] >> 4;
288
289         f0 = xa_adpcm_table[filter][0];
290         f1 = xa_adpcm_table[filter][1];
291
292         for(j=0;j<28;j++) {
293             d = in[16+i+j*4];
294
295             t = (signed char)d >> 4;
296             s = ( t<<shift ) + ((s_1*f0 + s_2*f1+32)>>6);
297             s_2 = s_1;
298             s_1 = av_clip_int16(s);
299             *out = s_1;
300             out += inc;
301         }
302
303         if (inc==2) { /* stereo */
304             right->sample1 = s_1;
305             right->sample2 = s_2;
306             out -= 1;
307         } else {
308             left->sample1 = s_1;
309             left->sample2 = s_2;
310         }
311     }
312 }
313
314
315 /* DK3 ADPCM support macro */
316 #define DK3_GET_NEXT_NIBBLE() \
317     if (decode_top_nibble_next) \
318     { \
319         nibble = last_byte >> 4; \
320         decode_top_nibble_next = 0; \
321     } \
322     else \
323     { \
324         last_byte = *src++; \
325         if (src >= buf + buf_size) break; \
326         nibble = last_byte & 0x0F; \
327         decode_top_nibble_next = 1; \
328     }
329
330 static int adpcm_decode_frame(AVCodecContext *avctx,
331                             void *data, int *data_size,
332                             AVPacket *avpkt)
333 {
334     const uint8_t *buf = avpkt->data;
335     int buf_size = avpkt->size;
336     ADPCMDecodeContext *c = avctx->priv_data;
337     ADPCMChannelStatus *cs;
338     int n, m, channel, i;
339     int block_predictor[2];
340     short *samples;
341     short *samples_end;
342     const uint8_t *src;
343     int st; /* stereo */
344
345     /* DK3 ADPCM accounting variables */
346     unsigned char last_byte = 0;
347     unsigned char nibble;
348     int decode_top_nibble_next = 0;
349     int diff_channel;
350
351     /* EA ADPCM state variables */
352     uint32_t samples_in_chunk;
353     int32_t previous_left_sample, previous_right_sample;
354     int32_t current_left_sample, current_right_sample;
355     int32_t next_left_sample, next_right_sample;
356     int32_t coeff1l, coeff2l, coeff1r, coeff2r;
357     uint8_t shift_left, shift_right;
358     int count1, count2;
359     int coeff[2][2], shift[2];//used in EA MAXIS ADPCM
360
361     if (!buf_size)
362         return 0;
363
364     //should protect all 4bit ADPCM variants
365     //8 is needed for CODEC_ID_ADPCM_IMA_WAV with 2 channels
366     //
367     if(*data_size/4 < buf_size + 8)
368         return -1;
369
370     samples = data;
371     samples_end= samples + *data_size/2;
372     *data_size= 0;
373     src = buf;
374
375     st = avctx->channels == 2 ? 1 : 0;
376
377     switch(avctx->codec->id) {
378     case CODEC_ID_ADPCM_IMA_QT:
379         n = buf_size - 2*avctx->channels;
380         for (channel = 0; channel < avctx->channels; channel++) {
381             int16_t predictor;
382             int step_index;
383             cs = &(c->status[channel]);
384             /* (pppppp) (piiiiiii) */
385
386             /* Bits 15-7 are the _top_ 9 bits of the 16-bit initial predictor value */
387             predictor = AV_RB16(src);
388             step_index = predictor & 0x7F;
389             predictor &= 0xFF80;
390
391             src += 2;
392
393             if (cs->step_index == step_index) {
394                 int diff = (int)predictor - cs->predictor;
395                 if (diff < 0)
396                     diff = - diff;
397                 if (diff > 0x7f)
398                     goto update;
399             } else {
400             update:
401                 cs->step_index = step_index;
402                 cs->predictor = predictor;
403             }
404
405             if (cs->step_index > 88){
406                 av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i\n", cs->step_index);
407                 cs->step_index = 88;
408             }
409
410             samples = (short*)data + channel;
411
412             for(m=32; n>0 && m>0; n--, m--) { /* in QuickTime, IMA is encoded by chuncks of 34 bytes (=64 samples) */
413                 *samples = adpcm_ima_qt_expand_nibble(cs, src[0] & 0x0F, 3);
414                 samples += avctx->channels;
415                 *samples = adpcm_ima_qt_expand_nibble(cs, src[0] >> 4  , 3);
416                 samples += avctx->channels;
417                 src ++;
418             }
419         }
420         if (st)
421             samples--;
422         break;
423     case CODEC_ID_ADPCM_IMA_WAV:
424         if (avctx->block_align != 0 && buf_size > avctx->block_align)
425             buf_size = avctx->block_align;
426
427 //        samples_per_block= (block_align-4*chanels)*8 / (bits_per_sample * chanels) + 1;
428
429         for(i=0; i<avctx->channels; i++){
430             cs = &(c->status[i]);
431             cs->predictor = *samples++ = (int16_t)bytestream_get_le16(&src);
432
433             cs->step_index = *src++;
434             if (cs->step_index > 88){
435                 av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i\n", cs->step_index);
436                 cs->step_index = 88;
437             }
438             if (*src++) av_log(avctx, AV_LOG_ERROR, "unused byte should be null but is %d!!\n", src[-1]); /* unused */
439         }
440
441         while(src < buf + buf_size){
442             for(m=0; m<4; m++){
443                 for(i=0; i<=st; i++)
444                     *samples++ = adpcm_ima_expand_nibble(&c->status[i], src[4*i] & 0x0F, 3);
445                 for(i=0; i<=st; i++)
446                     *samples++ = adpcm_ima_expand_nibble(&c->status[i], src[4*i] >> 4  , 3);
447                 src++;
448             }
449             src += 4*st;
450         }
451         break;
452     case CODEC_ID_ADPCM_4XM:
453         cs = &(c->status[0]);
454         c->status[0].predictor= (int16_t)bytestream_get_le16(&src);
455         if(st){
456             c->status[1].predictor= (int16_t)bytestream_get_le16(&src);
457         }
458         c->status[0].step_index= (int16_t)bytestream_get_le16(&src);
459         if(st){
460             c->status[1].step_index= (int16_t)bytestream_get_le16(&src);
461         }
462         if (cs->step_index < 0) cs->step_index = 0;
463         if (cs->step_index > 88) cs->step_index = 88;
464
465         m= (buf_size - (src - buf))>>st;
466         for(i=0; i<m; i++) {
467             *samples++ = adpcm_ima_expand_nibble(&c->status[0], src[i] & 0x0F, 4);
468             if (st)
469                 *samples++ = adpcm_ima_expand_nibble(&c->status[1], src[i+m] & 0x0F, 4);
470             *samples++ = adpcm_ima_expand_nibble(&c->status[0], src[i] >> 4, 4);
471             if (st)
472                 *samples++ = adpcm_ima_expand_nibble(&c->status[1], src[i+m] >> 4, 4);
473         }
474
475         src += m<<st;
476
477         break;
478     case CODEC_ID_ADPCM_MS:
479         if (avctx->block_align != 0 && buf_size > avctx->block_align)
480             buf_size = avctx->block_align;
481         n = buf_size - 7 * avctx->channels;
482         if (n < 0)
483             return -1;
484         block_predictor[0] = av_clip(*src++, 0, 6);
485         block_predictor[1] = 0;
486         if (st)
487             block_predictor[1] = av_clip(*src++, 0, 6);
488         c->status[0].idelta = (int16_t)bytestream_get_le16(&src);
489         if (st){
490             c->status[1].idelta = (int16_t)bytestream_get_le16(&src);
491         }
492         c->status[0].coeff1 = ff_adpcm_AdaptCoeff1[block_predictor[0]];
493         c->status[0].coeff2 = ff_adpcm_AdaptCoeff2[block_predictor[0]];
494         c->status[1].coeff1 = ff_adpcm_AdaptCoeff1[block_predictor[1]];
495         c->status[1].coeff2 = ff_adpcm_AdaptCoeff2[block_predictor[1]];
496
497         c->status[0].sample1 = bytestream_get_le16(&src);
498         if (st) c->status[1].sample1 = bytestream_get_le16(&src);
499         c->status[0].sample2 = bytestream_get_le16(&src);
500         if (st) c->status[1].sample2 = bytestream_get_le16(&src);
501
502         *samples++ = c->status[0].sample2;
503         if (st) *samples++ = c->status[1].sample2;
504         *samples++ = c->status[0].sample1;
505         if (st) *samples++ = c->status[1].sample1;
506         for(;n>0;n--) {
507             *samples++ = adpcm_ms_expand_nibble(&c->status[0 ], src[0] >> 4  );
508             *samples++ = adpcm_ms_expand_nibble(&c->status[st], src[0] & 0x0F);
509             src ++;
510         }
511         break;
512     case CODEC_ID_ADPCM_IMA_DK4:
513         if (avctx->block_align != 0 && buf_size > avctx->block_align)
514             buf_size = avctx->block_align;
515
516         c->status[0].predictor  = (int16_t)bytestream_get_le16(&src);
517         c->status[0].step_index = *src++;
518         src++;
519         *samples++ = c->status[0].predictor;
520         if (st) {
521             c->status[1].predictor  = (int16_t)bytestream_get_le16(&src);
522             c->status[1].step_index = *src++;
523             src++;
524             *samples++ = c->status[1].predictor;
525         }
526         while (src < buf + buf_size) {
527
528             /* take care of the top nibble (always left or mono channel) */
529             *samples++ = adpcm_ima_expand_nibble(&c->status[0],
530                 src[0] >> 4, 3);
531
532             /* take care of the bottom nibble, which is right sample for
533              * stereo, or another mono sample */
534             if (st)
535                 *samples++ = adpcm_ima_expand_nibble(&c->status[1],
536                     src[0] & 0x0F, 3);
537             else
538                 *samples++ = adpcm_ima_expand_nibble(&c->status[0],
539                     src[0] & 0x0F, 3);
540
541             src++;
542         }
543         break;
544     case CODEC_ID_ADPCM_IMA_DK3:
545         if (avctx->block_align != 0 && buf_size > avctx->block_align)
546             buf_size = avctx->block_align;
547
548         if(buf_size + 16 > (samples_end - samples)*3/8)
549             return -1;
550
551         c->status[0].predictor  = (int16_t)AV_RL16(src + 10);
552         c->status[1].predictor  = (int16_t)AV_RL16(src + 12);
553         c->status[0].step_index = src[14];
554         c->status[1].step_index = src[15];
555         /* sign extend the predictors */
556         src += 16;
557         diff_channel = c->status[1].predictor;
558
559         /* the DK3_GET_NEXT_NIBBLE macro issues the break statement when
560          * the buffer is consumed */
561         while (1) {
562
563             /* for this algorithm, c->status[0] is the sum channel and
564              * c->status[1] is the diff channel */
565
566             /* process the first predictor of the sum channel */
567             DK3_GET_NEXT_NIBBLE();
568             adpcm_ima_expand_nibble(&c->status[0], nibble, 3);
569
570             /* process the diff channel predictor */
571             DK3_GET_NEXT_NIBBLE();
572             adpcm_ima_expand_nibble(&c->status[1], nibble, 3);
573
574             /* process the first pair of stereo PCM samples */
575             diff_channel = (diff_channel + c->status[1].predictor) / 2;
576             *samples++ = c->status[0].predictor + c->status[1].predictor;
577             *samples++ = c->status[0].predictor - c->status[1].predictor;
578
579             /* process the second predictor of the sum channel */
580             DK3_GET_NEXT_NIBBLE();
581             adpcm_ima_expand_nibble(&c->status[0], nibble, 3);
582
583             /* process the second pair of stereo PCM samples */
584             diff_channel = (diff_channel + c->status[1].predictor) / 2;
585             *samples++ = c->status[0].predictor + c->status[1].predictor;
586             *samples++ = c->status[0].predictor - c->status[1].predictor;
587         }
588         break;
589     case CODEC_ID_ADPCM_IMA_ISS:
590         c->status[0].predictor  = (int16_t)AV_RL16(src + 0);
591         c->status[0].step_index = src[2];
592         src += 4;
593         if(st) {
594             c->status[1].predictor  = (int16_t)AV_RL16(src + 0);
595             c->status[1].step_index = src[2];
596             src += 4;
597         }
598
599         while (src < buf + buf_size) {
600
601             if (st) {
602                 *samples++ = adpcm_ima_expand_nibble(&c->status[0],
603                     src[0] >> 4  , 3);
604                 *samples++ = adpcm_ima_expand_nibble(&c->status[1],
605                     src[0] & 0x0F, 3);
606             } else {
607                 *samples++ = adpcm_ima_expand_nibble(&c->status[0],
608                     src[0] & 0x0F, 3);
609                 *samples++ = adpcm_ima_expand_nibble(&c->status[0],
610                     src[0] >> 4  , 3);
611             }
612
613             src++;
614         }
615         break;
616     case CODEC_ID_ADPCM_IMA_WS:
617         /* no per-block initialization; just start decoding the data */
618         while (src < buf + buf_size) {
619
620             if (st) {
621                 *samples++ = adpcm_ima_expand_nibble(&c->status[0],
622                     src[0] >> 4  , 3);
623                 *samples++ = adpcm_ima_expand_nibble(&c->status[1],
624                     src[0] & 0x0F, 3);
625             } else {
626                 *samples++ = adpcm_ima_expand_nibble(&c->status[0],
627                     src[0] >> 4  , 3);
628                 *samples++ = adpcm_ima_expand_nibble(&c->status[0],
629                     src[0] & 0x0F, 3);
630             }
631
632             src++;
633         }
634         break;
635     case CODEC_ID_ADPCM_XA:
636         while (buf_size >= 128) {
637             xa_decode(samples, src, &c->status[0], &c->status[1],
638                 avctx->channels);
639             src += 128;
640             samples += 28 * 8;
641             buf_size -= 128;
642         }
643         break;
644     case CODEC_ID_ADPCM_IMA_EA_EACS:
645         samples_in_chunk = bytestream_get_le32(&src) >> (1-st);
646
647         if (samples_in_chunk > buf_size-4-(8<<st)) {
648             src += buf_size - 4;
649             break;
650         }
651
652         for (i=0; i<=st; i++)
653             c->status[i].step_index = bytestream_get_le32(&src);
654         for (i=0; i<=st; i++)
655             c->status[i].predictor  = bytestream_get_le32(&src);
656
657         for (; samples_in_chunk; samples_in_chunk--, src++) {
658             *samples++ = adpcm_ima_expand_nibble(&c->status[0],  *src>>4,   3);
659             *samples++ = adpcm_ima_expand_nibble(&c->status[st], *src&0x0F, 3);
660         }
661         break;
662     case CODEC_ID_ADPCM_IMA_EA_SEAD:
663         for (; src < buf+buf_size; src++) {
664             *samples++ = adpcm_ima_expand_nibble(&c->status[0], src[0] >> 4, 6);
665             *samples++ = adpcm_ima_expand_nibble(&c->status[st],src[0]&0x0F, 6);
666         }
667         break;
668     case CODEC_ID_ADPCM_EA:
669         /* Each EA ADPCM frame has a 12-byte header followed by 30-byte pieces,
670            each coding 28 stereo samples. */
671         if (buf_size < 12) {
672             av_log(avctx, AV_LOG_ERROR, "frame too small\n");
673             return AVERROR(EINVAL);
674         }
675         samples_in_chunk = AV_RL32(src);
676         if (samples_in_chunk / 28 > (buf_size - 12) / 30) {
677             av_log(avctx, AV_LOG_ERROR, "invalid frame\n");
678             return AVERROR(EINVAL);
679         }
680         src += 4;
681         current_left_sample   = (int16_t)bytestream_get_le16(&src);
682         previous_left_sample  = (int16_t)bytestream_get_le16(&src);
683         current_right_sample  = (int16_t)bytestream_get_le16(&src);
684         previous_right_sample = (int16_t)bytestream_get_le16(&src);
685
686         for (count1 = 0; count1 < samples_in_chunk/28;count1++) {
687             coeff1l = ea_adpcm_table[ *src >> 4       ];
688             coeff2l = ea_adpcm_table[(*src >> 4  ) + 4];
689             coeff1r = ea_adpcm_table[*src & 0x0F];
690             coeff2r = ea_adpcm_table[(*src & 0x0F) + 4];
691             src++;
692
693             shift_left  = (*src >> 4  ) + 8;
694             shift_right = (*src & 0x0F) + 8;
695             src++;
696
697             for (count2 = 0; count2 < 28; count2++) {
698                 next_left_sample  = (int32_t)((*src & 0xF0) << 24) >> shift_left;
699                 next_right_sample = (int32_t)((*src & 0x0F) << 28) >> shift_right;
700                 src++;
701
702                 next_left_sample = (next_left_sample +
703                     (current_left_sample * coeff1l) +
704                     (previous_left_sample * coeff2l) + 0x80) >> 8;
705                 next_right_sample = (next_right_sample +
706                     (current_right_sample * coeff1r) +
707                     (previous_right_sample * coeff2r) + 0x80) >> 8;
708
709                 previous_left_sample = current_left_sample;
710                 current_left_sample = av_clip_int16(next_left_sample);
711                 previous_right_sample = current_right_sample;
712                 current_right_sample = av_clip_int16(next_right_sample);
713                 *samples++ = (unsigned short)current_left_sample;
714                 *samples++ = (unsigned short)current_right_sample;
715             }
716         }
717
718         if (src - buf == buf_size - 2)
719             src += 2; // Skip terminating 0x0000
720
721         break;
722     case CODEC_ID_ADPCM_EA_MAXIS_XA:
723         for(channel = 0; channel < avctx->channels; channel++) {
724             for (i=0; i<2; i++)
725                 coeff[channel][i] = ea_adpcm_table[(*src >> 4) + 4*i];
726             shift[channel] = (*src & 0x0F) + 8;
727             src++;
728         }
729         for (count1 = 0; count1 < (buf_size - avctx->channels) / avctx->channels; count1++) {
730             for(i = 4; i >= 0; i-=4) { /* Pairwise samples LL RR (st) or LL LL (mono) */
731                 for(channel = 0; channel < avctx->channels; channel++) {
732                     int32_t sample = (int32_t)(((*(src+channel) >> i) & 0x0F) << 0x1C) >> shift[channel];
733                     sample = (sample +
734                              c->status[channel].sample1 * coeff[channel][0] +
735                              c->status[channel].sample2 * coeff[channel][1] + 0x80) >> 8;
736                     c->status[channel].sample2 = c->status[channel].sample1;
737                     c->status[channel].sample1 = av_clip_int16(sample);
738                     *samples++ = c->status[channel].sample1;
739                 }
740             }
741             src+=avctx->channels;
742         }
743         break;
744     case CODEC_ID_ADPCM_EA_R1:
745     case CODEC_ID_ADPCM_EA_R2:
746     case CODEC_ID_ADPCM_EA_R3: {
747         /* channel numbering
748            2chan: 0=fl, 1=fr
749            4chan: 0=fl, 1=rl, 2=fr, 3=rr
750            6chan: 0=fl, 1=c,  2=fr, 3=rl,  4=rr, 5=sub */
751         const int big_endian = avctx->codec->id == CODEC_ID_ADPCM_EA_R3;
752         int32_t previous_sample, current_sample, next_sample;
753         int32_t coeff1, coeff2;
754         uint8_t shift;
755         unsigned int channel;
756         uint16_t *samplesC;
757         const uint8_t *srcC;
758         const uint8_t *src_end = buf + buf_size;
759
760         samples_in_chunk = (big_endian ? bytestream_get_be32(&src)
761                                        : bytestream_get_le32(&src)) / 28;
762         if (samples_in_chunk > UINT32_MAX/(28*avctx->channels) ||
763             28*samples_in_chunk*avctx->channels > samples_end-samples) {
764             src += buf_size - 4;
765             break;
766         }
767
768         for (channel=0; channel<avctx->channels; channel++) {
769             int32_t offset = (big_endian ? bytestream_get_be32(&src)
770                                          : bytestream_get_le32(&src))
771                            + (avctx->channels-channel-1) * 4;
772
773             if ((offset < 0) || (offset >= src_end - src - 4)) break;
774             srcC  = src + offset;
775             samplesC = samples + channel;
776
777             if (avctx->codec->id == CODEC_ID_ADPCM_EA_R1) {
778                 current_sample  = (int16_t)bytestream_get_le16(&srcC);
779                 previous_sample = (int16_t)bytestream_get_le16(&srcC);
780             } else {
781                 current_sample  = c->status[channel].predictor;
782                 previous_sample = c->status[channel].prev_sample;
783             }
784
785             for (count1=0; count1<samples_in_chunk; count1++) {
786                 if (*srcC == 0xEE) {  /* only seen in R2 and R3 */
787                     srcC++;
788                     if (srcC > src_end - 30*2) break;
789                     current_sample  = (int16_t)bytestream_get_be16(&srcC);
790                     previous_sample = (int16_t)bytestream_get_be16(&srcC);
791
792                     for (count2=0; count2<28; count2++) {
793                         *samplesC = (int16_t)bytestream_get_be16(&srcC);
794                         samplesC += avctx->channels;
795                     }
796                 } else {
797                     coeff1 = ea_adpcm_table[ *srcC>>4     ];
798                     coeff2 = ea_adpcm_table[(*srcC>>4) + 4];
799                     shift = (*srcC++ & 0x0F) + 8;
800
801                     if (srcC > src_end - 14) break;
802                     for (count2=0; count2<28; count2++) {
803                         if (count2 & 1)
804                             next_sample = (int32_t)((*srcC++ & 0x0F) << 28) >> shift;
805                         else
806                             next_sample = (int32_t)((*srcC   & 0xF0) << 24) >> shift;
807
808                         next_sample += (current_sample  * coeff1) +
809                                        (previous_sample * coeff2);
810                         next_sample = av_clip_int16(next_sample >> 8);
811
812                         previous_sample = current_sample;
813                         current_sample  = next_sample;
814                         *samplesC = current_sample;
815                         samplesC += avctx->channels;
816                     }
817                 }
818             }
819
820             if (avctx->codec->id != CODEC_ID_ADPCM_EA_R1) {
821                 c->status[channel].predictor   = current_sample;
822                 c->status[channel].prev_sample = previous_sample;
823             }
824         }
825
826         src = src + buf_size - (4 + 4*avctx->channels);
827         samples += 28 * samples_in_chunk * avctx->channels;
828         break;
829     }
830     case CODEC_ID_ADPCM_EA_XAS:
831         if (samples_end-samples < 32*4*avctx->channels
832             || buf_size < (4+15)*4*avctx->channels) {
833             src += buf_size;
834             break;
835         }
836         for (channel=0; channel<avctx->channels; channel++) {
837             int coeff[2][4], shift[4];
838             short *s2, *s = &samples[channel];
839             for (n=0; n<4; n++, s+=32*avctx->channels) {
840                 for (i=0; i<2; i++)
841                     coeff[i][n] = ea_adpcm_table[(src[0]&0x0F)+4*i];
842                 shift[n] = (src[2]&0x0F) + 8;
843                 for (s2=s, i=0; i<2; i++, src+=2, s2+=avctx->channels)
844                     s2[0] = (src[0]&0xF0) + (src[1]<<8);
845             }
846
847             for (m=2; m<32; m+=2) {
848                 s = &samples[m*avctx->channels + channel];
849                 for (n=0; n<4; n++, src++, s+=32*avctx->channels) {
850                     for (s2=s, i=0; i<8; i+=4, s2+=avctx->channels) {
851                         int level = (int32_t)((*src & (0xF0>>i)) << (24+i)) >> shift[n];
852                         int pred  = s2[-1*avctx->channels] * coeff[0][n]
853                                   + s2[-2*avctx->channels] * coeff[1][n];
854                         s2[0] = av_clip_int16((level + pred + 0x80) >> 8);
855                     }
856                 }
857             }
858         }
859         samples += 32*4*avctx->channels;
860         break;
861     case CODEC_ID_ADPCM_IMA_AMV:
862     case CODEC_ID_ADPCM_IMA_SMJPEG:
863         c->status[0].predictor = (int16_t)bytestream_get_le16(&src);
864         c->status[0].step_index = bytestream_get_le16(&src);
865
866         if (avctx->codec->id == CODEC_ID_ADPCM_IMA_AMV)
867             src+=4;
868
869         while (src < buf + buf_size) {
870             char hi, lo;
871             lo = *src & 0x0F;
872             hi = *src >> 4;
873
874             if (avctx->codec->id == CODEC_ID_ADPCM_IMA_AMV)
875                 FFSWAP(char, hi, lo);
876
877             *samples++ = adpcm_ima_expand_nibble(&c->status[0],
878                 lo, 3);
879             *samples++ = adpcm_ima_expand_nibble(&c->status[0],
880                 hi, 3);
881             src++;
882         }
883         break;
884     case CODEC_ID_ADPCM_CT:
885         while (src < buf + buf_size) {
886             if (st) {
887                 *samples++ = adpcm_ct_expand_nibble(&c->status[0],
888                     src[0] >> 4);
889                 *samples++ = adpcm_ct_expand_nibble(&c->status[1],
890                     src[0] & 0x0F);
891             } else {
892                 *samples++ = adpcm_ct_expand_nibble(&c->status[0],
893                     src[0] >> 4);
894                 *samples++ = adpcm_ct_expand_nibble(&c->status[0],
895                     src[0] & 0x0F);
896             }
897             src++;
898         }
899         break;
900     case CODEC_ID_ADPCM_SBPRO_4:
901     case CODEC_ID_ADPCM_SBPRO_3:
902     case CODEC_ID_ADPCM_SBPRO_2:
903         if (!c->status[0].step_index) {
904             /* the first byte is a raw sample */
905             *samples++ = 128 * (*src++ - 0x80);
906             if (st)
907               *samples++ = 128 * (*src++ - 0x80);
908             c->status[0].step_index = 1;
909         }
910         if (avctx->codec->id == CODEC_ID_ADPCM_SBPRO_4) {
911             while (src < buf + buf_size) {
912                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
913                     src[0] >> 4, 4, 0);
914                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[st],
915                     src[0] & 0x0F, 4, 0);
916                 src++;
917             }
918         } else if (avctx->codec->id == CODEC_ID_ADPCM_SBPRO_3) {
919             while (src < buf + buf_size && samples + 2 < samples_end) {
920                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
921                      src[0] >> 5        , 3, 0);
922                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
923                     (src[0] >> 2) & 0x07, 3, 0);
924                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
925                     src[0] & 0x03, 2, 0);
926                 src++;
927             }
928         } else {
929             while (src < buf + buf_size && samples + 3 < samples_end) {
930                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
931                      src[0] >> 6        , 2, 2);
932                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[st],
933                     (src[0] >> 4) & 0x03, 2, 2);
934                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[0],
935                     (src[0] >> 2) & 0x03, 2, 2);
936                 *samples++ = adpcm_sbpro_expand_nibble(&c->status[st],
937                     src[0] & 0x03, 2, 2);
938                 src++;
939             }
940         }
941         break;
942     case CODEC_ID_ADPCM_SWF:
943     {
944         GetBitContext gb;
945         const int *table;
946         int k0, signmask, nb_bits, count;
947         int size = buf_size*8;
948
949         init_get_bits(&gb, buf, size);
950
951         //read bits & initial values
952         nb_bits = get_bits(&gb, 2)+2;
953         //av_log(NULL,AV_LOG_INFO,"nb_bits: %d\n", nb_bits);
954         table = swf_index_tables[nb_bits-2];
955         k0 = 1 << (nb_bits-2);
956         signmask = 1 << (nb_bits-1);
957
958         while (get_bits_count(&gb) <= size - 22*avctx->channels) {
959             for (i = 0; i < avctx->channels; i++) {
960                 *samples++ = c->status[i].predictor = get_sbits(&gb, 16);
961                 c->status[i].step_index = get_bits(&gb, 6);
962             }
963
964             for (count = 0; get_bits_count(&gb) <= size - nb_bits*avctx->channels && count < 4095; count++) {
965                 int i;
966
967                 for (i = 0; i < avctx->channels; i++) {
968                     // similar to IMA adpcm
969                     int delta = get_bits(&gb, nb_bits);
970                     int step = ff_adpcm_step_table[c->status[i].step_index];
971                     long vpdiff = 0; // vpdiff = (delta+0.5)*step/4
972                     int k = k0;
973
974                     do {
975                         if (delta & k)
976                             vpdiff += step;
977                         step >>= 1;
978                         k >>= 1;
979                     } while(k);
980                     vpdiff += step;
981
982                     if (delta & signmask)
983                         c->status[i].predictor -= vpdiff;
984                     else
985                         c->status[i].predictor += vpdiff;
986
987                     c->status[i].step_index += table[delta & (~signmask)];
988
989                     c->status[i].step_index = av_clip(c->status[i].step_index, 0, 88);
990                     c->status[i].predictor = av_clip_int16(c->status[i].predictor);
991
992                     *samples++ = c->status[i].predictor;
993                     if (samples >= samples_end) {
994                         av_log(avctx, AV_LOG_ERROR, "allocated output buffer is too small\n");
995                         return -1;
996                     }
997                 }
998             }
999         }
1000         src += buf_size;
1001         break;
1002     }
1003     case CODEC_ID_ADPCM_YAMAHA:
1004         while (src < buf + buf_size) {
1005             if (st) {
1006                 *samples++ = adpcm_yamaha_expand_nibble(&c->status[0],
1007                         src[0] & 0x0F);
1008                 *samples++ = adpcm_yamaha_expand_nibble(&c->status[1],
1009                         src[0] >> 4  );
1010             } else {
1011                 *samples++ = adpcm_yamaha_expand_nibble(&c->status[0],
1012                         src[0] & 0x0F);
1013                 *samples++ = adpcm_yamaha_expand_nibble(&c->status[0],
1014                         src[0] >> 4  );
1015             }
1016             src++;
1017         }
1018         break;
1019     case CODEC_ID_ADPCM_THP:
1020     {
1021         int table[2][16];
1022         unsigned int samplecnt;
1023         int prev[2][2];
1024         int ch;
1025
1026         if (buf_size < 80) {
1027             av_log(avctx, AV_LOG_ERROR, "frame too small\n");
1028             return -1;
1029         }
1030
1031         src+=4;
1032         samplecnt = bytestream_get_be32(&src);
1033
1034         for (i = 0; i < 32; i++)
1035             table[0][i] = (int16_t)bytestream_get_be16(&src);
1036
1037         /* Initialize the previous sample.  */
1038         for (i = 0; i < 4; i++)
1039             prev[0][i] = (int16_t)bytestream_get_be16(&src);
1040
1041         if (samplecnt >= (samples_end - samples) /  (st + 1)) {
1042             av_log(avctx, AV_LOG_ERROR, "allocated output buffer is too small\n");
1043             return -1;
1044         }
1045
1046         for (ch = 0; ch <= st; ch++) {
1047             samples = (unsigned short *) data + ch;
1048
1049             /* Read in every sample for this channel.  */
1050             for (i = 0; i < samplecnt / 14; i++) {
1051                 int index = (*src >> 4) & 7;
1052                 unsigned int exp = 28 - (*src++ & 15);
1053                 int factor1 = table[ch][index * 2];
1054                 int factor2 = table[ch][index * 2 + 1];
1055
1056                 /* Decode 14 samples.  */
1057                 for (n = 0; n < 14; n++) {
1058                     int32_t sampledat;
1059                     if(n&1) sampledat=  *src++    <<28;
1060                     else    sampledat= (*src&0xF0)<<24;
1061
1062                     sampledat = ((prev[ch][0]*factor1
1063                                 + prev[ch][1]*factor2) >> 11) + (sampledat>>exp);
1064                     *samples = av_clip_int16(sampledat);
1065                     prev[ch][1] = prev[ch][0];
1066                     prev[ch][0] = *samples++;
1067
1068                     /* In case of stereo, skip one sample, this sample
1069                        is for the other channel.  */
1070                     samples += st;
1071                 }
1072             }
1073         }
1074
1075         /* In the previous loop, in case stereo is used, samples is
1076            increased exactly one time too often.  */
1077         samples -= st;
1078         break;
1079     }
1080
1081     default:
1082         return -1;
1083     }
1084     *data_size = (uint8_t *)samples - (uint8_t *)data;
1085     return src - buf;
1086 }
1087
1088
1089 #define ADPCM_DECODER(id,name,long_name_)       \
1090 AVCodec ff_ ## name ## _decoder = {             \
1091     #name,                                      \
1092     AVMEDIA_TYPE_AUDIO,                         \
1093     id,                                         \
1094     sizeof(ADPCMDecodeContext),                 \
1095     adpcm_decode_init,                          \
1096     NULL,                                       \
1097     NULL,                                       \
1098     adpcm_decode_frame,                         \
1099     .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
1100 }
1101
1102 /* Note: Do not forget to add new entries to the Makefile as well. */
1103 ADPCM_DECODER(CODEC_ID_ADPCM_4XM, adpcm_4xm, "ADPCM 4X Movie");
1104 ADPCM_DECODER(CODEC_ID_ADPCM_CT, adpcm_ct, "ADPCM Creative Technology");
1105 ADPCM_DECODER(CODEC_ID_ADPCM_EA, adpcm_ea, "ADPCM Electronic Arts");
1106 ADPCM_DECODER(CODEC_ID_ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa, "ADPCM Electronic Arts Maxis CDROM XA");
1107 ADPCM_DECODER(CODEC_ID_ADPCM_EA_R1, adpcm_ea_r1, "ADPCM Electronic Arts R1");
1108 ADPCM_DECODER(CODEC_ID_ADPCM_EA_R2, adpcm_ea_r2, "ADPCM Electronic Arts R2");
1109 ADPCM_DECODER(CODEC_ID_ADPCM_EA_R3, adpcm_ea_r3, "ADPCM Electronic Arts R3");
1110 ADPCM_DECODER(CODEC_ID_ADPCM_EA_XAS, adpcm_ea_xas, "ADPCM Electronic Arts XAS");
1111 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_AMV, adpcm_ima_amv, "ADPCM IMA AMV");
1112 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3, "ADPCM IMA Duck DK3");
1113 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4, "ADPCM IMA Duck DK4");
1114 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS");
1115 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead, "ADPCM IMA Electronic Arts SEAD");
1116 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_ISS, adpcm_ima_iss, "ADPCM IMA Funcom ISS");
1117 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt, "ADPCM IMA QuickTime");
1118 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg, "ADPCM IMA Loki SDL MJPEG");
1119 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav, "ADPCM IMA WAV");
1120 ADPCM_DECODER(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws, "ADPCM IMA Westwood");
1121 ADPCM_DECODER(CODEC_ID_ADPCM_MS, adpcm_ms, "ADPCM Microsoft");
1122 ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_2, adpcm_sbpro_2, "ADPCM Sound Blaster Pro 2-bit");
1123 ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_3, adpcm_sbpro_3, "ADPCM Sound Blaster Pro 2.6-bit");
1124 ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_4, adpcm_sbpro_4, "ADPCM Sound Blaster Pro 4-bit");
1125 ADPCM_DECODER(CODEC_ID_ADPCM_SWF, adpcm_swf, "ADPCM Shockwave Flash");
1126 ADPCM_DECODER(CODEC_ID_ADPCM_THP, adpcm_thp, "ADPCM Nintendo Gamecube THP");
1127 ADPCM_DECODER(CODEC_ID_ADPCM_XA, adpcm_xa, "ADPCM CDROM XA");
1128 ADPCM_DECODER(CODEC_ID_ADPCM_YAMAHA, adpcm_yamaha, "ADPCM Yamaha");