*data_size=data-datao;
*data_size=(data-datao)*sizeof(*data);
static int ra144_decode_frame(AVCodecContext * avctx,            void *data, int *data_size,            uint8_t * buf, int buf_size){  unsigned int a,b,c;  long s;  signed short *shptr;  unsigned int *lptr,*temp;  const short **dptr;  void *datao;  Real144_internal *glob=avctx->priv_data;  datao = data;  unpack_input(buf,glob->unpacked);    glob->iptr=glob->unpacked;  glob->val=decodetable[0][(*(glob->iptr++))<<1];  dptr=decodetable+1;  lptr=glob->swapbuf1;  while (lptr<glob->swapbuf1+10)    *(lptr++)=(*(dptr++))[(*(glob->iptr++))<<1];  do_voice(glob->swapbuf1,glob->swapbuf2);  a=t_sqrt(glob->val*glob->oldval)>>12;  for (c=0;c<NBLOCKS;c++) {    if (c==(NBLOCKS-1)) {      dec1(glob,glob->swapbuf1,glob->swapbuf2,3,glob->val);    } else {      if (c*2==(NBLOCKS-2)) {        if (glob->oldval<glob->val) {          dec2(glob,glob->swapbuf1,glob->swapbuf2,3,a,glob->swapbuf2alt,c);        } else {          dec2(glob,glob->swapbuf1alt,glob->swapbuf2alt,3,a,glob->swapbuf2,c);        }      } else {        if (c*2<(NBLOCKS-2)) {          dec2(glob,glob->swapbuf1alt,glob->swapbuf2alt,3,glob->oldval,glob->swapbuf2,c);        } else {          dec2(glob,glob->swapbuf1,glob->swapbuf2,3,glob->val,glob->swapbuf2alt,c);        }      }    }  }  /* do output */  for (b=0,c=0;c<4;c++) {    glob->gval=glob->gbuf1[c*2];    glob->gsp=glob->gbuf2+b;    do_output_subblock(glob,glob->resetflag);    glob->resetflag=0;    shptr=glob->output_buffer;    while (shptr<glob->output_buffer+BLOCKSIZE) {      s=*(shptr++)<<2;      *((int16_t *)data)=s;      if (s>32767) *((int16_t *)data)=32767;      if (s<-32767) *((int16_t *)data)=-32768;      ((int16_t *)data)++;    }    b+=30;  }  glob->oldval=glob->val;  temp=glob->swapbuf1alt;  glob->swapbuf1alt=glob->swapbuf1;  glob->swapbuf1=temp;  temp=glob->swapbuf2alt;  glob->swapbuf2alt=glob->swapbuf2;  glob->swapbuf2=temp;  *data_size=data-datao;  return 20;}