亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? huffman.c

?? mp3 源代碼void III_hufman_decode
?? C
字號:
/**********************************************************************
Copyright (c) 1991 MPEG/audio software simulation group, All Rights Reserved
huffman.c
**********************************************************************/
/**********************************************************************
 * MPEG/audio coding/decoding software, work in progress              *
 *   NOT for public distribution until verified and approved by the   *
 *   MPEG/audio committee.  For further information, please contact   *
 *   Davis Pan, 708-538-5671, e-mail: pan@ukraine.corp.mot.com        *
 *                                                                    *
 * VERSION 4.3                                                        *
 *   changes made since last update:                                  *
 *   date   programmers                comment                        *
 *27.2.92   F.O.Witte                  (ITT Intermetall)              *
 *				       email: otto.witte@itt-sc.de    *
 *				       tel:   ++49 (761)517-125	      *
 *				       fax:   ++49 (761)517-880	      * 
 *12.6.92   J. Pineda                  Added sign bit to decoder.     *
 * 08/24/93 M. Iwadare                 Changed for 1 pass decoding.   *
 *--------------------------------------------------------------------*
 *  7/14/94 Juergen Koller      Bug fixes in Layer III code           *
 *********************************************************************/	

#include "common.h"
#include "huffman.h"
     
HUFFBITS dmask = 1 << (sizeof(HUFFBITS)*8-1);
unsigned int hs = sizeof(HUFFBITS)*8;

struct huffcodetab ht[HTN];	/* array of all huffcodtable headers	*/
				/* 0..31 Huffman code table 0..31	*/
				/* 32,33 count1-tables			*/

/* read the huffman encode table */
int read_huffcodetab(fi) 
FILE *fi;
{

  char line[100],command[40],huffdata[40];
  unsigned int t,i,j,k,nn,x,y,n=0;
  unsigned int xl, yl, len;
  HUFFBITS h;
  int	hsize;
  
  hsize = sizeof(HUFFBITS)*8; 
  do {
      fgets(line,99,fi);
  } while ((line[0] == '#') || (line[0] < ' ') );
  
  do {    
    while ((line[0]=='#') || (line[0] < ' ')) {
      fgets(line,99,fi);
    } 

    sscanf(line,"%s %s %u %u %u",command,ht[n].tablename,
			         &xl,&yl,&ht[n].linbits);
    if (strcmp(command,".end")==0)
      return n;
    else if (strcmp(command,".table")!=0) {
      fprintf(stderr,"huffman table %u data corrupted\n",n);
      return -1;
    }
    ht[n].linmax = (1<<ht[n].linbits)-1;
   
    sscanf(ht[n].tablename,"%u",&nn);
    if (nn != n) {
      fprintf(stderr,"wrong table number %u\n",n);
      return(-2);
    } 

    ht[n].xlen = xl;
    ht[n].ylen = yl;

    do {
      fgets(line,99,fi);
    } while ((line[0] == '#') || (line[0] < ' '));

    sscanf(line,"%s %u",command,&t);
    if (strcmp(command,".reference")==0) {
      ht[n].ref   = t;
      ht[n].table = ht[t].table;
      ht[n].hlen  = ht[t].hlen;
      if ( (xl != ht[t].xlen) ||
           (yl != ht[t].ylen)  ) {
        fprintf(stderr,"wrong table %u reference\n",n);
        return (-3);
      };
      do {
        fgets(line,99,fi);
      } while ((line[0] == '#') || (line[0] < ' ') );
    } 
    else {
      ht[n].ref  = -1;
      ht[n].table=(HUFFBITS *) calloc(xl*yl,sizeof(HUFFBITS));
      if (ht[n].table == NULL) {
         fprintf(stderr,"unsufficient heap error\n");
         return (-4);
      }
      ht[n].hlen=(unsigned char *) calloc(xl*yl,sizeof(unsigned char));
      if (ht[n].hlen == NULL) {
         fprintf(stderr,"unsufficient heap error\n");
         return (-4);
      }
      for (i=0; i<xl; i++) {
        for (j=0;j<yl; j++) {
	  if (xl>1) 
            sscanf(line,"%u %u %u %s",&x, &y, &len,huffdata);
	  else 
            sscanf(line,"%u %u %s",&x,&len,huffdata);
          h=0;k=0;
	  while (huffdata[k]) {
            h <<= 1;
            if (huffdata[k] == '1')
              h++;
            else if (huffdata[k] != '0'){
              fprintf(stderr,"huffman-table %u bit error\n",n);
              return (-5);
            };
            k++;
          };
          if (k != len) {
           fprintf(stderr,
              "warning: wrong codelen in table %u, pos [%2u][%2u]\n",
	       n,i,j);
          };
          ht[n].table[i*xl+j] = h;
          ht[n].hlen[i*xl+j] = (unsigned char) len;
	  do {
            fgets(line,99,fi);
          } while ((line[0] == '#') || (line[0] < ' '));
        }
      }
    }
    n++;
  } while (1);
}

