⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getbits.c

📁 代码实现了基于ARM7的MPEG-4视频解码器
💻 C
字号:
//*******************************************
//File Name: getbits.c
//Author:    Anna
//Date:
//*******************************************
#include <stdio.h>
#include <stdlib.h>

extern unsigned char rdbfr[2051];
extern unsigned char *rdptr;
extern  unsigned char inbfr[16];
extern int incnt;
extern int bitcnt;

extern FILE *infile;
extern char *infilename;



/* initialize buffer, call once before first getbits or showbits */

void initbits (unsigned char * stream, int length)
{
  incnt = 0;
  bitcnt = 0;
  rdptr = rdbfr + 2048;
 }


static unsigned int msk[33]=
{
  0x00000000, 0x00000001, 0x00000003, 0x00000007,
  0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
  0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
  0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
  0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
  0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
  0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
  0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
  0xffffffff  
};
   	
static void fillbfr ()
{
  int l;
    
  inbfr[0] = inbfr[8];
  inbfr[1] = inbfr[9];
  inbfr[2] = inbfr[10];
  inbfr[3] = inbfr[11];
  
   if (rdptr >= rdbfr + 2048)
  {
    l = fread(rdbfr,1,2048,infile);
    rdptr = rdbfr;
    if (l < 2048)
    {
      if (l < 0)
        l = 0;

      while (l < 2048)   
      {      
        rdbfr[l++] = 0;
        rdbfr[l++] = 0;
        rdbfr[l++] = (1 << 7) | (31 << 2);
      }
    }
  }

  for(l=0;l<8;l++)
 
    inbfr[l + 4] = rdptr[l];
 
  rdptr+=8;
  incnt+=64;    
}

/*return next n bits (right adjusted) without advancing*/

 unsigned int showbits (int n)
{
   unsigned char *v;
   unsigned int b;
   int c;

   if (incnt < n)
       fillbfr ();

   v = inbfr + ((96 - incnt) >> 3);
   b = (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3];
   c = ((incnt - 1) & 7) + 25;
   return (b >> (c - n)) & msk[n];
}

/*advance by n bits*/

 void flushbits (int n)
{
  bitcnt += n;
  incnt -= n;

  if (incnt < 0)
     fillbfr ();
}

 unsigned int getbits (int n)
{
  unsigned int l;

  l = showbits (n);
  flushbits (n);

  return l;
}



/*int main()
{ 

// FILE *infile;
// char *infilename="garden176.avi";
 
  int readbits; 
   incnt = 0;
   bitcnt = 0;
   rdptr = rdbfr + 2048;
 
 if((infile=fopen(infilename,"rb"))==NULL)
 {
    printf("Input file %s not found\n",infilename);
    exit(0);
  }
      readbits=getbits(32);
   // readbits=showbits(32);
   // flushbits(32);
   // readbits=showbits(24);
    printf("%d,",readbits);
 
}*/









⌨️ 快捷键说明

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