static int adpcm_encode_frame(AVCodecContext *avctx,

                            unsigned char *frame, int buf_size, void *data)

{

    int n, i, st;

    short *samples;

    unsigned char *dst;

    ADPCMContext *c = avctx->priv_data;



    dst = frame;

    samples = (short *)data;

    st= avctx->channels == 2;

/*    n = (BLKSIZE - 4 * avctx->channels) / (2 * 8 * avctx->channels); */



    switch(avctx->codec->id) {

    case CODEC_ID_ADPCM_IMA_QT: /* XXX: can't test until we get .mov writer */

        break;

    case CODEC_ID_ADPCM_IMA_WAV:

        n = avctx->frame_size / 8;

            c->status[0].prev_sample = (signed short)samples[0]; /* XXX */

/*            c->status[0].step_index = 0; *//* XXX: not sure how to init the state machine */

            bytestream_put_le16(&dst, c->status[0].prev_sample);

            *dst++ = (unsigned char)c->status[0].step_index;

            *dst++ = 0; /* unknown */

            samples++;

            if (avctx->channels == 2) {

                c->status[1].prev_sample = (signed short)samples[1];

/*                c->status[1].step_index = 0; */

                bytestream_put_le16(&dst, c->status[1].prev_sample);

                *dst++ = (unsigned char)c->status[1].step_index;

                *dst++ = 0;

                samples++;

            }



            /* stereo: 4 bytes (8 samples) for left, 4 bytes for right, 4 bytes left, ... */

            if(avctx->trellis > 0) {

                uint8_t buf[2][n*8];

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n*8);

                if(avctx->channels == 2)

                    adpcm_compress_trellis(avctx, samples+1, buf[1], &c->status[1], n*8);

                for(i=0; i<n; i++) {

                    *dst++ = buf[0][8*i+0] | (buf[0][8*i+1] << 4);

                    *dst++ = buf[0][8*i+2] | (buf[0][8*i+3] << 4);

                    *dst++ = buf[0][8*i+4] | (buf[0][8*i+5] << 4);

                    *dst++ = buf[0][8*i+6] | (buf[0][8*i+7] << 4);

                    if (avctx->channels == 2) {

                        *dst++ = buf[1][8*i+0] | (buf[1][8*i+1] << 4);

                        *dst++ = buf[1][8*i+2] | (buf[1][8*i+3] << 4);

                        *dst++ = buf[1][8*i+4] | (buf[1][8*i+5] << 4);

                        *dst++ = buf[1][8*i+6] | (buf[1][8*i+7] << 4);

                    }

                }

            } else

            for (; n>0; n--) {

                *dst = adpcm_ima_compress_sample(&c->status[0], samples[0]) & 0x0F;

                *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels]) << 4) & 0xF0;

                dst++;

                *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 2]) & 0x0F;

                *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 3]) << 4) & 0xF0;

                dst++;

                *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 4]) & 0x0F;

                *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 5]) << 4) & 0xF0;

                dst++;

                *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 6]) & 0x0F;

                *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 7]) << 4) & 0xF0;

                dst++;

                /* right channel */

                if (avctx->channels == 2) {

                    *dst = adpcm_ima_compress_sample(&c->status[1], samples[1]);

                    *dst |= adpcm_ima_compress_sample(&c->status[1], samples[3]) << 4;

                    dst++;

                    *dst = adpcm_ima_compress_sample(&c->status[1], samples[5]);

                    *dst |= adpcm_ima_compress_sample(&c->status[1], samples[7]) << 4;

                    dst++;

                    *dst = adpcm_ima_compress_sample(&c->status[1], samples[9]);

                    *dst |= adpcm_ima_compress_sample(&c->status[1], samples[11]) << 4;

                    dst++;

                    *dst = adpcm_ima_compress_sample(&c->status[1], samples[13]);

                    *dst |= adpcm_ima_compress_sample(&c->status[1], samples[15]) << 4;

                    dst++;

                }

                samples += 8 * avctx->channels;

            }

        break;

    case CODEC_ID_ADPCM_SWF:

    {

        int i;

        PutBitContext pb;

        init_put_bits(&pb, dst, buf_size*8);



        n = avctx->frame_size-1;



        //Store AdpcmCodeSize

        put_bits(&pb, 2, 2);                //Set 4bits flash adpcm format



        //Init the encoder state

        for(i=0; i<avctx->channels; i++){

            c->status[i].step_index = av_clip(c->status[i].step_index, 0, 63); // clip step so it fits 6 bits

            put_bits(&pb, 16, samples[i] & 0xFFFF);

            put_bits(&pb, 6, c->status[i].step_index);

            c->status[i].prev_sample = (signed short)samples[i];

        }



        if(avctx->trellis > 0) {

            uint8_t buf[2][n];

            adpcm_compress_trellis(avctx, samples+2, buf[0], &c->status[0], n);

            if (avctx->channels == 2)

                adpcm_compress_trellis(avctx, samples+3, buf[1], &c->status[1], n);

            for(i=0; i<n; i++) {

                put_bits(&pb, 4, buf[0][i]);

                if (avctx->channels == 2)

                    put_bits(&pb, 4, buf[1][i]);

            }

        } else {

            for (i=1; i<avctx->frame_size; i++) {

                put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels*i]) & 0xF);

                if (avctx->channels == 2)

                    put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], samples[2*i+1]) & 0xF);

            }

        }

        flush_put_bits(&pb);

        dst += put_bits_count(&pb)>>3;

        break;

    }

    case CODEC_ID_ADPCM_MS:

        for(i=0; i<avctx->channels; i++){

            int predictor=0;



            *dst++ = predictor;

            c->status[i].coeff1 = AdaptCoeff1[predictor];

            c->status[i].coeff2 = AdaptCoeff2[predictor];

        }

        for(i=0; i<avctx->channels; i++){

            if (c->status[i].idelta < 16)

                c->status[i].idelta = 16;



            bytestream_put_le16(&dst, c->status[i].idelta);

        }

        for(i=0; i<avctx->channels; i++){

            c->status[i].sample1= *samples++;



            bytestream_put_le16(&dst, c->status[i].sample1);

        }

        for(i=0; i<avctx->channels; i++){

            c->status[i].sample2= *samples++;



            bytestream_put_le16(&dst, c->status[i].sample2);

        }



        if(avctx->trellis > 0) {

            int n = avctx->block_align - 7*avctx->channels;

            uint8_t buf[2][n];

            if(avctx->channels == 1) {

                n *= 2;

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n);

                for(i=0; i<n; i+=2)

                    *dst++ = (buf[0][i] << 4) | buf[0][i+1];

            } else {

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n);

                adpcm_compress_trellis(avctx, samples+1, buf[1], &c->status[1], n);

                for(i=0; i<n; i++)

                    *dst++ = (buf[0][i] << 4) | buf[1][i];

            }

        } else

        for(i=7*avctx->channels; i<avctx->block_align; i++) {

            int nibble;

            nibble = adpcm_ms_compress_sample(&c->status[ 0], *samples++)<<4;

            nibble|= adpcm_ms_compress_sample(&c->status[st], *samples++);

            *dst++ = nibble;

        }

        break;

    case CODEC_ID_ADPCM_YAMAHA:

        n = avctx->frame_size / 2;

        if(avctx->trellis > 0) {

            uint8_t buf[2][n*2];

            n *= 2;

            if(avctx->channels == 1) {

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n);

                for(i=0; i<n; i+=2)

                    *dst++ = buf[0][i] | (buf[0][i+1] << 4);

            } else {

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n);

                adpcm_compress_trellis(avctx, samples+1, buf[1], &c->status[1], n);

                for(i=0; i<n; i++)

                    *dst++ = buf[0][i] | (buf[1][i] << 4);

            }

        } else

        for (; n>0; n--) {

            for(i = 0; i < avctx->channels; i++) {

                int nibble;

                nibble  = adpcm_yamaha_compress_sample(&c->status[i], samples[i]);

                nibble |= adpcm_yamaha_compress_sample(&c->status[i], samples[i+avctx->channels]) << 4;

                *dst++ = nibble;

            }

            samples += 2 * avctx->channels;

        }

        break;

    default:

        return -1;

    }

    return dst - frame;

}