/* read the huffman decoder table */
int read_decoder_table(fi) 
FILE *fi;
{
  int n,i,nn,t;
  unsigned int v0,v1;
  char command[100],line[100];
  for (n=0;n<HTN;n++) {
    /* .table number treelen xlen ylen linbits */ 
    do {
      fgets(line,99,fi);
    } while ((line[0] == '#') || (line[0] < ' '));
     
    sscanf(line,"%s %s %u %u %u %u",command,ht[n].tablename,
           &ht[n].treelen, &ht[n].xlen, &ht[n].ylen, &ht[n].linbits);
    if (strcmp(command,".end")==0)
      return n;
    else if (strcmp(command,".table")!=0) {
      fprintf(stderr,"huffman table %u data corrupted\n",n);
      return -1;
    }
    ht[n].linmax = (1<<ht[n].linbits)-1;
   
    sscanf(ht[n].tablename,"%u",&nn);
    if (nn != n) {
      fprintf(stderr,"wrong table number %u\n",n);
      return(-2);
    } 
    do {
      fgets(line,99,fi);
    } while ((line[0] == '#') || (line[0] < ' '));

    sscanf(line,"%s %u",command,&t);
    if (strcmp(command,".reference")==0) {
      ht[n].ref   = t;
      ht[n].val   = ht[t].val;
      ht[n].treelen  = ht[t].treelen;
      if ( (ht[n].xlen != ht[t].xlen) ||
           (ht[n].ylen != ht[t].ylen)  ) {
        fprintf(stderr,"wrong table %u reference\n",n);
        return (-3);
      };
      while ((line[0] == '#') || (line[0] < ' ') ) {
        fgets(line,99,fi);
      }
    }    
    else if (strcmp(command,".treedata")==0) {
      ht[n].ref  = -1;
      ht[n].val = (unsigned char (*)[2]) 
        calloc(2*(ht[n].treelen),sizeof(unsigned char));
      if (ht[n].val == NULL) {
    	fprintf(stderr, "heaperror at table %d\n",n);
    	exit (-10);
      }
      for (i=0;i<ht[n].treelen; i++) {
        fscanf(fi,"%x %x",&v0, &v1);
        ht[n].val[i][0]=(unsigned char)v0;
        ht[n].val[i][1]=(unsigned char)v1;
      }
      fgets(line,99,fi); /* read the rest of the line */
    }
    else {
      fprintf(stderr,"huffman decodertable error at table %d\n",n);
    }
  }
  return n;
}


