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

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

?? huffman.c

?? 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一区二区三区免费野_久草精品视频
亚洲天堂福利av| 免费看日韩a级影片| 国产麻豆精品久久一二三| 欧美一区国产二区| 三级欧美在线一区| 欧美电影在哪看比较好| 日韩高清不卡一区二区三区| 日韩精品一区国产麻豆| 久久精品72免费观看| 久久久久久麻豆| 成人福利电影精品一区二区在线观看| 国产精品麻豆久久久| 欧美在线视频你懂得| 亚洲国产综合91精品麻豆| 奇米精品一区二区三区四区| 精品国产一区二区三区久久久蜜月| 国模一区二区三区白浆| 最新久久zyz资源站| 欧美日韩中文字幕精品| 精品亚洲国内自在自线福利| 国产精品不卡在线观看| 中文字幕一区二区三区不卡在线 | 色哟哟一区二区在线观看| 亚洲夂夂婷婷色拍ww47| 精品美女在线播放| 94-欧美-setu| 美女网站在线免费欧美精品| 中文字幕电影一区| 69久久99精品久久久久婷婷| 91丨porny丨国产入口| 日韩美女视频在线| 94-欧美-setu| 久久av资源网| 亚洲一区二区五区| 久久女同精品一区二区| 婷婷国产在线综合| 国产精品理论片| 日韩一区二区视频在线观看| aa级大片欧美| 激情深爱一区二区| 亚洲一区二区黄色| 国产精品国产三级国产普通话三级 | 国产亚洲欧美色| 欧美色男人天堂| 成人激情文学综合网| 伦理电影国产精品| 一区二区三区国产精华| 久久精品视频一区二区三区| 欧美日韩综合在线免费观看| www.在线成人| 国产经典欧美精品| 蜜桃在线一区二区三区| 亚洲国产一二三| 国产精品久久久久天堂| 久久久欧美精品sm网站| 毛片av一区二区三区| 亚洲一区二区三区四区在线| 亚洲欧洲精品一区二区精品久久久| 欧美一区二区视频网站| 国产精品亚洲一区二区三区妖精 | 粉嫩欧美一区二区三区高清影视| 久久先锋影音av鲁色资源网| 欧美日韩国产一区| 色女孩综合影院| 99这里只有精品| 成人午夜av影视| 国产精品77777| 韩国欧美一区二区| 麻豆久久一区二区| 美腿丝袜亚洲一区| 免费观看在线综合| 奇米精品一区二区三区在线观看一| 一区二区三区欧美日| 亚洲人成亚洲人成在线观看图片 | 香蕉乱码成人久久天堂爱免费| 色狠狠综合天天综合综合| 国产成人aaa| 国产精品77777竹菊影视小说| 国产麻豆精品视频| 国产成人午夜99999| 成人性生交大片免费看在线播放| 国产精品亚洲午夜一区二区三区| 国产成人亚洲精品狼色在线| 日韩欧美电影在线| 成人三级在线视频| 99精品视频免费在线观看| 日韩欧美123| 国产一区亚洲一区| 丁香天五香天堂综合| 成人激情免费电影网址| 99国产精品视频免费观看| 91色porny| 欧美视频一区二区三区四区| 欧美日韩精品电影| 欧美zozo另类异族| 国产欧美精品在线观看| 中文字幕亚洲区| 亚洲一区二区高清| 蜜桃传媒麻豆第一区在线观看| 精品一区二区国语对白| 成人中文字幕在线| 亚洲国产日韩综合久久精品| 日韩国产欧美在线播放| 国内精品在线播放| 99精品久久久久久| 欧美精品第1页| 国产亚洲精品中文字幕| 亚洲免费观看高清完整版在线观看熊 | 中文字幕五月欧美| 五月婷婷另类国产| 国产麻豆一精品一av一免费| 99久久综合狠狠综合久久| 欧美三级日本三级少妇99| 日韩精品一区二区三区老鸭窝| 中文字幕av不卡| 首页国产欧美久久| 成人性色生活片免费看爆迷你毛片| 欧美午夜片在线观看| 精品va天堂亚洲国产| 亚洲色图20p| 久久电影网站中文字幕| 成人免费毛片片v| 99热在这里有精品免费| 精品欧美黑人一区二区三区| 亚洲欧美国产77777| 精品一区二区在线观看| 日本高清不卡aⅴ免费网站| 国产精品2024| 欧美久久久久免费| 国产精品久久久99| 久久99久久精品| 欧美丝袜丝交足nylons| 国产精品无遮挡| 强制捆绑调教一区二区| 91免费看片在线观看| 久久久久综合网| 狠狠色丁香婷婷综合久久片| www..com久久爱| 26uuu亚洲婷婷狠狠天堂| 亚洲国产精品一区二区久久 | 亚洲欧美日韩小说| 国产精品一区免费在线观看| 欧美日韩国产精选| 亚洲欧美一区二区三区极速播放| 狠狠色2019综合网| 91精品国产手机| 亚洲一区二区三区自拍| zzijzzij亚洲日本少妇熟睡| 久久久久97国产精华液好用吗| 26uuu亚洲婷婷狠狠天堂| 免费观看在线色综合| 欧美日韩第一区日日骚| 一区二区三区成人| 91视视频在线观看入口直接观看www| jizzjizzjizz欧美| 国产蜜臀av在线一区二区三区 | 色婷婷综合久久| aaa亚洲精品| 国产精品美女久久久久久久久| 精品无人码麻豆乱码1区2区| 日韩视频一区在线观看| 日韩av一区二| 日韩午夜电影在线观看| 天天色综合成人网| 欧美日韩国产免费| 亚洲午夜影视影院在线观看| 在线一区二区三区做爰视频网站| 亚洲三级视频在线观看| 99re热这里只有精品视频| 18欧美亚洲精品| 91久久精品一区二区| 一个色妞综合视频在线观看| 在线一区二区观看| 午夜激情综合网| 日韩一区二区在线播放| 狠狠色丁香婷综合久久| 中文字幕不卡的av| av高清久久久| 亚洲激情av在线| 欧美视频中文字幕| 日韩精品1区2区3区| 欧美电影免费观看完整版| 激情综合色丁香一区二区| 国产麻豆9l精品三级站| 日本一区二区三区免费乱视频| 成人免费精品视频| 樱花影视一区二区| 另类小说一区二区三区| 久久久亚洲精品一区二区三区 | 国产成人免费在线视频| 久久亚洲一区二区三区明星换脸| 国产高清不卡一区二区| 亚洲欧美一区二区视频| 欧美色视频一区| 精品无人区卡一卡二卡三乱码免费卡| 亚洲欧洲另类国产综合| 极品少妇xxxx精品少妇| 国产精品视频你懂的| 欧美日韩视频一区二区| 激情综合色综合久久|