putbits.c

来自「jpeg and mpeg 编解码技术源代码」· C语言 代码 · 共 73 行

C
73
字号
/* putbits.c, 比特级输出*/


#include <stdio.h>

extern FILE *outfile; 

static unsigned char outbfr;
static int outcnt;
static int bytecnt;
static int freespace;				/* 缓存中的可用空间*/
static unsigned char *bufptr;		
static unsigned char buffer[65536];	/* 大小为64KB缓存去 */

/* 初始化缓存*/
void initbits()
{
  outcnt = 8;
  bytecnt = 0;
  freespace = sizeof(buffer);
  bufptr = buffer;
}

void flushbits()
{
	fwrite(buffer, 1, sizeof(buffer) - freespace, outfile);
	bufptr = buffer;
	freespace = sizeof(buffer);
}

/* 向输出文件中写入最右的n比特*/
void putbits(val,n)
int val;
int n;
{
  int i;
  unsigned int mask;

  mask = 1 << (n-1); 

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

    if (val & mask)
      outbfr|= 1;

    mask >>= 1; // select next bit
    outcnt--;

    if (outcnt==0) // 8 bit buffer full
    {
		*bufptr++ = outbfr;
		if(--freespace <= 0)
			flushbits();
		outcnt = 8;
		bytecnt++;
    }
  }
}

void alignbits()
{
  if (outcnt!=8)
    putbits(0,outcnt);
}

/* 返回产生的所有比特数*/
int bitcount()
{
  return 8*bytecnt + (8-outcnt);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?