/* do the huffman coding,  */
/* note! for counta,countb - the 4 bit value is passed in y, set x to 0 */
/* return value: 0-no error, 1 decode error				*/
void huffman_coder( x, y, h, bs)
unsigned int x; 	/* x-value */
unsigned int y; 	/* y-value */
struct huffcodetab *h; 	/* pointer to huffman code record 	*/
Bit_stream_struc *bs;  	/* pointer to open write bitstream 	*/
{
  HUFFBITS huffbits; /* data left aligned */
  HUFFBITS linbitsX; 
  HUFFBITS linbitsY;
  unsigned int len;
  unsigned int xl1 = h->xlen-1;
  unsigned int yl1 = h->ylen-1;
  linbitsX = 0;
  linbitsY = 0;
  if (h->table == NULL) return;
  if (((x < xl1) || (xl1==0)) && (y < yl1)) {
    huffbits = h->table[x*(h->xlen)+y];
    len = h->hlen[x*(h->xlen)+y];
    putbits(bs,huffbits,len);
    return;
  }  
  else if (x >= xl1) {
    linbitsX = x-xl1;
    if (linbitsX > h->linmax) {
      fprintf(stderr,"warning: Huffman X table overflow\n");
      linbitsX= h->linmax;
    };
    if (y >= yl1) {
      huffbits = h->table[(h->ylen)*(h->xlen)-1];
      len = h->hlen[(h->ylen)*(h->xlen)-1];
      putbits(bs,huffbits,len);
      linbitsY = y-yl1;
      if (linbitsY > h->linmax) {
        fprintf(stderr,"warning: Huffman Y table overflow\n");
        linbitsY = h->linmax;
      };
      if (h->linbits) {
        putbits(bs,linbitsX,h->linbits);
        putbits(bs,linbitsY,h->linbits);
      }
    } 
    else { /* x>= h->xlen, y<h->ylen */
      huffbits = h->table[(h->ylen)*xl1+y];
      len = h->hlen[(h->ylen)*xl1+y];
      putbits(bs,huffbits,len);
      if (h->linbits) {
        putbits(bs,linbitsX,h->linbits);
      }
    }
  }
  else  { /* ((x < h->xlen) && (y>=h->ylen)) */
    huffbits = h->table[(h->ylen)*x+yl1];
    len = h->hlen[(h->ylen)*x+yl1];
    putbits(bs,huffbits,len);
    linbitsY = y-yl1;
    if (linbitsY > h->linmax) {
      fprintf(stderr,"warning: Huffman Y table overflow\n");
      linbitsY = h->linmax;
    };
    if (h->linbits) {
       putbits(bs,linbitsY,h->linbits);
    }
  }
}

