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

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

?? huffman.c

?? 44b0上實現mp3解碼
?? C
字號:
/***********************************************
copyright by Haia Tech
www.haia2004.com
************************************************/



/* MPEG Audio Layer-3 decoder             */
/* Bjorn Wesen 1997                       */
/*                                        */
/* Huffman decoder                        */

#include "huffman.h"
#include "common.h"
 
extern	unsigned  int frameNum;

/* lots of tables */

/* code implementing the Huffman decoder for layer-3 */
/* decode the Huffman coded energies of a Granule */

#define BITS_USED ((((datapos - (totpos >> 3)) * 8) % BITSTREAM_BUFSIZE) - \
	dataword_len - (totpos & 7))

static int t_linbits[32] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,6,8,
			     10,13,4,5,6,7,8,9,11,13 };

static unsigned int offset;
static unsigned int  buf_bit_idx=8;
unsigned int buf_byte_idx;

extern unsigned int totpos;
extern unsigned char  buf[BITSTREAM_BUFSIZE];


static unsigned int dataword; 
int dataword_len;
int datapos;
 

extern struct BandIndex sfBandIndex[3];
extern frame_params fr_ps; 

int HuffmanTable_decode(int tbl, 
		    int *x, int *y, int *v, int *w);


void III_hufman_decode(struct Granule *gr,int part2_start,
		       	 int freqline[SBLIMIT][SSLIMIT])
{
    unsigned int reg1, reg2,i; 

	unsigned int part3_length = part2_start + gr->part2_3_length;
	unsigned used;
    int h,*f=&freqline[0][0];

    if(gr->window_switching_flag &&
       gr->block_type == 2)
	{
	
	/* short block regions */
	
	  reg1 = 36;  
	  reg2 = 576;
	
    }
	else
	{
	/* long block regions */

	  reg1 = sfBandIndex[fr_ps.header->sampling_frequency].l[gr->region0_count + 1];
	  reg2 = sfBandIndex[fr_ps.header->sampling_frequency].l[gr->region0_count + gr->region1_count + 2];
    }


    /* fill up dataword, end at a bytealign in the buffer */
    {
	int bitpos = totpos & 7;    //取8的余數
	datapos = (totpos>> 3) & (BITSTREAM_BUFSIZE - 1);
	/* the first read might not be bytealigned so shift it in place */
	/* we have duplicated the last 4 bytes in the stream so it doesnt
	   matter that datapos+2 etc dont pass through modulo */
	dataword = buf[datapos++] << 24   ;                     //左移3個字節
	datapos  %=  BITSTREAM_BUFSIZE;
	dataword|= buf[datapos++] << 16 ;
	datapos  %=  BITSTREAM_BUFSIZE;
	dataword|= buf[datapos++] << 8  ;
	datapos  %= BITSTREAM_BUFSIZE;
	dataword|= buf[datapos++]       ;
	datapos  %= BITSTREAM_BUFSIZE;

	dataword <<= bitpos;  /* strip the misaligned leading bits  再左移bitpos位*/
	dataword_len = 32 - bitpos;  /* number of valid bits in dataword  有效位的長度*/
	/* now dataword is loaded with at least 24 bits of data */
    }

    part3_length -= totpos;    //計算部分2的結束位置

    /* read the big values, they come in pairs */

    h = gr->table_select[0];  /* start with the first table */
    for(i = 0; i < gr->big_values * 2; i += 2)
	{
	unsigned long *h_tab;
	unsigned int lead;
	int l, len, x, y;

	if(i == reg1)
	    h = gr->table_select[1];
	else if(i == reg2)
	    h = gr->table_select[2];
    h_tab = h_tables[h];

	/* dataword is always leftaligned, not rightaligned */

	lead = dataword >> (32 - NC_O); /* 19 - nc_o */
	h_tab += h_cue[h][lead];  
	
	len = (*h_tab >> 8) & 0x1f;
	
	/* check for an immediate hit, so we can decode short codes very fast
	 */

	if (((*h_tab>>(32-len))!=(dataword>>(32-len)))&&(len))
	{
	  int dir_flag;
	  int lag;
	  unsigned int chunk = (dataword & 0xffffe000) | 0x1ff; /* WHY */
	  lag = h_cue[h][lead + 1] - h_cue[h][lead];
	  dir_flag = 0;
	  while(lag > 1)
	  {
	    if (!dir_flag)
	      h_tab += lag >> 1;
	    else
	      h_tab -= lag >> 1;
	    if(*h_tab > chunk)
		{
		    if(!dir_flag)
			    lag >>= 1;
		    else
			    lag -= lag >> 1;
		    dir_flag =- 1;
		}
		else
		{
		    if (!dir_flag)
			   lag -= lag >> 1;
		    else
			   lag >>= 1;
		    dir_flag = 0;
		}
	  }

      len = (*h_tab >> 8) & 0x1f;
      if((*h_tab >> (32 - len)) != (chunk >> (32 - len)))
	  {
		  if (!dir_flag)
		    h_tab++;
		  else
		    h_tab--;
		  len = (*h_tab >> 8) & 0x1f;
	  }
	}
	
	dataword_len -= len;
	dataword <<= len;  /* flush away the used bits */
	
	/* fill up dataword */
	while(dataword_len <= 24) {
	    dataword |= buf[datapos++] << (24 - dataword_len);
	    dataword_len += 8;
 	    datapos  %= BITSTREAM_BUFSIZE;    //保證取數據的位置,防止溢出
	}
	
	/* dataword now contains at least 24 bits */
	
	x = (*h_tab >> 4) & 0xf;
	y = *h_tab & 0xf;

	l = t_linbits[h];

	/* linbits are used when values larger than 15 has to be encoded */

	/* l is 13 or less, and we know we have at least 24 bits of data
	   in the dataword, so use that directly */
	
	if(x == 15 && l > 0) {
	    x += dataword >> (32 - l);
	    dataword <<= l;
	    dataword_len -= l;
	    /* better refill since we might have used 13 bits */
	    while(dataword_len <= 24) {
		  dataword |= buf[datapos++] << (24 - dataword_len);
		  dataword_len += 8;
	      datapos = datapos % BITSTREAM_BUFSIZE;//保證取數據的位置,防止溢出
	    }
	}

	/* read sign-bit for x */
	if(x) {
	    if(dataword & 0x80000000)
	    	x = - x;
	    dataword <<= 1;
	    dataword_len--;
	}

	if(y == 15 && l > 0) {
	    y += dataword >> (32 - l);
	    dataword <<= l; 
	    dataword_len -= l;
	    /* better refill since we might have used 13 bits */
	    while(dataword_len <= 24) {
 		  dataword |= buf[datapos++] << (24 - dataword_len);
		  dataword_len += 8;
	      datapos %=  BITSTREAM_BUFSIZE;//保證取數據的位置,防止溢出
	    }
	}

	/* read sign-bit for y */
	if(y) {
	    if(dataword & 0x80000000)
	    	y = - y;
	    dataword <<= 1;
	    dataword_len--;
	}

	*f++=x;
	*f++=y;
}
	/* there are enough bits in dataword for the next run */
	
	/*  BIGVALUES 全部計算完 */

    /* Now read the count1 values, they come in quadruples, and we
       don't know explicetely how many there are but we are supposed to
       keep decoding until all huffman bits have been decoded or until
       all frequency lines have been assigned (i == 576). 
    */
            
	  /* choose count1 table */
	  used=BITS_USED;

      h = gr->count1table_select + 32;  

      while(BITS_USED < part3_length && i < 576)
	  {

	    HuffmanTable_decode(h,f + 2, f + 3, f, f + 1);
	    f += 4;
	    i += 4;
	  }

      used = BITS_USED;

	  hgetbits(used);


	  /* rewind if we got a bit too far, and discard if we got too short  */

      if(used>part3_length)                    //保證totpos是part3_length長度的累加
	  {
	     i -= 4;
	     rewindNbits(used - part3_length);
	  }
   /*   相等  totpos 不變  */
	  else if(used<part3_length)
		 hgetbits(part3_length-used);    //拋棄掉

	  /* the rest of the frequency lines are zero */
    for(; i < 576; i++)
  	   *f++=0;

}