static int adpcm_encode_frame(AVCodecContext *avctx,

                            unsigned char *frame, int buf_size, void *data)

{

    int n, i, st;

    short *samples;

    unsigned char *dst;

    ADPCMContext *c = avctx->priv_data;



    dst = frame;

    samples = (short *)data;

    st= avctx->channels == 2;





    switch(avctx->codec->id) {

    case CODEC_ID_ADPCM_IMA_QT: 

        break;

    case CODEC_ID_ADPCM_IMA_WAV:

        n = avctx->frame_size / 8;

            c->status[0].prev_sample = (signed short)samples[0]; 



            bytestream_put_le16(&dst, c->status[0].prev_sample);

            *dst++ = (unsigned char)c->status[0].step_index;

            *dst++ = 0; 

            samples++;

            if (avctx->channels == 2) {

                c->status[1].prev_sample = (signed short)samples[1];



                bytestream_put_le16(&dst, c->status[1].prev_sample);

                *dst++ = (unsigned char)c->status[1].step_index;

                *dst++ = 0;

                samples++;

            }



            

            if(avctx->trellis > 0) {

                uint8_t buf[2][n*8];

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n*8);

                if(avctx->channels == 2)

                    adpcm_compress_trellis(avctx, samples+1, buf[1], &c->status[1], n*8);

                for(i=0; i<n; i++) {

                    *dst++ = buf[0][8*i+0] | (buf[0][8*i+1] << 4);

                    *dst++ = buf[0][8*i+2] | (buf[0][8*i+3] << 4);

                    *dst++ = buf[0][8*i+4] | (buf[0][8*i+5] << 4);

                    *dst++ = buf[0][8*i+6] | (buf[0][8*i+7] << 4);

                    if (avctx->channels == 2) {

                        *dst++ = buf[1][8*i+0] | (buf[1][8*i+1] << 4);

                        *dst++ = buf[1][8*i+2] | (buf[1][8*i+3] << 4);

                        *dst++ = buf[1][8*i+4] | (buf[1][8*i+5] << 4);

                        *dst++ = buf[1][8*i+6] | (buf[1][8*i+7] << 4);

                    }

                }

            } else

            for (; n>0; n--) {

                *dst = adpcm_ima_compress_sample(&c->status[0], samples[0]) & 0x0F;

                *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels]) << 4) & 0xF0;

                dst++;

                *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 2]) & 0x0F;

                *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 3]) << 4) & 0xF0;

                dst++;

                *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 4]) & 0x0F;

                *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 5]) << 4) & 0xF0;

                dst++;

                *dst = adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 6]) & 0x0F;

                *dst |= (adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels * 7]) << 4) & 0xF0;

                dst++;

                

                if (avctx->channels == 2) {

                    *dst = adpcm_ima_compress_sample(&c->status[1], samples[1]);

                    *dst |= adpcm_ima_compress_sample(&c->status[1], samples[3]) << 4;

                    dst++;

                    *dst = adpcm_ima_compress_sample(&c->status[1], samples[5]);

                    *dst |= adpcm_ima_compress_sample(&c->status[1], samples[7]) << 4;

                    dst++;

                    *dst = adpcm_ima_compress_sample(&c->status[1], samples[9]);

                    *dst |= adpcm_ima_compress_sample(&c->status[1], samples[11]) << 4;

                    dst++;

                    *dst = adpcm_ima_compress_sample(&c->status[1], samples[13]);

                    *dst |= adpcm_ima_compress_sample(&c->status[1], samples[15]) << 4;

                    dst++;

                }

                samples += 8 * avctx->channels;

            }

        break;

    case CODEC_ID_ADPCM_SWF:

    {

        int i;

        PutBitContext pb;

        init_put_bits(&pb, dst, buf_size*8);



        n = avctx->frame_size-1;



        

        put_bits(&pb, 2, 2);                



        

        for(i=0; i<avctx->channels; i++){

            c->status[i].step_index = av_clip(c->status[i].step_index, 0, 63); 

            put_bits(&pb, 16, samples[i] & 0xFFFF);

            put_bits(&pb, 6, c->status[i].step_index);

            c->status[i].prev_sample = (signed short)samples[i];

        }



        if(avctx->trellis > 0) {

            uint8_t buf[2][n];

            adpcm_compress_trellis(avctx, samples+2, buf[0], &c->status[0], n);

            if (avctx->channels == 2)

                adpcm_compress_trellis(avctx, samples+3, buf[1], &c->status[1], n);

            for(i=0; i<n; i++) {

                put_bits(&pb, 4, buf[0][i]);

                if (avctx->channels == 2)

                    put_bits(&pb, 4, buf[1][i]);

            }

        } else {

            for (i=1; i<avctx->frame_size; i++) {

                put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels*i]) & 0xF);

                if (avctx->channels == 2)

                    put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], samples[2*i+1]) & 0xF);

            }

        }

        flush_put_bits(&pb);

        dst += put_bits_count(&pb)>>3;

        break;

    }

    case CODEC_ID_ADPCM_MS:

        for(i=0; i<avctx->channels; i++){

            int predictor=0;



            *dst++ = predictor;

            c->status[i].coeff1 = AdaptCoeff1[predictor];

            c->status[i].coeff2 = AdaptCoeff2[predictor];

        }

        for(i=0; i<avctx->channels; i++){

            if (c->status[i].idelta < 16)

                c->status[i].idelta = 16;



            bytestream_put_le16(&dst, c->status[i].idelta);

        }

        for(i=0; i<avctx->channels; i++){

            c->status[i].sample1= *samples++;



            bytestream_put_le16(&dst, c->status[i].sample1);

        }

        for(i=0; i<avctx->channels; i++){

            c->status[i].sample2= *samples++;



            bytestream_put_le16(&dst, c->status[i].sample2);

        }



        if(avctx->trellis > 0) {

            int n = avctx->block_align - 7*avctx->channels;

            uint8_t buf[2][n];

            if(avctx->channels == 1) {

                n *= 2;

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n);

                for(i=0; i<n; i+=2)

                    *dst++ = (buf[0][i] << 4) | buf[0][i+1];

            } else {

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n);

                adpcm_compress_trellis(avctx, samples+1, buf[1], &c->status[1], n);

                for(i=0; i<n; i++)

                    *dst++ = (buf[0][i] << 4) | buf[1][i];

            }

        } else

        for(i=7*avctx->channels; i<avctx->block_align; i++) {

            int nibble;

            nibble = adpcm_ms_compress_sample(&c->status[ 0], *samples++)<<4;

            nibble|= adpcm_ms_compress_sample(&c->status[st], *samples++);

            *dst++ = nibble;

        }

        break;

    case CODEC_ID_ADPCM_YAMAHA:

        n = avctx->frame_size / 2;

        if(avctx->trellis > 0) {

            uint8_t buf[2][n*2];

            n *= 2;

            if(avctx->channels == 1) {

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n);

                for(i=0; i<n; i+=2)

                    *dst++ = buf[0][i] | (buf[0][i+1] << 4);

            } else {

                adpcm_compress_trellis(avctx, samples, buf[0], &c->status[0], n);

                adpcm_compress_trellis(avctx, samples+1, buf[1], &c->status[1], n);

                for(i=0; i<n; i++)

                    *dst++ = buf[0][i] | (buf[1][i] << 4);

            }

        } else

        for (; n>0; n--) {

            for(i = 0; i < avctx->channels; i++) {

                int nibble;

                nibble  = adpcm_yamaha_compress_sample(&c->status[i], samples[i]);

                nibble |= adpcm_yamaha_compress_sample(&c->status[i], samples[i+avctx->channels]) << 4;

                *dst++ = nibble;

            }

            samples += 2 * avctx->channels;

        }

        break;

    default:

        return -1;

    }

    return dst - frame;

}