/* do the huffman-decoding 						*/
/* note! for counta,countb -the 4 bit value is returned in y, discard x */
int huffman_decoder(h, x, y, v, w)
struct huffcodetab *h;	/* pointer to huffman code record	*/
/* unsigned */ int *x; 	/* returns decoded x value 		*/
/* unsigned */ int *y;	/* returns decoded y value		*/
int *v;
int *w;
{  
  HUFFBITS level;
  int point = 0;
  int error = 1;
  level     = dmask;
  if (h->val == NULL) return 2;

  /* table 0 needs no bits */
  if ( h->treelen == 0)
  {  *x = *y = 0;
     return 0;
  }


  /* Lookup in Huffman table. */

  do {
    if (h->val[point][0]==0) {   /*end of tree*/
      *x = h->val[point][1] >> 4;
      *y = h->val[point][1] & 0xf;

      error = 0;
      break;
    } 
    if (hget1bit()) {
      while (h->val[point][1] >= MXOFF) point += h->val[point][1]; 
      point += h->val[point][1];
    }
    else {
      while (h->val[point][0] >= MXOFF) point += h->val[point][0]; 
      point += h->val[point][0];
    }
    level >>= 1;
  } while (level  || (point < ht->treelen) );
  
  /* Check for error. */
  
  if (error) { /* set x and y to a medium value as a simple concealment */
    printf("Illegal Huffman code in data.\n");
    *x = (h->xlen-1 << 1);
    *y = (h->ylen-1 << 1);
  }

  /* Process sign encodings for quadruples tables. */

  if (h->tablename[0] == '3'
      && (h->tablename[1] == '2' || h->tablename[1] == '3')) {
     *v = (*y>>3) & 1;
     *w = (*y>>2) & 1;
     *x = (*y>>1) & 1;
     *y = *y & 1;

     /* v, w, x and y are reversed in the bitstream. 
        switch them around to make test bistream work. */
     
/*   {int i=*v; *v=*y; *y=i; i=*w; *w=*x; *x=i;}  MI */

     if (*v)
        if (hget1bit() == 1) *v = -*v;
     if (*w)
        if (hget1bit() == 1) *w = -*w;
     if (*x)
        if (hget1bit() == 1) *x = -*x;
     if (*y)
        if (hget1bit() == 1) *y = -*y;
     }
     
  /* Process sign and escape encodings for dual tables. */
  
  else {
  
      /* x and y are reversed in the test bitstream.
         Reverse x and y here to make test bitstream work. */
	 
/*    removed 11/11/92 -ag  
		{int i=*x; *x=*y; *y=i;} 
*/      
     if (h->linbits)
       if ((h->xlen-1) == *x) 
         *x += hgetbits(h->linbits);
     if (*x)
        if (hget1bit() == 1) *x = -*x;
     if (h->linbits)	  
       if ((h->ylen-1) == *y)
         *y += hgetbits(h->linbits);
     if (*y)
        if (hget1bit() == 1) *y = -*y;
     }
	  
  return error;  
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本一区二区| 亚洲欧洲成人自拍| 亚洲免费观看高清完整版在线| 亚洲愉拍自拍另类高清精品| 久久99精品久久久久久国产越南 | 欧美成人精精品一区二区频| 国产精品女同一区二区三区| 久久99热这里只有精品| 欧美伊人久久久久久久久影院| 国产精品水嫩水嫩| 国产成人免费在线视频| 欧美成va人片在线观看| 亚洲电影在线播放| 日本精品视频一区二区| 中文字幕一区av| 国产麻豆精品theporn| 欧美不卡视频一区| 日本不卡中文字幕| 538prom精品视频线放| 一区二区三区免费观看| 色哟哟欧美精品| 成人免费视频在线观看| 99视频超级精品| 国产精品国产自产拍在线| 国精产品一区一区三区mba视频| 日韩写真欧美这视频| 日本三级亚洲精品| 91精品国产一区二区三区香蕉| 亚洲国产你懂的| 欧美日本在线播放| 天堂成人国产精品一区| 51精品国自产在线| 日日噜噜夜夜狠狠视频欧美人| 欧美高清精品3d| 三级久久三级久久| 欧美一区二区黄| 久久丁香综合五月国产三级网站| 欧美成人一区二区三区在线观看| 麻豆精品一区二区综合av| 精品不卡在线视频| 粉嫩aⅴ一区二区三区四区五区| 久久精品欧美日韩精品| 国产成人aaa| 中文字幕精品一区二区精品绿巨人 | 久久一区二区三区国产精品| 激情综合网av| 国产视频在线观看一区二区三区| 国产99久久精品| 中文字幕一区二区三区四区 | 一区二区三区电影在线播| 在线日韩一区二区| 日韩成人一区二区三区在线观看| 精品奇米国产一区二区三区| 成人午夜免费av| 亚洲免费av高清| 欧美日韩在线播放| 国产呦精品一区二区三区网站| 欧美精彩视频一区二区三区| 色欧美片视频在线观看| 蜜桃久久精品一区二区| 国产精品久久久久久久裸模| 欧美女孩性生活视频| 国产大陆a不卡| 午夜欧美2019年伦理| 久久新电视剧免费观看| 91官网在线免费观看| 黄色成人免费在线| 亚洲精品免费电影| 精品对白一区国产伦| 欧美在线观看一区| 国产精品资源网| 五月综合激情日本mⅴ| 久久亚洲精品小早川怜子| 色视频成人在线观看免| 国内精品视频一区二区三区八戒| 中文字幕一区三区| 久久综合视频网| 欧美午夜精品久久久| 国产成人av电影在线| 青青草国产成人av片免费| 中文字幕亚洲成人| 久久久一区二区| 4438x亚洲最大成人网| 91丨porny丨蝌蚪视频| 韩国女主播一区二区三区| 一区二区三区蜜桃| 国产精品久久久久影视| 日韩免费视频线观看| 欧美三级韩国三级日本三斤| 成人动漫av在线| 国产福利一区二区三区| 美女视频黄免费的久久| 亚洲成人av资源| 一区二区三区视频在线看| 中文字幕不卡在线播放| 久久网这里都是精品| 91精品国产高清一区二区三区蜜臀| 一本久久a久久精品亚洲| www.欧美.com| 成人av先锋影音| 成人黄色片在线观看| 国产激情91久久精品导航 | 色999日韩国产欧美一区二区| 国产成人亚洲精品狼色在线| 精品一区二区三区在线视频| 日韩和欧美的一区| 丝袜美腿亚洲综合| 五月天网站亚洲| 亚洲福利电影网| 亚洲国产成人av网| 图片区日韩欧美亚洲| 五月天久久比比资源色| 丝袜美腿亚洲一区二区图片| 日本亚洲免费观看| 久久99精品国产麻豆婷婷洗澡| 肉色丝袜一区二区| 麻豆成人久久精品二区三区红| 久久国产欧美日韩精品| 国产精品1区二区.| 成人精品国产福利| 一本久久a久久免费精品不卡| 一本大道久久a久久精品综合| 日本道免费精品一区二区三区| 欧美熟乱第一页| 91精品国产91综合久久蜜臀| 欧美成人三级电影在线| 欧美经典一区二区| 综合精品久久久| 首页欧美精品中文字幕| 美女在线视频一区| 岛国av在线一区| 欧美色综合影院| 欧美成人精品福利| 国产精品久久久久久福利一牛影视| 亚洲色图在线视频| 日本美女视频一区二区| 国产精品一级片| 欧美在线观看你懂的| 日韩欧美一卡二卡| 国产精品三级电影| 亚洲成人久久影院| 国产精品小仙女| 欧美日韩在线精品一区二区三区激情| 欧美一区二区视频观看视频| 久久久久久9999| 亚洲国产裸拍裸体视频在线观看乱了 | 99国产精品久久| 3d动漫精品啪啪一区二区竹菊| 久久久久久久精| 亚洲一区二区av在线| 国产一区二区在线看| aaa亚洲精品| 日韩精品一区二区三区视频在线观看 | 精品免费国产一区二区三区四区| 国产精品久久久久影视| 美国av一区二区| www.欧美日韩| 欧美成人a视频| 一区二区三区四区在线播放| 国产在线不卡一区| 欧美理论电影在线| 最好看的中文字幕久久| 麻豆精品视频在线观看免费| 欧美中文字幕一区二区三区| 国产日产亚洲精品系列| 美女www一区二区| 欧美图区在线视频| 国产精品久久久99| 久久99国产乱子伦精品免费| 日本高清不卡在线观看| 国产农村妇女精品| 美脚の诱脚舐め脚责91| 欧美精选在线播放| 亚洲欧美偷拍卡通变态| 风流少妇一区二区| 精品va天堂亚洲国产| 美女性感视频久久| 欧美高清视频一二三区| 亚洲香肠在线观看| 色综合久久久久综合99| 国产日韩av一区| 国产精品亚洲午夜一区二区三区| 3d成人动漫网站| 午夜久久久久久久久久一区二区| 91国偷自产一区二区开放时间| 中文字幕一区二区三区四区| 成人综合婷婷国产精品久久免费| 久久这里都是精品| 国产自产高清不卡| 久久婷婷国产综合国色天香 | 91在线视频播放地址| 国产婷婷色一区二区三区在线| 国产一区二区三区电影在线观看| 欧美xxxx在线观看| 国内精品国产成人国产三级粉色| 日韩免费看网站| 国产乱码精品一区二区三区av| 精品日韩一区二区三区| 国产一区二区三区免费| 欧美极品少妇xxxxⅹ高跟鞋|