int HuffmanTable_decode(int tbl, 
		    int *x, int *y, int *v, int *w)
{
    unsigned long *h_tab;
    unsigned int lead;
    int len,code;
  
    h_tab = h_tables[tbl];

    /* dataword is always leftaligned, not rightaligned */

    lead = dataword >> (32 - NC_O); /* 19 - NC_O */
    h_tab += h_cue[tbl][lead];  
    
    len = (*h_tab >> 8) & 0x1f;
    
    /* check for an immediate hit, so we can decode short codes very fast
     */
    if ((*h_tab >> (32 - len)) != dataword >> (32 - len)) 
	{
	int dir_flag;
	int lag;
	unsigned int chunk = (dataword & 0xffffe000) | 0x1ff; /* WHY */
	lag = h_cue[tbl][lead + 1] - h_cue[tbl][lead];
	dir_flag = 0;
	while(lag > 1)
	{
	  if (!dir_flag)
		h_tab += lag >> 1;
	  else
		h_tab -= lag >> 1;
	  if(*h_tab > chunk)
	  {
		if(!dir_flag)
		    lag >>= 1;
		else
		    lag -= lag >> 1;
		dir_flag =- 1;
	  }
	  else
	  {
		if (!dir_flag)
		    lag -= lag >> 1;
		else
		    lag >>= 1;
		dir_flag = 0;
	  }
	}
	len = (*h_tab >> 8) & 0x1f;
	if((*h_tab >> (32 - len)) != (chunk >> (32 - len)))
	{
	    if (!dir_flag)
		h_tab++;
	    else
		h_tab--;
	    len = (*h_tab >> 8) & 0x1f;
	}
    }

    dataword_len -= len;
    dataword <<= len;  /* flush away the used bits */

    /* fill up dataword */
    while(dataword_len <= 24)
	{
	  dataword |= buf[datapos++] << (24 - dataword_len);
	  dataword_len += 8;
      datapos %=  BITSTREAM_BUFSIZE;
    }

    /* dataword now contains at least 24 bits */

    *x = (*h_tab >> 4) & 0xf;
	code=*x;
//	*y = *h_tab & 0xf;
  	
    *v = (*x >> 3) & 1;
    *w = (*x >> 2) & 1;
    *y = *x & 1;                     //  先求X的值!!!!!!!
    *x = (*x >> 1) & 1;
    
    /* read and process the sign bits */
    
    if(*v)
	{
	   if(dataword & 0x80000000)
	    *v = - *v;
	   dataword <<= 1;
	   dataword_len--;
    }
    if(*w) {
	if(dataword & 0x80000000)
	    *w = - *w;
	dataword <<= 1;
	dataword_len--;
    }
    if(*x) {
	if(dataword & 0x80000000)
	    *x = - *x;
	dataword <<= 1;
	dataword_len--;
    }
    if(*y) {
	if(dataword & 0x80000000)
	    *y = - *y;
	dataword <<= 1;
	dataword_len--;
    }
    
    /* we have used up to 4 bits, so there are at least 20 bits
       left in dataword, which is enough for the next run */
    
    return code;

}