static int FUNC_0(AVCodecContext *VAR_0,

                            unsigned char *VAR_1, int VAR_2, void *VAR_3)

{

    int VAR_9, VAR_9, VAR_6;

    short *VAR_7;

    unsigned char *VAR_8;

    ADPCMContext *c = VAR_0->priv_data;



    VAR_8 = VAR_1;

    VAR_7 = (short *)VAR_3;

    VAR_6= VAR_0->channels == 2;





    switch(VAR_0->codec->id) {

    case CODEC_ID_ADPCM_IMA_QT: 

        break;

    case CODEC_ID_ADPCM_IMA_WAV:

        VAR_9 = VAR_0->frame_size / 8;

            c->status[0].prev_sample = (signed short)VAR_7[0]; 



            bytestream_put_le16(&VAR_8, c->status[0].prev_sample);

            *VAR_8++ = (unsigned char)c->status[0].step_index;

            *VAR_8++ = 0; 

            VAR_7++;

            if (VAR_0->channels == 2) {

                c->status[1].prev_sample = (signed short)VAR_7[1];



                bytestream_put_le16(&VAR_8, c->status[1].prev_sample);

                *VAR_8++ = (unsigned char)c->status[1].step_index;

                *VAR_8++ = 0;

                VAR_7++;

            }



            

            if(VAR_0->trellis > 0) {

                uint8_t buf[2][VAR_9*8];

                adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9*8);

                if(VAR_0->channels == 2)

                    adpcm_compress_trellis(VAR_0, VAR_7+1, buf[1], &c->status[1], VAR_9*8);

                for(VAR_9=0; VAR_9<VAR_9; VAR_9++) {

                    *VAR_8++ = buf[0][8*VAR_9+0] | (buf[0][8*VAR_9+1] << 4);

                    *VAR_8++ = buf[0][8*VAR_9+2] | (buf[0][8*VAR_9+3] << 4);

                    *VAR_8++ = buf[0][8*VAR_9+4] | (buf[0][8*VAR_9+5] << 4);

                    *VAR_8++ = buf[0][8*VAR_9+6] | (buf[0][8*VAR_9+7] << 4);

                    if (VAR_0->channels == 2) {

                        *VAR_8++ = buf[1][8*VAR_9+0] | (buf[1][8*VAR_9+1] << 4);

                        *VAR_8++ = buf[1][8*VAR_9+2] | (buf[1][8*VAR_9+3] << 4);

                        *VAR_8++ = buf[1][8*VAR_9+4] | (buf[1][8*VAR_9+5] << 4);

                        *VAR_8++ = buf[1][8*VAR_9+6] | (buf[1][8*VAR_9+7] << 4);

                    }

                }

            } else

            for (; VAR_9>0; VAR_9--) {

                *VAR_8 = adpcm_ima_compress_sample(&c->status[0], VAR_7[0]) & 0x0F;

                *VAR_8 |= (adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels]) << 4) & 0xF0;

                VAR_8++;

                *VAR_8 = adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 2]) & 0x0F;

                *VAR_8 |= (adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 3]) << 4) & 0xF0;

                VAR_8++;

                *VAR_8 = adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 4]) & 0x0F;

                *VAR_8 |= (adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 5]) << 4) & 0xF0;

                VAR_8++;

                *VAR_8 = adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 6]) & 0x0F;

                *VAR_8 |= (adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 7]) << 4) & 0xF0;

                VAR_8++;

                

                if (VAR_0->channels == 2) {

                    *VAR_8 = adpcm_ima_compress_sample(&c->status[1], VAR_7[1]);

                    *VAR_8 |= adpcm_ima_compress_sample(&c->status[1], VAR_7[3]) << 4;

                    VAR_8++;

                    *VAR_8 = adpcm_ima_compress_sample(&c->status[1], VAR_7[5]);

                    *VAR_8 |= adpcm_ima_compress_sample(&c->status[1], VAR_7[7]) << 4;

                    VAR_8++;

                    *VAR_8 = adpcm_ima_compress_sample(&c->status[1], VAR_7[9]);

                    *VAR_8 |= adpcm_ima_compress_sample(&c->status[1], VAR_7[11]) << 4;

                    VAR_8++;

                    *VAR_8 = adpcm_ima_compress_sample(&c->status[1], VAR_7[13]);

                    *VAR_8 |= adpcm_ima_compress_sample(&c->status[1], VAR_7[15]) << 4;

                    VAR_8++;

                }

                VAR_7 += 8 * VAR_0->channels;

            }

        break;

    case CODEC_ID_ADPCM_SWF:

    {

        int VAR_9;

        PutBitContext pb;

        init_put_bits(&pb, VAR_8, VAR_2*8);



        VAR_9 = VAR_0->frame_size-1;



        

        put_bits(&pb, 2, 2);                



        

        for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){

            c->status[VAR_9].step_index = av_clip(c->status[VAR_9].step_index, 0, 63); 

            put_bits(&pb, 16, VAR_7[VAR_9] & 0xFFFF);

            put_bits(&pb, 6, c->status[VAR_9].step_index);

            c->status[VAR_9].prev_sample = (signed short)VAR_7[VAR_9];

        }



        if(VAR_0->trellis > 0) {

            uint8_t buf[2][VAR_9];

            adpcm_compress_trellis(VAR_0, VAR_7+2, buf[0], &c->status[0], VAR_9);

            if (VAR_0->channels == 2)

                adpcm_compress_trellis(VAR_0, VAR_7+3, buf[1], &c->status[1], VAR_9);

            for(VAR_9=0; VAR_9<VAR_9; VAR_9++) {

                put_bits(&pb, 4, buf[0][VAR_9]);

                if (VAR_0->channels == 2)

                    put_bits(&pb, 4, buf[1][VAR_9]);

            }

        } else {

            for (VAR_9=1; VAR_9<VAR_0->frame_size; VAR_9++) {

                put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels*VAR_9]) & 0xF);

                if (VAR_0->channels == 2)

                    put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], VAR_7[2*VAR_9+1]) & 0xF);

            }

        }

        flush_put_bits(&pb);

        VAR_8 += put_bits_count(&pb)>>3;

        break;

    }

    case CODEC_ID_ADPCM_MS:

        for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){

            int predictor=0;



            *VAR_8++ = predictor;

            c->status[VAR_9].coeff1 = AdaptCoeff1[predictor];

            c->status[VAR_9].coeff2 = AdaptCoeff2[predictor];

        }

        for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){

            if (c->status[VAR_9].idelta < 16)

                c->status[VAR_9].idelta = 16;



            bytestream_put_le16(&VAR_8, c->status[VAR_9].idelta);

        }

        for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){

            c->status[VAR_9].sample1= *VAR_7++;



            bytestream_put_le16(&VAR_8, c->status[VAR_9].sample1);

        }

        for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){

            c->status[VAR_9].sample2= *VAR_7++;



            bytestream_put_le16(&VAR_8, c->status[VAR_9].sample2);

        }



        if(VAR_0->trellis > 0) {

            int VAR_9 = VAR_0->block_align - 7*VAR_0->channels;

            uint8_t buf[2][VAR_9];

            if(VAR_0->channels == 1) {

                VAR_9 *= 2;

                adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9);

                for(VAR_9=0; VAR_9<VAR_9; VAR_9+=2)

                    *VAR_8++ = (buf[0][VAR_9] << 4) | buf[0][VAR_9+1];

            } else {

                adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9);

                adpcm_compress_trellis(VAR_0, VAR_7+1, buf[1], &c->status[1], VAR_9);

                for(VAR_9=0; VAR_9<VAR_9; VAR_9++)

                    *VAR_8++ = (buf[0][VAR_9] << 4) | buf[1][VAR_9];

            }

        } else

        for(VAR_9=7*VAR_0->channels; VAR_9<VAR_0->block_align; VAR_9++) {

            int nibble;

            nibble = adpcm_ms_compress_sample(&c->status[ 0], *VAR_7++)<<4;

            nibble|= adpcm_ms_compress_sample(&c->status[VAR_6], *VAR_7++);

            *VAR_8++ = nibble;

        }

        break;

    case CODEC_ID_ADPCM_YAMAHA:

        VAR_9 = VAR_0->frame_size / 2;

        if(VAR_0->trellis > 0) {

            uint8_t buf[2][VAR_9*2];

            VAR_9 *= 2;

            if(VAR_0->channels == 1) {

                adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9);

                for(VAR_9=0; VAR_9<VAR_9; VAR_9+=2)

                    *VAR_8++ = buf[0][VAR_9] | (buf[0][VAR_9+1] << 4);

            } else {

                adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9);

                adpcm_compress_trellis(VAR_0, VAR_7+1, buf[1], &c->status[1], VAR_9);

                for(VAR_9=0; VAR_9<VAR_9; VAR_9++)

                    *VAR_8++ = buf[0][VAR_9] | (buf[1][VAR_9] << 4);

            }

        } else

        for (; VAR_9>0; VAR_9--) {

            for(VAR_9 = 0; VAR_9 < VAR_0->channels; VAR_9++) {

                int nibble;

                nibble  = adpcm_yamaha_compress_sample(&c->status[VAR_9], VAR_7[VAR_9]);

                nibble |= adpcm_yamaha_compress_sample(&c->status[VAR_9], VAR_7[VAR_9+VAR_0->channels]) << 4;

                *VAR_8++ = nibble;

            }

            VAR_7 += 2 * VAR_0->channels;

        }

        break;

    default:

        return -1;

    }

    return VAR_8 - VAR_1;

}

