Blame libcelt/entdec.c

Packit 664db3
#ifdef HAVE_CONFIG_H
Packit 664db3
#include "config.h"
Packit 664db3
#endif
Packit 664db3
Packit 664db3
#include <stddef.h>
Packit 664db3
#include "entdec.h"
Packit 664db3
#include "os_support.h"
Packit 664db3
Packit 664db3
Packit 664db3
void ec_byte_readinit(ec_byte_buffer *_b,unsigned char *_buf,long _bytes){
Packit 664db3
  _b->buf=_b->ptr=_buf;
Packit 664db3
  _b->storage=_bytes;
Packit 664db3
}
Packit 664db3
Packit 664db3
int ec_byte_look1(ec_byte_buffer *_b){
Packit 664db3
  ptrdiff_t endbyte;
Packit 664db3
  endbyte=_b->ptr-_b->buf;
Packit 664db3
  if(endbyte>=_b->storage)return -1;
Packit 664db3
  else return _b->ptr[0];
Packit 664db3
}
Packit 664db3
Packit 664db3
int ec_byte_look4(ec_byte_buffer *_b,ec_uint32 *_val){
Packit 664db3
  ptrdiff_t endbyte;
Packit 664db3
  endbyte=_b->ptr-_b->buf;
Packit 664db3
  if(endbyte+4>_b->storage){
Packit 664db3
    if(endbyte<_b->storage){
Packit 664db3
      *_val=_b->ptr[0];
Packit 664db3
      endbyte++;
Packit 664db3
      if(endbyte<_b->storage){
Packit 664db3
        *_val|=(ec_uint32)_b->ptr[1]<<8;
Packit 664db3
        endbyte++;
Packit 664db3
        if(endbyte<_b->storage)*_val|=(ec_uint32)_b->ptr[2]<<16;
Packit 664db3
      }
Packit 664db3
    }
Packit 664db3
    return -1;
Packit 664db3
  }
Packit 664db3
  else{
Packit 664db3
    *_val=_b->ptr[0];
Packit 664db3
    *_val|=(ec_uint32)_b->ptr[1]<<8;
Packit 664db3
    *_val|=(ec_uint32)_b->ptr[2]<<16;
Packit 664db3
    *_val|=(ec_uint32)_b->ptr[3]<<24;
Packit 664db3
  }
Packit 664db3
  return 0;
Packit 664db3
}
Packit 664db3
Packit 664db3
void ec_byte_adv1(ec_byte_buffer *_b){
Packit 664db3
  _b->ptr++;
Packit 664db3
}
Packit 664db3
Packit 664db3
void ec_byte_adv4(ec_byte_buffer *_b){
Packit 664db3
  _b->ptr+=4;
Packit 664db3
}
Packit 664db3
Packit 664db3
int ec_byte_read1(ec_byte_buffer *_b){
Packit 664db3
  ptrdiff_t endbyte;
Packit 664db3
  endbyte=_b->ptr-_b->buf;
Packit 664db3
  if(endbyte>=_b->storage)return -1;
Packit 664db3
  else return *(_b->ptr++);
Packit 664db3
}
Packit 664db3
Packit 664db3
int ec_byte_read4(ec_byte_buffer *_b,ec_uint32 *_val){
Packit 664db3
  unsigned char *end;
Packit 664db3
  end=_b->buf+_b->storage;
Packit 664db3
  if(_b->ptr+4>end){
Packit 664db3
    if(_b->ptr
Packit 664db3
      *_val=*(_b->ptr++);
Packit 664db3
      if(_b->ptr
Packit 664db3
        *_val|=(ec_uint32)*(_b->ptr++)<<8;
Packit 664db3
        if(_b->ptr<end)*_val|=(ec_uint32)*(_b->ptr++)<<16;
Packit 664db3
      }
Packit 664db3
    }
Packit 664db3
    return -1;
Packit 664db3
  }
Packit 664db3
  else{
Packit 664db3
    *_val=(*_b->ptr++);
Packit 664db3
    *_val|=(ec_uint32)*(_b->ptr++)<<8;
Packit 664db3
    *_val|=(ec_uint32)*(_b->ptr++)<<16;
Packit 664db3
    *_val|=(ec_uint32)*(_b->ptr++)<<24;
Packit 664db3
  }
Packit 664db3
  return 0;
Packit 664db3
}
Packit 664db3
Packit 664db3
Packit 664db3
Packit 664db3
ec_uint32 ec_dec_bits(ec_dec *_this,int _ftb){
Packit 664db3
  ec_uint32 t;
Packit 664db3
  unsigned  s;
Packit 664db3
  unsigned  ft;
Packit 664db3
  t=0;
Packit 664db3
  while(_ftb>EC_UNIT_BITS){
Packit 664db3
    s=ec_decode_bin(_this,EC_UNIT_BITS);
Packit 664db3
    ec_dec_update(_this,s,s+1,EC_UNIT_MASK+1);
Packit 664db3
    t=t<
Packit 664db3
    _ftb-=EC_UNIT_BITS;
Packit 664db3
  }
Packit 664db3
  ft=1U<<_ftb;
Packit 664db3
  s=ec_decode_bin(_this,_ftb);
Packit 664db3
  ec_dec_update(_this,s,s+1,ft);
Packit 664db3
  t=t<<_ftb|s;
Packit 664db3
  return t;
Packit 664db3
}
Packit 664db3
Packit 664db3
ec_uint32 ec_dec_uint(ec_dec *_this,ec_uint32 _ft){
Packit 664db3
  ec_uint32 t;
Packit 664db3
  unsigned  ft;
Packit 664db3
  unsigned  s;
Packit 664db3
  int       ftb;
Packit 664db3
  t=0;
Packit 664db3
  _ft--;
Packit 664db3
  ftb=EC_ILOG(_ft);
Packit 664db3
  if(ftb>EC_UNIT_BITS){
Packit 664db3
    ftb-=EC_UNIT_BITS;
Packit 664db3
    ft=(unsigned)(_ft>>ftb)+1;
Packit 664db3
    s=ec_decode(_this,ft);
Packit 664db3
    ec_dec_update(_this,s,s+1,ft);
Packit 664db3
    t=t<
Packit 664db3
    t = t<
Packit 664db3
    if (t>_ft)
Packit 664db3
    {
Packit 664db3
       celt_notify("uint decode error");
Packit 664db3
       t = _ft;
Packit 664db3
    }
Packit 664db3
    return t;
Packit 664db3
  } else {
Packit 664db3
    _ft++;
Packit 664db3
    s=ec_decode(_this,(unsigned)_ft);
Packit 664db3
    ec_dec_update(_this,s,s+1,(unsigned)_ft);
Packit 664db3
    t=t<
Packit 664db3
    return t;
Packit 664db3
  }
Packit 664db3
}