Пример #1
0
static unsigned int readbits(FILE *file,int bits)
   {
   unsigned int value;

   if (bits<0 || bits>32) ERRORMSG();

   if (bits==0) return(0);

   if (bits<DDS_bufsize)
      {
      DDS_bufsize-=bits;
      value=DDS_shiftr(DDS_buffer,DDS_bufsize);
      }
   else
      {
      value=DDS_shiftl(DDS_buffer,bits-DDS_bufsize);
      DDS_buffer=0;
      if( fread(&DDS_buffer,1,4,file) <= 0 )
        DDS_buffer=0;
      else
        DDS_swapuint(&DDS_buffer);
      DDS_bufsize+=32-bits;
      value|=DDS_shiftr(DDS_buffer,DDS_bufsize);
      }

   DDS_buffer&=DDS_shiftl(1,DDS_bufsize)-1;
   DDS_bitcnt+=bits;

   return(value);
   }
Пример #2
0
static void flushbits(FILE *file)
   {
   if (DDS_bufsize>0)
      {
      DDS_buffer=DDS_shiftl(DDS_buffer,32-DDS_bufsize);
      if (DDS_ISINTEL) DDS_swapuint(&DDS_buffer);
      if (fwrite(&DDS_buffer,(DDS_bufsize+7)/8,1,file)!=1) ERRORMSG();
      DDS_bitcnt+=(32-DDS_bufsize)&7;
      }
   }
Пример #3
0
// convert from float to unsigned short
void convfloat(unsigned char *data,unsigned int bytes)
   {
   unsigned int i;
   unsigned char *ptr;
   float v,vmax;

   for (vmax=1.0f,ptr=data,i=0; i<bytes/4; i++,ptr+=4)
      {
      if (DDS_ISINTEL) DDS_swapuint((unsigned int *)ptr);

      v=fabs(*((float *)ptr));
      if (v>vmax) vmax=v;
      }

   for (ptr=data,i=0; i<bytes/4; i++,ptr+=4)
      {
      v=fabs(*((float *)ptr))/vmax;

      data[2*i]=ftrc(65535.0f*v+0.5f)/256;
      data[2*i+1]=ftrc(65535.0f*v+0.5f)%256;
      }
   }