static int FUNC_0(AVCodecContext *VAR_0,
unsigned char *VAR_1, int VAR_2, void *VAR_3)
{ int VAR_9, VAR_9, VAR_6; short *VAR_7; unsigned char *VAR_8; ADPCMContext *c = VAR_0->priv_data; VAR_8 = VAR_1; VAR_7 = (short *)VAR_3; VAR_6= VAR_0->channels == 2; switch(VAR_0->codec->id) { case CODEC_ID_ADPCM_IMA_QT:
break; case CODEC_ID_ADPCM_IMA_WAV:
VAR_9 = VAR_0->frame_size / 8; c->status[0].prev_sample = (signed short)VAR_7[0]; bytestream_put_le16(&VAR_8, c->status[0].prev_sample); *VAR_8++ = (unsigned char)c->status[0].step_index; *VAR_8++ = 0; VAR_7++; if (VAR_0->channels == 2) { c->status[1].prev_sample = (signed short)VAR_7[1]; bytestream_put_le16(&VAR_8, c->status[1].prev_sample); *VAR_8++ = (unsigned char)c->status[1].step_index; *VAR_8++ = 0; VAR_7++; } if(VAR_0->trellis > 0) { uint8_t buf[2][VAR_9*8]; adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9*8); if(VAR_0->channels == 2)
adpcm_compress_trellis(VAR_0, VAR_7+1, buf[1], &c->status[1], VAR_9*8); for(VAR_9=0; VAR_9<VAR_9; VAR_9++) { *VAR_8++ = buf[0][8*VAR_9+0] | (buf[0][8*VAR_9+1] << 4); *VAR_8++ = buf[0][8*VAR_9+2] | (buf[0][8*VAR_9+3] << 4); *VAR_8++ = buf[0][8*VAR_9+4] | (buf[0][8*VAR_9+5] << 4); *VAR_8++ = buf[0][8*VAR_9+6] | (buf[0][8*VAR_9+7] << 4); if (VAR_0->channels == 2) { *VAR_8++ = buf[1][8*VAR_9+0] | (buf[1][8*VAR_9+1] << 4); *VAR_8++ = buf[1][8*VAR_9+2] | (buf[1][8*VAR_9+3] << 4); *VAR_8++ = buf[1][8*VAR_9+4] | (buf[1][8*VAR_9+5] << 4); *VAR_8++ = buf[1][8*VAR_9+6] | (buf[1][8*VAR_9+7] << 4); } } } else for (; VAR_9>0; VAR_9--) { *VAR_8 = adpcm_ima_compress_sample(&c->status[0], VAR_7[0]) & 0x0F; *VAR_8 |= (adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels]) << 4) & 0xF0; VAR_8++; *VAR_8 = adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 2]) & 0x0F; *VAR_8 |= (adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 3]) << 4) & 0xF0; VAR_8++; *VAR_8 = adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 4]) & 0x0F; *VAR_8 |= (adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 5]) << 4) & 0xF0; VAR_8++; *VAR_8 = adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 6]) & 0x0F; *VAR_8 |= (adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels * 7]) << 4) & 0xF0; VAR_8++; if (VAR_0->channels == 2) { *VAR_8 = adpcm_ima_compress_sample(&c->status[1], VAR_7[1]); *VAR_8 |= adpcm_ima_compress_sample(&c->status[1], VAR_7[3]) << 4; VAR_8++; *VAR_8 = adpcm_ima_compress_sample(&c->status[1], VAR_7[5]); *VAR_8 |= adpcm_ima_compress_sample(&c->status[1], VAR_7[7]) << 4; VAR_8++; *VAR_8 = adpcm_ima_compress_sample(&c->status[1], VAR_7[9]); *VAR_8 |= adpcm_ima_compress_sample(&c->status[1], VAR_7[11]) << 4; VAR_8++; *VAR_8 = adpcm_ima_compress_sample(&c->status[1], VAR_7[13]); *VAR_8 |= adpcm_ima_compress_sample(&c->status[1], VAR_7[15]) << 4; VAR_8++; } VAR_7 += 8 * VAR_0->channels; } break; case CODEC_ID_ADPCM_SWF:
{ int VAR_9; PutBitContext pb; init_put_bits(&pb, VAR_8, VAR_2*8); VAR_9 = VAR_0->frame_size-1; put_bits(&pb, 2, 2); for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){ c->status[VAR_9].step_index = av_clip(c->status[VAR_9].step_index, 0, 63); put_bits(&pb, 16, VAR_7[VAR_9] & 0xFFFF); put_bits(&pb, 6, c->status[VAR_9].step_index); c->status[VAR_9].prev_sample = (signed short)VAR_7[VAR_9]; } if(VAR_0->trellis > 0) { uint8_t buf[2][VAR_9]; adpcm_compress_trellis(VAR_0, VAR_7+2, buf[0], &c->status[0], VAR_9); if (VAR_0->channels == 2)
adpcm_compress_trellis(VAR_0, VAR_7+3, buf[1], &c->status[1], VAR_9); for(VAR_9=0; VAR_9<VAR_9; VAR_9++) { put_bits(&pb, 4, buf[0][VAR_9]); if (VAR_0->channels == 2)
put_bits(&pb, 4, buf[1][VAR_9]); } } else { for (VAR_9=1; VAR_9<VAR_0->frame_size; VAR_9++) { put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], VAR_7[VAR_0->channels*VAR_9]) & 0xF); if (VAR_0->channels == 2)
put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], VAR_7[2*VAR_9+1]) & 0xF); } } flush_put_bits(&pb); VAR_8 += put_bits_count(&pb)>>3; break; } case CODEC_ID_ADPCM_MS:
for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){ int predictor=0; *VAR_8++ = predictor; c->status[VAR_9].coeff1 = AdaptCoeff1[predictor]; c->status[VAR_9].coeff2 = AdaptCoeff2[predictor]; } for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){ if (c->status[VAR_9].idelta < 16)
c->status[VAR_9].idelta = 16; bytestream_put_le16(&VAR_8, c->status[VAR_9].idelta); } for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){ c->status[VAR_9].sample1= *VAR_7++; bytestream_put_le16(&VAR_8, c->status[VAR_9].sample1); } for(VAR_9=0; VAR_9<VAR_0->channels; VAR_9++){ c->status[VAR_9].sample2= *VAR_7++; bytestream_put_le16(&VAR_8, c->status[VAR_9].sample2); } if(VAR_0->trellis > 0) { int VAR_9 = VAR_0->block_align - 7*VAR_0->channels; uint8_t buf[2][VAR_9]; if(VAR_0->channels == 1) { VAR_9 *= 2; adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9); for(VAR_9=0; VAR_9<VAR_9; VAR_9+=2) *VAR_8++ = (buf[0][VAR_9] << 4) | buf[0][VAR_9+1]; } else { adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9); adpcm_compress_trellis(VAR_0, VAR_7+1, buf[1], &c->status[1], VAR_9); for(VAR_9=0; VAR_9<VAR_9; VAR_9++) *VAR_8++ = (buf[0][VAR_9] << 4) | buf[1][VAR_9]; } } else for(VAR_9=7*VAR_0->channels; VAR_9<VAR_0->block_align; VAR_9++) { int nibble; nibble = adpcm_ms_compress_sample(&c->status[ 0], *VAR_7++)<<4; nibble|= adpcm_ms_compress_sample(&c->status[VAR_6], *VAR_7++); *VAR_8++ = nibble; } break; case CODEC_ID_ADPCM_YAMAHA:
VAR_9 = VAR_0->frame_size / 2; if(VAR_0->trellis > 0) { uint8_t buf[2][VAR_9*2]; VAR_9 *= 2; if(VAR_0->channels == 1) { adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9); for(VAR_9=0; VAR_9<VAR_9; VAR_9+=2) *VAR_8++ = buf[0][VAR_9] | (buf[0][VAR_9+1] << 4); } else { adpcm_compress_trellis(VAR_0, VAR_7, buf[0], &c->status[0], VAR_9); adpcm_compress_trellis(VAR_0, VAR_7+1, buf[1], &c->status[1], VAR_9); for(VAR_9=0; VAR_9<VAR_9; VAR_9++) *VAR_8++ = buf[0][VAR_9] | (buf[1][VAR_9] << 4); } } else for (; VAR_9>0; VAR_9--) { for(VAR_9 = 0; VAR_9 < VAR_0->channels; VAR_9++) { int nibble; nibble  = adpcm_yamaha_compress_sample(&c->status[VAR_9], VAR_7[VAR_9]); nibble |= adpcm_yamaha_compress_sample(&c->status[VAR_9], VAR_7[VAR_9+VAR_0->channels]) << 4; *VAR_8++ = nibble; } VAR_7 += 2 * VAR_0->channels; } break; default:
return -1; } return VAR_8 - VAR_1; }