adpcm.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:36k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*
  2.  * ADPCM codecs
  3.  * Copyright (c) 2001-2003 The ffmpeg Project
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  */
  19. #include "avcodec.h"
  20. #include "bitstream.h"
  21. /**
  22.  * @file adpcm.c
  23.  * ADPCM codecs.
  24.  * First version by Francois Revol (revol@free.fr)
  25.  * Fringe ADPCM codecs (e.g., DK3, DK4, Westwood)
  26.  *   by Mike Melanson (melanson@pcisys.net)
  27.  * CD-ROM XA ADPCM codec by BERO
  28.  * EA ADPCM decoder by Robin Kay (komadori@myrealbox.com)
  29.  *
  30.  * Features and limitations:
  31.  *
  32.  * Reference documents:
  33.  * http://www.pcisys.net/~melanson/codecs/simpleaudio.html
  34.  * http://www.geocities.com/SiliconValley/8682/aud3.txt
  35.  * http://openquicktime.sourceforge.net/plugins.htm
  36.  * XAnim sources (xa_codec.c) http://www.rasnaimaging.com/people/lapus/download.html
  37.  * http://www.cs.ucla.edu/~leec/mediabench/applications.html
  38.  * SoX source code http://home.sprynet.com/~cbagwell/sox.html
  39.  *
  40.  * CD-ROM XA:
  41.  * http://ku-www.ss.titech.ac.jp/~yatsushi/xaadpcm.html
  42.  * vagpack & depack http://homepages.compuserve.de/bITmASTER32/psx-index.html
  43.  * readstr http://www.geocities.co.jp/Playtown/2004/
  44.  */
  45. #define BLKSIZE 1024
  46. #define CLAMP_TO_SHORT(value) 
  47. if (value > 32767) 
  48.     value = 32767; 
  49. else if (value < -32768) 
  50.     value = -32768; 
  51. /* step_table[] and index_table[] are from the ADPCM reference source */
  52. /* This is the index table: */
  53. static const int index_table[16] = {
  54.     -1, -1, -1, -1, 2, 4, 6, 8,
  55.     -1, -1, -1, -1, 2, 4, 6, 8,
  56. };
  57. /** 
  58.  * This is the step table. Note that many programs use slight deviations from
  59.  * this table, but such deviations are negligible:
  60.  */
  61. static const int step_table[89] = {
  62.     7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
  63.     19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
  64.     50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
  65.     130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
  66.     337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
  67.     876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
  68.     2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
  69.     5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
  70.     15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
  71. };
  72. /* These are for MS-ADPCM */
  73. /* AdaptationTable[], AdaptCoeff1[], and AdaptCoeff2[] are from libsndfile */
  74. static const int AdaptationTable[] = {
  75.         230, 230, 230, 230, 307, 409, 512, 614,
  76.         768, 614, 512, 409, 307, 230, 230, 230
  77. };
  78. static const int AdaptCoeff1[] = {
  79.         256, 512, 0, 192, 240, 460, 392
  80. };
  81. static const int AdaptCoeff2[] = {
  82.         0, -256, 0, 64, 0, -208, -232
  83. };
  84. /* These are for CD-ROM XA ADPCM */
  85. static const int xa_adpcm_table[5][2] = {
  86.    {   0,   0 },
  87.    {  60,   0 },
  88.    { 115, -52 },
  89.    {  98, -55 },
  90.    { 122, -60 }
  91. };
  92. static const int ea_adpcm_table[] = {
  93.     0, 240, 460, 392, 0, 0, -208, -220, 0, 1,
  94.     3, 4, 7, 8, 10, 11, 0, -1, -3, -4
  95. };
  96. static const int ct_adpcm_table[8] = {
  97.     0x00E6, 0x00E6, 0x00E6, 0x00E6,
  98.     0x0133, 0x0199, 0x0200, 0x0266
  99. };
  100. // padded to zero where table size is less then 16
  101. static const int swf_index_tables[4][16] = {
  102.     /*2*/ { -1, 2 },
  103.     /*3*/ { -1, -1, 2, 4 },
  104.     /*4*/ { -1, -1, -1, -1, 2, 4, 6, 8 },
  105.     /*5*/ { -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16 }
  106. };
  107. static const int yamaha_indexscale[] = {
  108.     230, 230, 230, 230, 307, 409, 512, 614,
  109.     230, 230, 230, 230, 307, 409, 512, 614
  110. };
  111. static const int yamaha_difflookup[] = {
  112.     1, 3, 5, 7, 9, 11, 13, 15,
  113.     -1, -3, -5, -7, -9, -11, -13, -15
  114. };
  115. /* end of tables */
  116. typedef struct ADPCMChannelStatus {
  117.     int predictor;
  118.     short int step_index;
  119.     int step;
  120.     /* for encoding */
  121.     int prev_sample;
  122.     /* MS version */
  123.     short sample1;
  124.     short sample2;
  125.     int coeff1;
  126.     int coeff2;
  127.     int idelta;
  128. } ADPCMChannelStatus;
  129. typedef struct ADPCMContext {
  130.     int channel; /* for stereo MOVs, decode left, then decode right, then tell it's decoded */
  131.     ADPCMChannelStatus status[2];
  132.     short sample_buffer[32]; /* hold left samples while waiting for right samples */
  133.     /* SWF only */
  134.     int nb_bits;
  135.     int nb_samples;
  136. } ADPCMContext;
  137. /* XXX: implement encoding */
  138. #ifdef CONFIG_ENCODERS
  139. static int adpcm_encode_init(AVCodecContext *avctx)
  140. {
  141.     if (avctx->channels > 2)
  142.         return -1; /* only stereo or mono =) */
  143.     switch(avctx->codec->id) {
  144.     case CODEC_ID_ADPCM_IMA_QT:
  145.         av_log(avctx, AV_LOG_ERROR, "ADPCM: codec adpcm_ima_qt unsupported for encoding !n");
  146.         avctx->frame_size = 64; /* XXX: can multiple of avctx->channels * 64 (left and right blocks are interleaved) */
  147.         return -1;
  148.         break;
  149.     case CODEC_ID_ADPCM_IMA_WAV:
  150.         avctx->frame_size = (BLKSIZE - 4 * avctx->channels) * 8 / (4 * avctx->channels) + 1; /* each 16 bits sample gives one nibble */
  151.                                                              /* and we have 4 bytes per channel overhead */
  152.         avctx->block_align = BLKSIZE;
  153.         /* seems frame_size isn't taken into account... have to buffer the samples :-( */
  154.         break;
  155.     case CODEC_ID_ADPCM_MS:
  156.         avctx->frame_size = (BLKSIZE - 7 * avctx->channels) * 2 / avctx->channels + 2; /* each 16 bits sample gives one nibble */
  157.                                                              /* and we have 7 bytes per channel overhead */
  158.         avctx->block_align = BLKSIZE;
  159.         break;
  160.     case CODEC_ID_ADPCM_YAMAHA:
  161.         avctx->frame_size = BLKSIZE * avctx->channels;
  162.         avctx->block_align = BLKSIZE;
  163.         break;
  164.     default:
  165.         return -1;
  166.         break;
  167.     }
  168.     avctx->coded_frame= avcodec_alloc_frame();
  169.     avctx->coded_frame->key_frame= 1;
  170.     return 0;
  171. }
  172. static int adpcm_encode_close(AVCodecContext *avctx)
  173. {
  174.     av_freep(&avctx->coded_frame);
  175.     return 0;
  176. }
  177. static inline unsigned char adpcm_ima_compress_sample(ADPCMChannelStatus *c, short sample)
  178. {
  179.     int step_index;
  180.     unsigned char nibble;
  181.     
  182.     int sign = 0; /* sign bit of the nibble (MSB) */
  183.     int delta, predicted_delta;
  184.     delta = sample - c->prev_sample;
  185.     if (delta < 0) {
  186.         sign = 1;
  187.         delta = -delta;
  188.     }
  189.     step_index = c->step_index;
  190.     /* nibble = 4 * delta / step_table[step_index]; */
  191.     nibble = (delta << 2) / step_table[step_index];
  192.     if (nibble > 7)
  193.         nibble = 7;
  194.     step_index += index_table[nibble];
  195.     if (step_index < 0)
  196.         step_index = 0;
  197.     if (step_index > 88)
  198.         step_index = 88;
  199.     /* what the decoder will find */
  200.     predicted_delta = ((step_table[step_index] * nibble) / 4) + (step_table[step_index] / 8);
  201.     if (sign)
  202.         c->prev_sample -= predicted_delta;
  203.     else
  204.         c->prev_sample += predicted_delta;
  205.     CLAMP_TO_SHORT(c->prev_sample);
  206.     nibble += sign << 3; /* sign * 8 */   
  207.     /* save back */
  208.     c->step_index = step_index;
  209.     return nibble;
  210. }
  211. static inline unsigned char adpcm_ms_compress_sample(ADPCMChannelStatus *c, short sample)
  212. {
  213.     int predictor, nibble, bias;
  214.     predictor = (((c->sample1) * (c->coeff1)) + ((c->sample2) * (c->coeff2))) / 256;
  215.     
  216.     nibble= sample - predictor;
  217.     if(nibble>=0) bias= c->idelta/2;
  218.     else          bias=-c->idelta/2;
  219.         
  220.     nibble= (nibble + bias) / c->idelta;
  221.     nibble= clip(nibble, -8, 7)&0x0F;
  222.     
  223.     predictor += (signed)((nibble & 0x08)?(nibble - 0x10):(nibble)) * c->idelta;
  224.     CLAMP_TO_SHORT(predictor);
  225.     c->sample2 = c->sample1;
  226.     c->sample1 = predictor;
  227.     c->idelta = (AdaptationTable[(int)nibble] * c->idelta) >> 8;
  228.     if (c->idelta < 16) c->idelta = 16;
  229.     return nibble;
  230. }
  231. static inline unsigned char adpcm_yamaha_compress_sample(ADPCMChannelStatus *c, short sample)
  232. {
  233.     int i1 = 0, j1;
  234.     if(!c->step) {
  235.         c->predictor = 0;
  236.         c->step = 127;
  237.     }
  238.     j1 = sample - c->predictor;
  239.     j1 = (j1 * 8) / c->step;
  240.     i1 = abs(j1) / 2;
  241.     if (i1 > 7)
  242.         i1 = 7;
  243.     if (j1 < 0)
  244.         i1 += 8;
  245.     c->predictor = c->predictor + ((c->step * yamaha_difflookup[i1]) / 8);
  246.     CLAMP_TO_SHORT(c->predictor);
  247.     c->step = (c->step * yamaha_indexscale[i1]) >> 8;
  248.     c->step = clip(c->step, 127, 24567);
  249.     return i1;
  250. }
  251. static int adpcm_encode_frame(AVCodecContext *avctx,
  252.     unsigned char *frame, int buf_size, void *data)
  253. {
  254.     int n, i, st;
  255.     short *samples;
  256.     unsigned char *dst;
  257.     ADPCMContext *c = avctx->priv_data;
  258.     dst = frame;
  259.     samples = (short *)data;
  260.     st= avctx->channels == 2;
  261. /*    n = (BLKSIZE - 4 * avctx->channels) / (2 * 8 * avctx->channels); */
  262.     switch(avctx->codec->id) {
  263.     case CODEC_ID_ADPCM_IMA_QT: /* XXX: can't test until we get .mov writer */
  264.         break;
  265.     case CODEC_ID_ADPCM_IMA_WAV:
  266.         n = avctx->frame_size / 8;
  267.             c->status[0].prev_sample = (signed short)samples[0]; /* XXX */
  268. /*            c->status[0].step_index = 0; *//* XXX: not sure how to init the state machine */
  269.             *dst++ = (c->status[0].prev_sample) & 0xFF; /* little endian */
  270.             *dst++ = (c->status[0].prev_sample >> 8) & 0xFF;
  271.             *dst++ = (unsigned char)c->status[0].step_index;
  272.             *dst++ = 0; /* unknown */
  273.             samples++;
  274.             if (avctx->channels == 2) {
  275.                 c->status[1].prev_sample = (signed short)samples[1];
  276. /*                c->status[1].step_index = 0; */
  277.                 *dst++ = (c->status[1].prev_sample) & 0xFF;
  278.                 *dst++ = (c->status[1].prev_sample >> 8) & 0xFF;
  279.                 *dst++ = (unsigned char)c->status[1].step_index;
  280.                 *dst++ = 0;
  281.                 samples++;
  282.             }
  283.         
  284.             /* stereo: 4 bytes (8 samples) for left, 4 bytes for right, 4 bytes left, ... */
  285.             for (; n>0; n--) {
  286.                 *dst = adpcm_ima_compress_sample(&c->status[0], samples[0]) & 0x0F;
  287.                 *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels]) << 4) & 0xF0;
  288.                 dst++;
  289.                 *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 2]) & 0x0F;
  290.                 *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 3]) << 4) & 0xF0;
  291.                 dst++;
  292.                 *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 4]) & 0x0F;
  293.                 *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 5]) << 4) & 0xF0;
  294.                 dst++;
  295.                 *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 6]) & 0x0F;
  296.                 *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 7]) << 4) & 0xF0;
  297.                 dst++;
  298.                 /* right channel */
  299.                 if (avctx->channels == 2) {
  300.                     *dst = adpcm_ima_compress_sample(&c->status[1], samples[1]);
  301.                     *dst |= adpcm_ima_compress_sample(&c->status[1], samples[3]) << 4;
  302.                     dst++;
  303.                     *dst = adpcm_ima_compress_sample(&c->status[1], samples[5]);
  304.                     *dst |= adpcm_ima_compress_sample(&c->status[1], samples[7]) << 4;
  305.                     dst++;
  306.                     *dst = adpcm_ima_compress_sample(&c->status[1], samples[9]);
  307.                     *dst |= adpcm_ima_compress_sample(&c->status[1], samples[11]) << 4;
  308.                     dst++;
  309.                     *dst = adpcm_ima_compress_sample(&c->status[1], samples[13]);
  310.                     *dst |= adpcm_ima_compress_sample(&c->status[1], samples[15]) << 4;
  311.                     dst++;
  312.                 }
  313.                 samples += 8 * avctx->channels;
  314.             }
  315.         break;
  316.     case CODEC_ID_ADPCM_MS:
  317.         for(i=0; i<avctx->channels; i++){
  318.             int predictor=0;
  319.             *dst++ = predictor;
  320.             c->status[i].coeff1 = AdaptCoeff1[predictor];
  321.             c->status[i].coeff2 = AdaptCoeff2[predictor];
  322.         }
  323.         for(i=0; i<avctx->channels; i++){
  324.             if (c->status[i].idelta < 16) 
  325.                 c->status[i].idelta = 16;
  326.             
  327.             *dst++ = c->status[i].idelta & 0xFF;
  328.             *dst++ = c->status[i].idelta >> 8;
  329.         }
  330.         for(i=0; i<avctx->channels; i++){
  331.             c->status[i].sample1= *samples++;
  332.             *dst++ = c->status[i].sample1 & 0xFF;
  333.             *dst++ = c->status[i].sample1 >> 8;
  334.         }
  335.         for(i=0; i<avctx->channels; i++){
  336.             c->status[i].sample2= *samples++;
  337.             *dst++ = c->status[i].sample2 & 0xFF;
  338.             *dst++ = c->status[i].sample2 >> 8;
  339.         }
  340.         for(i=7*avctx->channels; i<avctx->block_align; i++) {
  341.             int nibble;
  342.             nibble = adpcm_ms_compress_sample(&c->status[ 0], *samples++)<<4;
  343.             nibble|= adpcm_ms_compress_sample(&c->status[st], *samples++);
  344.             *dst++ = nibble;
  345.         }
  346.         break;
  347.     case CODEC_ID_ADPCM_YAMAHA:
  348.         n = avctx->frame_size / 2;
  349.         for (; n>0; n--) {
  350.             for(i = 0; i < avctx->channels; i++) {
  351.                 int nibble;
  352.                 nibble  = adpcm_yamaha_compress_sample(&c->status[i], samples[i]);
  353.                 nibble |= adpcm_yamaha_compress_sample(&c->status[i], samples[i+avctx->channels]) << 4;
  354.                 *dst++ = nibble;
  355.             }
  356.             samples += 2 * avctx->channels;
  357.         }
  358.         break;
  359.     default:
  360.         return -1;
  361.     }
  362.     return dst - frame;
  363. }
  364. #endif //CONFIG_ENCODERS
  365. static int adpcm_decode_init(AVCodecContext * avctx)
  366. {
  367.     ADPCMContext *c = avctx->priv_data;
  368.     c->channel = 0;
  369.     c->status[0].predictor = c->status[1].predictor = 0;
  370.     c->status[0].step_index = c->status[1].step_index = 0;
  371.     c->status[0].step = c->status[1].step = 0;
  372.     switch(avctx->codec->id) {
  373.     case CODEC_ID_ADPCM_CT:
  374. c->status[0].step = c->status[1].step = 511;
  375. break;
  376.     default:
  377.         break;
  378.     }
  379.     return 0;
  380. }
  381. static inline short adpcm_ima_expand_nibble(ADPCMChannelStatus *c, char nibble, int shift)
  382. {
  383.     int step_index;
  384.     int predictor;
  385.     int sign, delta, diff, step;
  386.     step = step_table[c->step_index];
  387.     step_index = c->step_index + index_table[(unsigned)nibble];
  388.     if (step_index < 0) step_index = 0;
  389.     else if (step_index > 88) step_index = 88;
  390.     sign = nibble & 8;
  391.     delta = nibble & 7;
  392.     /* perform direct multiplication instead of series of jumps proposed by
  393.      * the reference ADPCM implementation since modern CPUs can do the mults
  394.      * quickly enough */
  395.     diff = ((2 * delta + 1) * step) >> shift;
  396.     predictor = c->predictor;
  397.     if (sign) predictor -= diff;
  398.     else predictor += diff;
  399.     CLAMP_TO_SHORT(predictor);
  400.     c->predictor = predictor;
  401.     c->step_index = step_index;
  402.     return (short)predictor;
  403. }
  404. static inline short adpcm_ms_expand_nibble(ADPCMChannelStatus *c, char nibble)
  405. {
  406.     int predictor;
  407.     predictor = (((c->sample1) * (c->coeff1)) + ((c->sample2) * (c->coeff2))) / 256;
  408.     predictor += (signed)((nibble & 0x08)?(nibble - 0x10):(nibble)) * c->idelta;
  409.     CLAMP_TO_SHORT(predictor);
  410.     c->sample2 = c->sample1;
  411.     c->sample1 = predictor;
  412.     c->idelta = (AdaptationTable[(int)nibble] * c->idelta) >> 8;
  413.     if (c->idelta < 16) c->idelta = 16;
  414.     return (short)predictor;
  415. }
  416. static inline short adpcm_ct_expand_nibble(ADPCMChannelStatus *c, char nibble)
  417. {
  418.     int predictor;
  419.     int sign, delta, diff;
  420.     int new_step;
  421.     sign = nibble & 8;
  422.     delta = nibble & 7;
  423.     /* perform direct multiplication instead of series of jumps proposed by
  424.      * the reference ADPCM implementation since modern CPUs can do the mults
  425.      * quickly enough */
  426.     diff = ((2 * delta + 1) * c->step) >> 3;
  427.     predictor = c->predictor;
  428.     /* predictor update is not so trivial: predictor is multiplied on 254/256 before updating */
  429.     if(sign)
  430. predictor = ((predictor * 254) >> 8) - diff;
  431.     else
  432.      predictor = ((predictor * 254) >> 8) + diff;
  433.     /* calculate new step and clamp it to range 511..32767 */
  434.     new_step = (ct_adpcm_table[nibble & 7] * c->step) >> 8;
  435.     c->step = new_step;
  436.     if(c->step < 511)
  437. c->step = 511;
  438.     if(c->step > 32767)
  439. c->step = 32767;
  440.     CLAMP_TO_SHORT(predictor);
  441.     c->predictor = predictor;
  442.     return (short)predictor;
  443. }
  444. static inline short adpcm_yamaha_expand_nibble(ADPCMChannelStatus *c, unsigned char nibble)
  445. {
  446.     if(!c->step) {
  447.         c->predictor = 0;
  448.         c->step = 127;
  449.     }
  450.     c->predictor += (c->step * yamaha_difflookup[nibble]) / 8;
  451.     CLAMP_TO_SHORT(c->predictor);
  452.     c->step = (c->step * yamaha_indexscale[nibble]) >> 8;
  453.     c->step = clip(c->step, 127, 24567);
  454.     return c->predictor;
  455. }
  456. static void xa_decode(short *out, const unsigned char *in, 
  457.     ADPCMChannelStatus *left, ADPCMChannelStatus *right, int inc)
  458. {
  459.     int i, j;
  460.     int shift,filter,f0,f1;
  461.     int s_1,s_2;
  462.     int d,s,t;
  463.     for(i=0;i<4;i++) {
  464.         shift  = 12 - (in[4+i*2] & 15);
  465.         filter = in[4+i*2] >> 4;
  466.         f0 = xa_adpcm_table[filter][0];
  467.         f1 = xa_adpcm_table[filter][1];
  468.         s_1 = left->sample1;
  469.         s_2 = left->sample2;
  470.         for(j=0;j<28;j++) {
  471.             d = in[16+i+j*4];
  472.             t = (signed char)(d<<4)>>4;
  473.             s = ( t<<shift ) + ((s_1*f0 + s_2*f1+32)>>6);
  474.             CLAMP_TO_SHORT(s);
  475.             *out = s;
  476.             out += inc;
  477.             s_2 = s_1;
  478.             s_1 = s;
  479.         }
  480.         if (inc==2) { /* stereo */
  481.             left->sample1 = s_1;
  482.             left->sample2 = s_2;
  483.             s_1 = right->sample1;
  484.             s_2 = right->sample2;
  485.             out = out + 1 - 28*2;
  486.         }
  487.         shift  = 12 - (in[5+i*2] & 15);
  488.         filter = in[5+i*2] >> 4;
  489.         f0 = xa_adpcm_table[filter][0];
  490.         f1 = xa_adpcm_table[filter][1];
  491.         for(j=0;j<28;j++) {
  492.             d = in[16+i+j*4];
  493.             t = (signed char)d >> 4;
  494.             s = ( t<<shift ) + ((s_1*f0 + s_2*f1+32)>>6);
  495.             CLAMP_TO_SHORT(s);
  496.             *out = s;
  497.             out += inc;
  498.             s_2 = s_1;
  499.             s_1 = s;
  500.         }
  501.         if (inc==2) { /* stereo */
  502.             right->sample1 = s_1;
  503.             right->sample2 = s_2;
  504.             out -= 1;
  505.         } else {
  506.             left->sample1 = s_1;
  507.             left->sample2 = s_2;
  508.         }
  509.     }
  510. }
  511. /* DK3 ADPCM support macro */
  512. #define DK3_GET_NEXT_NIBBLE() 
  513.     if (decode_top_nibble_next) 
  514.     { 
  515.         nibble = (last_byte >> 4) & 0x0F; 
  516.         decode_top_nibble_next = 0; 
  517.     } 
  518.     else 
  519.     { 
  520.         last_byte = *src++; 
  521.         if (src >= buf + buf_size) break; 
  522.         nibble = last_byte & 0x0F; 
  523.         decode_top_nibble_next = 1; 
  524.     }
  525. static int adpcm_decode_frame(AVCodecContext *avctx,
  526.     void *data, int *data_size,
  527.     uint8_t *buf, int buf_size)
  528. {
  529.     ADPCMContext *c = avctx->priv_data;
  530.     ADPCMChannelStatus *cs;
  531.     int n, m, channel, i;
  532.     int block_predictor[2];
  533.     short *samples;
  534.     uint8_t *src;
  535.     int st; /* stereo */
  536.     /* DK3 ADPCM accounting variables */
  537.     unsigned char last_byte = 0;
  538.     unsigned char nibble;
  539.     int decode_top_nibble_next = 0;
  540.     int diff_channel;
  541.     /* EA ADPCM state variables */
  542.     uint32_t samples_in_chunk;
  543.     int32_t previous_left_sample, previous_right_sample;
  544.     int32_t current_left_sample, current_right_sample;
  545.     int32_t next_left_sample, next_right_sample;
  546.     int32_t coeff1l, coeff2l, coeff1r, coeff2r;
  547.     uint8_t shift_left, shift_right;
  548.     int count1, count2;
  549.     if (!buf_size)
  550.         return 0;
  551.     samples = data;
  552.     src = buf;
  553.     st = avctx->channels == 2;
  554.     switch(avctx->codec->id) {
  555.     case CODEC_ID_ADPCM_IMA_QT:
  556.         n = (buf_size - 2);/* >> 2*avctx->channels;*/
  557.         channel = c->channel;
  558.         cs = &(c->status[channel]);
  559.         /* (pppppp) (piiiiiii) */
  560.         /* Bits 15-7 are the _top_ 9 bits of the 16-bit initial predictor value */
  561.         cs->predictor = (*src++) << 8;
  562.         cs->predictor |= (*src & 0x80);
  563.         cs->predictor &= 0xFF80;
  564.         /* sign extension */
  565.         if(cs->predictor & 0x8000)
  566.             cs->predictor -= 0x10000;
  567.         CLAMP_TO_SHORT(cs->predictor);
  568.         cs->step_index = (*src++) & 0x7F;
  569.         if (cs->step_index > 88) av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %in", cs->step_index);
  570.         if (cs->step_index > 88) cs->step_index = 88;
  571.         cs->step = step_table[cs->step_index];
  572.         if (st && channel)
  573.             samples++;
  574.         for(m=32; n>0 && m>0; n--, m--) { /* in QuickTime, IMA is encoded by chuncks of 34 bytes (=64 samples) */
  575.             *samples = adpcm_ima_expand_nibble(cs, src[0] & 0x0F, 3);
  576.             samples += avctx->channels;
  577.             *samples = adpcm_ima_expand_nibble(cs, (src[0] >> 4) & 0x0F, 3);
  578.             samples += avctx->channels;
  579.             src ++;
  580.         }
  581.         if(st) { /* handle stereo interlacing */
  582.             c->channel = (channel + 1) % 2; /* we get one packet for left, then one for right data */
  583.             if(channel == 1) { /* wait for the other packet before outputing anything */
  584.                 return src - buf;
  585.             }
  586.         }
  587.         break;
  588.     case CODEC_ID_ADPCM_IMA_WAV:
  589.         if (avctx->block_align != 0 && buf_size > avctx->block_align)
  590.             buf_size = avctx->block_align;
  591.         for(i=0; i<avctx->channels; i++){
  592.             cs = &(c->status[i]);
  593.             cs->predictor = *src++;
  594.             cs->predictor |= (*src++) << 8;
  595.             if(cs->predictor & 0x8000)
  596.                 cs->predictor -= 0x10000;
  597.             CLAMP_TO_SHORT(cs->predictor);
  598. // XXX: is this correct ??: *samples++ = cs->predictor;
  599.             cs->step_index = *src++;
  600.             if (cs->step_index < 0) cs->step_index = 0;
  601.             if (cs->step_index > 88) cs->step_index = 88;
  602.             if (*src++) av_log(avctx, AV_LOG_ERROR, "unused byte should be null !!n"); /* unused */
  603.         }
  604.         for(m=4; src < (buf + buf_size);) {
  605.     *samples++ = adpcm_ima_expand_nibble(&c->status[0], src[0] & 0x0F, 3);
  606.             if (st)
  607.                 *samples++ = adpcm_ima_expand_nibble(&c->status[1], src[4] & 0x0F, 3);
  608.             *samples++ = adpcm_ima_expand_nibble(&c->status[0], (src[0] >> 4) & 0x0F, 3);
  609.     if (st) {
  610.                 *samples++ = adpcm_ima_expand_nibble(&c->status[1], (src[4] >> 4) & 0x0F, 3);
  611. if (!--m) {
  612.     m=4;
  613.     src+=4;
  614. }
  615.     }
  616.     src++;
  617. }
  618.         break;
  619.     case CODEC_ID_ADPCM_4XM:
  620.         cs = &(c->status[0]);
  621.         c->status[0].predictor= (int16_t)(src[0] + (src[1]<<8)); src+=2;
  622.         if(st){
  623.             c->status[1].predictor= (int16_t)(src[0] + (src[1]<<8)); src+=2;
  624.         }
  625.         c->status[0].step_index= (int16_t)(src[0] + (src[1]<<8)); src+=2;
  626.         if(st){
  627.             c->status[1].step_index= (int16_t)(src[0] + (src[1]<<8)); src+=2;
  628.         }
  629.         if (cs->step_index < 0) cs->step_index = 0;
  630.         if (cs->step_index > 88) cs->step_index = 88;
  631.         m= (buf_size - (src - buf))>>st;
  632.         for(i=0; i<m; i++) {
  633.     *samples++ = adpcm_ima_expand_nibble(&c->status[0], src[i] & 0x0F, 4);
  634.             if (st)
  635.                 *samples++ = adpcm_ima_expand_nibble(&c->status[1], src[i+m] & 0x0F, 4);
  636.             *samples++ = adpcm_ima_expand_nibble(&c->status[0], src[i] >> 4, 4);
  637.     if (st)
  638.                 *samples++ = adpcm_ima_expand_nibble(&c->status[1], src[i+m] >> 4, 4);
  639. }
  640.         src += m<<st;
  641.         break;
  642.     case CODEC_ID_ADPCM_MS:
  643.         if (avctx->block_align != 0 && buf_size > avctx->block_align)
  644.             buf_size = avctx->block_align;
  645.         n = buf_size - 7 * avctx->channels;
  646.         if (n < 0)
  647.             return -1;
  648.         block_predictor[0] = clip(*src++, 0, 7);
  649.         block_predictor[1] = 0;
  650.         if (st)
  651.             block_predictor[1] = clip(*src++, 0, 7);
  652.         c->status[0].idelta = (int16_t)((*src & 0xFF) | ((src[1] << 8) & 0xFF00));
  653.         src+=2;
  654.         if (st){
  655.             c->status[1].idelta = (int16_t)((*src & 0xFF) | ((src[1] << 8) & 0xFF00));
  656.             src+=2;
  657.         }
  658.         c->status[0].coeff1 = AdaptCoeff1[block_predictor[0]];
  659.         c->status[0].coeff2 = AdaptCoeff2[block_predictor[0]];
  660.         c->status[1].coeff1 = AdaptCoeff1[block_predictor[1]];
  661.         c->status[1].coeff2 = AdaptCoeff2[block_predictor[1]];
  662.         
  663.         c->status[0].sample1 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00));
  664.         src+=2;
  665.         if (st) c->status[1].sample1 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00));
  666.         if (st) src+=2;
  667.         c->status[0].sample2 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00));
  668.         src+=2;
  669.         if (st) c->status[1].sample2 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00));
  670.         if (st) src+=2;
  671.         *samples++ = c->status[0].sample1;
  672.         if (st) *samples++ = c->status[1].sample1;
  673.         *samples++ = c->status[0].sample2;
  674.         if (st) *samples++ = c->status[1].sample2;
  675.         for(;n>0;n--) {
  676.             *samples++ = adpcm_ms_expand_nibble(&c->status[0], (src[0] >> 4) & 0x0F);
  677.             *samples++ = adpcm_ms_expand_nibble(&c->status[st], src[0] & 0x0F);
  678.             src ++;
  679.         }
  680.         break;
  681.     case CODEC_ID_ADPCM_IMA_DK4:
  682.         if (avctx->block_align != 0 && buf_size > avctx->block_align)
  683.             buf_size = avctx->block_align;
  684.         c->status[0].predictor = (int16_t)(src[0] | (src[1] << 8));
  685.         c->status[0].step_index = src[2];
  686.         src += 4;
  687.         *samples++ = c->status[0].predictor;
  688.         if (st) {
  689.             c->status[1].predictor = (int16_t)(src[0] | (src[1] << 8));
  690.             c->status[1].step_index = src[2];
  691.             src += 4;
  692.             *samples++ = c->status[1].predictor;
  693.         }
  694.         while (src < buf + buf_size) {
  695.             /* take care of the top nibble (always left or mono channel) */
  696.             *samples++ = adpcm_ima_expand_nibble(&c->status[0], 
  697.                 (src[0] >> 4) & 0x0F, 3);
  698.             /* take care of the bottom nibble, which is right sample for
  699.              * stereo, or another mono sample */
  700.             if (st)
  701.                 *samples++ = adpcm_ima_expand_nibble(&c->status[1], 
  702.                     src[0] & 0x0F, 3);
  703.             else
  704.                 *samples++ = adpcm_ima_expand_nibble(&c->status[0], 
  705.                     src[0] & 0x0F, 3);
  706.             src++;
  707.         }
  708.         break;
  709.     case CODEC_ID_ADPCM_IMA_DK3:
  710.         if (avctx->block_align != 0 && buf_size > avctx->block_align)
  711.             buf_size = avctx->block_align;
  712.         c->status[0].predictor = (int16_t)(src[10] | (src[11] << 8));
  713.         c->status[1].predictor = (int16_t)(src[12] | (src[13] << 8));
  714.         c->status[0].step_index = src[14];
  715.         c->status[1].step_index = src[15];
  716.         /* sign extend the predictors */
  717.         src += 16;
  718.         diff_channel = c->status[1].predictor;
  719.         /* the DK3_GET_NEXT_NIBBLE macro issues the break statement when
  720.          * the buffer is consumed */
  721.         while (1) {
  722.             /* for this algorithm, c->status[0] is the sum channel and
  723.              * c->status[1] is the diff channel */
  724.             /* process the first predictor of the sum channel */
  725.             DK3_GET_NEXT_NIBBLE();
  726.             adpcm_ima_expand_nibble(&c->status[0], nibble, 3);
  727.             /* process the diff channel predictor */
  728.             DK3_GET_NEXT_NIBBLE();
  729.             adpcm_ima_expand_nibble(&c->status[1], nibble, 3);
  730.             /* process the first pair of stereo PCM samples */
  731.             diff_channel = (diff_channel + c->status[1].predictor) / 2;
  732.             *samples++ = c->status[0].predictor + c->status[1].predictor;
  733.             *samples++ = c->status[0].predictor - c->status[1].predictor;
  734.             /* process the second predictor of the sum channel */
  735.             DK3_GET_NEXT_NIBBLE();
  736.             adpcm_ima_expand_nibble(&c->status[0], nibble, 3);
  737.             /* process the second pair of stereo PCM samples */
  738.             diff_channel = (diff_channel + c->status[1].predictor) / 2;
  739.             *samples++ = c->status[0].predictor + c->status[1].predictor;
  740.             *samples++ = c->status[0].predictor - c->status[1].predictor;
  741.         }
  742.         break;
  743.     case CODEC_ID_ADPCM_IMA_WS:
  744.         /* no per-block initialization; just start decoding the data */
  745.         while (src < buf + buf_size) {
  746.             if (st) {
  747.                 *samples++ = adpcm_ima_expand_nibble(&c->status[0], 
  748.                     (src[0] >> 4) & 0x0F, 3);
  749.                 *samples++ = adpcm_ima_expand_nibble(&c->status[1], 
  750.                     src[0] & 0x0F, 3);
  751.             } else {
  752.                 *samples++ = adpcm_ima_expand_nibble(&c->status[0], 
  753.                     (src[0] >> 4) & 0x0F, 3);
  754.                 *samples++ = adpcm_ima_expand_nibble(&c->status[0], 
  755.                     src[0] & 0x0F, 3);
  756.             }
  757.             src++;
  758.         }
  759.         break;
  760.     case CODEC_ID_ADPCM_XA:
  761.         c->status[0].sample1 = c->status[0].sample2 = 
  762.         c->status[1].sample1 = c->status[1].sample2 = 0;
  763.         while (buf_size >= 128) {
  764.             xa_decode(samples, src, &c->status[0], &c->status[1], 
  765.                 avctx->channels);
  766.             src += 128;
  767.             samples += 28 * 8;
  768.             buf_size -= 128;
  769.         }
  770.         break;
  771.     case CODEC_ID_ADPCM_EA:
  772.         samples_in_chunk = LE_32(src);
  773.         if (samples_in_chunk >= ((buf_size - 12) * 2)) {
  774.             src += buf_size;
  775.             break;
  776.         }
  777.         src += 4;
  778.         current_left_sample = (int16_t)LE_16(src);
  779.         src += 2;
  780.         previous_left_sample = (int16_t)LE_16(src);
  781.         src += 2;
  782.         current_right_sample = (int16_t)LE_16(src);
  783.         src += 2;
  784.         previous_right_sample = (int16_t)LE_16(src);
  785.         src += 2;
  786.         for (count1 = 0; count1 < samples_in_chunk/28;count1++) {
  787.             coeff1l = ea_adpcm_table[(*src >> 4) & 0x0F];
  788.             coeff2l = ea_adpcm_table[((*src >> 4) & 0x0F) + 4];
  789.             coeff1r = ea_adpcm_table[*src & 0x0F];
  790.             coeff2r = ea_adpcm_table[(*src & 0x0F) + 4];
  791.             src++;
  792.             shift_left = ((*src >> 4) & 0x0F) + 8;
  793.             shift_right = (*src & 0x0F) + 8;
  794.             src++;
  795.             for (count2 = 0; count2 < 28; count2++) {
  796.                 next_left_sample = (((*src & 0xF0) << 24) >> shift_left);
  797.                 next_right_sample = (((*src & 0x0F) << 28) >> shift_right);
  798.                 src++;
  799.                 next_left_sample = (next_left_sample + 
  800.                     (current_left_sample * coeff1l) + 
  801.                     (previous_left_sample * coeff2l) + 0x80) >> 8;
  802.                 next_right_sample = (next_right_sample + 
  803.                     (current_right_sample * coeff1r) + 
  804.                     (previous_right_sample * coeff2r) + 0x80) >> 8;
  805.                 CLAMP_TO_SHORT(next_left_sample);
  806.                 CLAMP_TO_SHORT(next_right_sample);
  807.                 previous_left_sample = current_left_sample;
  808.                 current_left_sample = next_left_sample;
  809.                 previous_right_sample = current_right_sample;
  810.                 current_right_sample = next_right_sample;
  811.                 *samples++ = (unsigned short)current_left_sample;
  812.                 *samples++ = (unsigned short)current_right_sample;
  813.             }
  814.         }
  815.         break;
  816.     case CODEC_ID_ADPCM_IMA_SMJPEG:
  817.         c->status[0].predictor = *src;
  818.         src += 2;
  819.         c->status[0].step_index = *src++;
  820.         src++;  /* skip another byte before getting to the meat */
  821.         while (src < buf + buf_size) {
  822.             *samples++ = adpcm_ima_expand_nibble(&c->status[0],
  823.                 *src & 0x0F, 3);
  824.             *samples++ = adpcm_ima_expand_nibble(&c->status[0],
  825.                 (*src >> 4) & 0x0F, 3);
  826.             src++;
  827.         }
  828.         break;
  829.     case CODEC_ID_ADPCM_CT:
  830. while (src < buf + buf_size) {
  831.             if (st) {
  832.                 *samples++ = adpcm_ct_expand_nibble(&c->status[0], 
  833.                     (src[0] >> 4) & 0x0F);
  834.                 *samples++ = adpcm_ct_expand_nibble(&c->status[1], 
  835.                     src[0] & 0x0F);
  836.             } else {
  837.                 *samples++ = adpcm_ct_expand_nibble(&c->status[0], 
  838.                     (src[0] >> 4) & 0x0F);
  839.                 *samples++ = adpcm_ct_expand_nibble(&c->status[0], 
  840.                     src[0] & 0x0F);
  841.             }
  842.     src++;
  843.         }
  844.         break;
  845.     case CODEC_ID_ADPCM_SWF:
  846.     {
  847. GetBitContext gb;
  848. const int *table;
  849. int k0, signmask;
  850. int size = buf_size*8;
  851. init_get_bits(&gb, buf, size);
  852. // first frame, read bits & inital values
  853. if (!c->nb_bits)
  854. {
  855.     c->nb_bits = get_bits(&gb, 2)+2;
  856. //     av_log(NULL,AV_LOG_INFO,"nb_bits: %dn", c->nb_bits);
  857. }
  858. table = swf_index_tables[c->nb_bits-2];
  859. k0 = 1 << (c->nb_bits-2);
  860. signmask = 1 << (c->nb_bits-1);
  861. while (get_bits_count(&gb) <= size)
  862. {
  863.     int i;
  864.     c->nb_samples++;
  865.     // wrap around at every 4096 samples...
  866.     if ((c->nb_samples & 0xfff) == 1)
  867.     {
  868. for (i = 0; i <= st; i++)
  869. {
  870.     *samples++ = c->status[i].predictor = get_sbits(&gb, 16);
  871.     c->status[i].step_index = get_bits(&gb, 6);
  872. }
  873.     }
  874.     // similar to IMA adpcm
  875.     for (i = 0; i <= st; i++)
  876.     {
  877. int delta = get_bits(&gb, c->nb_bits);
  878. int step = step_table[c->status[i].step_index];
  879. long vpdiff = 0; // vpdiff = (delta+0.5)*step/4
  880. int k = k0;
  881. do {
  882.     if (delta & k)
  883. vpdiff += step;
  884.     step >>= 1;
  885.     k >>= 1;
  886. } while(k);
  887. vpdiff += step;
  888. if (delta & signmask)
  889.     c->status[i].predictor -= vpdiff;
  890. else
  891.     c->status[i].predictor += vpdiff;
  892. c->status[i].step_index += table[delta & (~signmask)];
  893. c->status[i].step_index = clip(c->status[i].step_index, 0, 88);
  894. c->status[i].predictor = clip(c->status[i].predictor, -32768, 32767);
  895. *samples++ = c->status[i].predictor;
  896.     }
  897. }
  898. // src += get_bits_count(&gb)*8;
  899. src += size;
  900. break;
  901.     }
  902.     case CODEC_ID_ADPCM_YAMAHA:
  903.         while (src < buf + buf_size) {
  904.             if (st) {
  905.                 *samples++ = adpcm_yamaha_expand_nibble(&c->status[0],
  906.                         src[0] & 0x0F);
  907.                 *samples++ = adpcm_yamaha_expand_nibble(&c->status[1],
  908.                         (src[0] >> 4) & 0x0F);
  909.             } else {
  910.                 *samples++ = adpcm_yamaha_expand_nibble(&c->status[0],
  911.                         src[0] & 0x0F);
  912.                 *samples++ = adpcm_yamaha_expand_nibble(&c->status[0],
  913.                         (src[0] >> 4) & 0x0F);
  914.             }
  915.             src++;
  916.         }
  917.         break;
  918.     default:
  919.         return -1;
  920.     }
  921.     *data_size = (uint8_t *)samples - (uint8_t *)data;
  922.     return src - buf;
  923. }
  924. #ifdef CONFIG_ENCODERS
  925. #define ADPCM_ENCODER(id,name)                  
  926. AVCodec name ## _encoder = {                    
  927.     #name,                                      
  928.     CODEC_TYPE_AUDIO,                           
  929.     id,                                         
  930.     sizeof(ADPCMContext),                       
  931.     adpcm_encode_init,                          
  932.     adpcm_encode_frame,                         
  933.     adpcm_encode_close,                         
  934.     NULL,                                       
  935. };
  936. #else
  937. #define ADPCM_ENCODER(id,name)
  938. #endif
  939. #ifdef CONFIG_DECODERS
  940. #define ADPCM_DECODER(id,name)                  
  941. AVCodec name ## _decoder = {                    
  942.     #name,                                      
  943.     CODEC_TYPE_AUDIO,                           
  944.     id,                                         
  945.     sizeof(ADPCMContext),                       
  946.     adpcm_decode_init,                          
  947.     NULL,                                       
  948.     NULL,                                       
  949.     adpcm_decode_frame,                         
  950. };
  951. #else
  952. #define ADPCM_DECODER(id,name)
  953. #endif
  954. #define ADPCM_CODEC(id, name)                   
  955. ADPCM_ENCODER(id,name) ADPCM_DECODER(id,name)
  956. ADPCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
  957. ADPCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
  958. ADPCM_CODEC(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3);
  959. ADPCM_CODEC(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4);
  960. ADPCM_CODEC(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws);
  961. ADPCM_CODEC(CODEC_ID_ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg);
  962. ADPCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
  963. ADPCM_CODEC(CODEC_ID_ADPCM_4XM, adpcm_4xm);
  964. ADPCM_CODEC(CODEC_ID_ADPCM_XA, adpcm_xa);
  965. ADPCM_CODEC(CODEC_ID_ADPCM_ADX, adpcm_adx);
  966. ADPCM_CODEC(CODEC_ID_ADPCM_EA, adpcm_ea);
  967. ADPCM_CODEC(CODEC_ID_ADPCM_CT, adpcm_ct);
  968. ADPCM_CODEC(CODEC_ID_ADPCM_SWF, adpcm_swf);
  969. ADPCM_CODEC(CODEC_ID_ADPCM_YAMAHA, adpcm_yamaha);
  970. #undef ADPCM_CODEC