void hputbuf(unsigned int val)
{
	buf[offset % BITSTREAM_BUFSIZE] = val;
	offset++;
}




/*read N bit from the bit stream */
unsigned int hgetbits(int N)
{
	unsigned int  val=0;
	register int j = N;
	register int tmp;
	int k;
    int putmask1[9]={0x0, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff};

/*
	 if (N > MAX_LENGTH)
		 printf("Cannot read or write more than %d bits at a time.\n", MAX_LENGTH);
*/
	totpos += N;
	while (j > 0) {
		if (!buf_bit_idx)
		{
			buf_bit_idx = 8;
			buf_byte_idx++;
		}
		k = MIN(j, (int)buf_bit_idx);
		tmp = buf[buf_byte_idx%BITSTREAM_BUFSIZE]&putmask1[buf_bit_idx];
		tmp = tmp >> (buf_bit_idx-k);
		val |= tmp << (j-k);
		buf_bit_idx -= k;
		j -= k;
	}
	return(val);
}


void rewindNbits(int N)
{
	totpos -= N;
	buf_bit_idx += N;
	while( buf_bit_idx >= 8 )
	{
		buf_bit_idx -= 8;
		buf_byte_idx--;
	}
}


void rewindNbytes(int N)
{
	totpos -= N*8;
	buf_byte_idx -= N;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91女神在线视频| 国产福利91精品| 亚洲青青青在线视频| 国产精品日日摸夜夜摸av| 欧美一二三区精品| 精品欧美乱码久久久久久| 精品国产乱码久久久久久图片| 精品视频123区在线观看| 欧美日韩一区二区三区视频| 欧美日韩一区不卡| 制服.丝袜.亚洲.另类.中文| 日韩亚洲电影在线| 久久久久久综合| 中文字幕一区三区| 亚洲国产成人高清精品| 免费在线一区观看| 高清不卡一区二区在线| www.日韩精品| 欧美人xxxx| 亚洲精品在线免费观看视频| 国产午夜精品久久| 亚洲婷婷在线视频| 日韩av一区二区三区四区| 美女诱惑一区二区| 成人黄色软件下载| 欧美日韩一级黄| 久久综合九色综合欧美亚洲| 国产精品热久久久久夜色精品三区 | 伊人色综合久久天天| 亚洲bt欧美bt精品777| 久久国产精品无码网站| www.亚洲免费av| 91精品婷婷国产综合久久竹菊| 久久女同精品一区二区| 亚洲三级电影网站| 麻豆国产精品一区二区三区| 成人小视频在线| 欧美一区二区二区| 亚洲色图.com| 精品影视av免费| 欧美一a一片一级一片| 久久综合色鬼综合色| 亚洲一区二区三区四区五区黄| 久久精品噜噜噜成人av农村| 91小视频免费看| 精品免费视频一区二区| 亚洲影视在线观看| 成人aa视频在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲第一在线综合网站| 国产一区二区三区在线观看免费视频| 成人免费av资源| 精品久久久久久久久久久久久久久久久 | 欧美高清视频不卡网| 国产精品久久久久久久浪潮网站 | 在线播放中文字幕一区| 国产精品久久久久桃色tv| 激情欧美一区二区三区在线观看| 91丨porny丨首页| 欧美激情一区二区三区蜜桃视频 | 中文字幕一区二区三区四区不卡 | 亚洲精品视频在线看| 国产精品1区二区.| 久久综合视频网| 久久99久久久久| 欧美一区二区视频在线观看2022| 一区二区欧美国产| 在线亚洲精品福利网址导航| 中文字幕中文字幕一区二区| 国产成人日日夜夜| 精品国精品国产| 韩国女主播成人在线观看| 91精品国产欧美一区二区成人| 亚洲一区自拍偷拍| 91精品办公室少妇高潮对白| 亚洲丝袜精品丝袜在线| 91亚洲大成网污www| 自拍偷拍欧美精品| 色香蕉成人二区免费| 亚洲女厕所小便bbb| 色综合久久99| 亚洲高清在线视频| 欧美电影精品一区二区| 国产伦精品一区二区三区视频青涩 | 粉嫩av亚洲一区二区图片| 国产日韩欧美高清| av福利精品导航| 亚洲精品精品亚洲| 欧美日本视频在线| 欧美aaa在线| 久久老女人爱爱| 成人午夜大片免费观看| 亚洲欧美日韩国产综合| 欧美性猛片aaaaaaa做受| 丝袜国产日韩另类美女| 亚洲精品一区二区三区香蕉| 国产成人无遮挡在线视频| 亚洲人成影院在线观看| 欧美日韩不卡一区| 国产精品自拍毛片| 亚洲精品久久久蜜桃| 欧美日韩国产一级二级| 精品一区二区三区香蕉蜜桃 | 2020国产精品久久精品美国| 成人免费av资源| 亚洲一区二区三区三| 精品少妇一区二区三区| 成人av在线网站| 亚洲午夜免费视频| 国产三级欧美三级| 91久久国产最好的精华液| 麻豆国产一区二区| 亚洲人成影院在线观看| 日韩欧美国产精品| 色94色欧美sute亚洲13| 精品一区免费av| 亚洲综合久久久| 欧美成人免费网站| 91成人在线观看喷潮| 韩日欧美一区二区三区| 亚洲一区欧美一区| 中文字幕精品—区二区四季| 欧美一区二区三区免费| 91亚洲精品久久久蜜桃网站 | 欧美日韩视频在线第一区| 国产精品影视网| 肉丝袜脚交视频一区二区| 亚洲视频一区二区免费在线观看| 精品福利在线导航| 欧美男生操女生| 成人精品电影在线观看| 狠狠色狠狠色合久久伊人| 无码av免费一区二区三区试看| 亚洲视频狠狠干| 国产精品美女久久久久高潮| 精品99999| 日韩欧美一区在线| 欧美一区二区在线视频| 欧美久久免费观看| 欧美午夜一区二区三区免费大片| www.性欧美| av中文字幕亚洲| 波多野结衣亚洲| eeuss鲁一区二区三区| 国产麻豆9l精品三级站| 国产精品中文字幕日韩精品| 另类成人小视频在线| 捆绑调教一区二区三区| 美国精品在线观看| 美腿丝袜亚洲三区| 狠狠色综合色综合网络| 国产一区二区电影| 国产精品一级黄| 国产iv一区二区三区| 粉嫩av一区二区三区在线播放 | 精品1区2区在线观看| 日韩免费在线观看| 久久综合九色综合97婷婷女人| 精品国产一区a| 久久精品一区四区| 国产三级精品在线| 最近日韩中文字幕| 亚洲成人免费视频| 日本不卡一区二区三区高清视频| 免费看日韩a级影片| 久久99国产精品久久99| 高清久久久久久| 一本色道久久综合亚洲精品按摩| 亚洲美女视频在线| 在线不卡中文字幕播放| 97久久人人超碰| 亚洲三级电影网站| 26uuuu精品一区二区| 久久你懂得1024| 成人免费小视频| 五月天一区二区三区| 久久国产婷婷国产香蕉| 国产成人免费9x9x人网站视频| 成人国产电影网| 欧美一a一片一级一片| 日韩亚洲欧美在线| 国产欧美一区二区三区在线看蜜臀| 国产精品嫩草久久久久| 亚洲丶国产丶欧美一区二区三区| 日韩av不卡一区二区| 丰满亚洲少妇av| 欧美性猛交xxxx乱大交退制版 | 亚洲小少妇裸体bbw| 免费不卡在线观看| www.爱久久.com| 欧美一区二区三区婷婷月色 | 亚洲男人天堂av网| 裸体健美xxxx欧美裸体表演| 99在线精品观看| 欧美日韩精品福利| 中文字幕免费不卡| 日本不卡免费在线视频| av中文字幕在线不卡| 日韩久久久久久| 夜夜嗨av一区二区三区四季av|