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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? huffman.c

?? arm的板子很多人都在用
?? C
字號(hào):
/***********************************************
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的余數(shù)
	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個(gè)字節(jié)
	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  有效位的長(zhǎng)度*/
	/* now dataword is loaded with at least 24 bits of data */
    }

    part3_length -= totpos;    //計(jì)算部分2的結(jié)束位置

    /* 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;    //保證取數(shù)據(jù)的位置,防止溢出
	}
	
	/* 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;//保證取數(shù)據(jù)的位置,防止溢出
	    }
	}

	/* 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;//保證取數(shù)據(jù)的位置,防止溢出
	    }
	}

	/* 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 全部計(jì)算完 */

    /* 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長(zhǎng)度的累加
	  {
	     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;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人片在线| 裸体在线国模精品偷拍| 日韩一区二区三区在线观看| 国产成人午夜精品影院观看视频| 亚洲午夜羞羞片| 久久精品日韩一区二区三区| 欧美亚洲综合另类| 国产成人免费视| 日本亚洲三级在线| 国产酒店精品激情| 亚洲国产精品人人做人人爽| 久久久精品黄色| 日韩一区二区免费视频| 一本在线高清不卡dvd| 欧美日韩高清不卡| 成人在线视频一区| 久久精品av麻豆的观看方式| 亚洲成人一区二区在线观看| 亚洲国产精品传媒在线观看| 日韩精品一区二区在线观看| 在线一区二区三区四区五区| 丁香亚洲综合激情啪啪综合| 蜜臀av性久久久久蜜臀aⅴ| 一区二区三区中文字幕| 中文字幕亚洲一区二区av在线| 欧美电影免费观看高清完整版在线观看| 一本到不卡免费一区二区| 成人综合婷婷国产精品久久| 日本欧美一区二区| 午夜亚洲福利老司机| 一区二区三区四区不卡视频| 国产精品久久久爽爽爽麻豆色哟哟| 欧美r级电影在线观看| 91精品国产一区二区三区 | 一区二区理论电影在线观看| 久久久久久久国产精品影院| 欧美成人精品福利| 欧美va亚洲va国产综合| 日韩一级完整毛片| 精品区一区二区| 欧美成人三级电影在线| 日韩精品资源二区在线| 欧美不卡一区二区三区四区| 日韩一区二区免费在线观看| 欧美一级欧美三级| 欧美一区二区在线播放| 欧美一区二区福利在线| 欧美一区二区三区啪啪| 亚洲成av人在线观看| 一区二区三区四区乱视频| 亚洲综合区在线| 亚洲一本大道在线| 日本视频一区二区| 激情综合五月婷婷| 高清不卡一区二区在线| 不卡av免费在线观看| 91一区二区三区在线观看| 在线观看成人小视频| 欧美精选在线播放| 日韩欧美激情四射| 国产午夜精品福利| 亚洲三级理论片| 亚洲444eee在线观看| 免费的成人av| 国产乱对白刺激视频不卡 | 欧美疯狂性受xxxxx喷水图片| 欧美久久久一区| 久久亚洲一区二区三区明星换脸| 国产亚洲污的网站| 亚洲激情在线激情| 奇米影视一区二区三区小说| 久久99蜜桃精品| av激情综合网| 7777精品伊人久久久大香线蕉| 日韩精品最新网址| 亚洲欧洲成人自拍| 丝袜a∨在线一区二区三区不卡| 久久国产日韩欧美精品| 成人久久18免费网站麻豆 | 国内久久婷婷综合| 波多野结衣中文字幕一区 | 视频一区在线播放| 国内外成人在线| 91麻豆123| 精品裸体舞一区二区三区| 中文字幕一区二区三区在线观看| 亚洲综合免费观看高清在线观看| 免费黄网站欧美| 成人h精品动漫一区二区三区| 欧美日韩亚洲综合在线| 久久久久久久久久久久电影| 亚洲免费观看高清在线观看| 青椒成人免费视频| 91视频你懂的| 欧美精品一区二区不卡| 一区二区久久久| 国产一区二区三区精品欧美日韩一区二区三区| www.久久精品| 亚洲精品在线三区| 香蕉加勒比综合久久| 不卡影院免费观看| 精品国产一区二区三区久久久蜜月| 亚洲品质自拍视频| 国产一区二区按摩在线观看| 欧美日韩国产成人在线免费| 国产婷婷一区二区| 麻豆精品国产传媒mv男同| 色老头久久综合| 国产日韩欧美精品在线| 偷偷要91色婷婷| 91影院在线观看| 中文字幕免费观看一区| 美女高潮久久久| 欧美色倩网站大全免费| 中文字幕一区二区在线播放| 国产乱妇无码大片在线观看| 欧美一区二区三区精品| 亚洲国产cao| 在线观看av一区二区| 最新国产精品久久精品| 国产99一区视频免费| 精品国产一区二区三区久久影院| 日韩av电影免费观看高清完整版 | 三级久久三级久久久| 91麻豆国产精品久久| 中文字幕一区av| 国产91在线观看| 久久久99精品久久| 国产自产视频一区二区三区| 欧美一区二区播放| 日韩中文字幕不卡| 8x8x8国产精品| 日韩国产高清影视| 91精品啪在线观看国产60岁| 亚洲成人免费观看| 欧美猛男超大videosgay| 亚洲高清在线精品| 欧美日产国产精品| 婷婷开心久久网| 69堂精品视频| 看国产成人h片视频| 精品黑人一区二区三区久久| 美国欧美日韩国产在线播放| 日韩精品一区二区三区四区视频| 日本不卡不码高清免费观看| 欧美一区二区三区播放老司机| 日韩经典一区二区| 日韩一级二级三级| 极品少妇xxxx精品少妇偷拍| 久久夜色精品一区| 成人a区在线观看| 亚洲精品欧美综合四区| 欧美视频一区二区三区| 天堂蜜桃91精品| 精品粉嫩aⅴ一区二区三区四区| 国产一区二区免费看| 国产精品入口麻豆原神| kk眼镜猥琐国模调教系列一区二区| 最新国产成人在线观看| 欧美性受xxxx黑人xyx性爽| 天天综合天天做天天综合| 精品剧情在线观看| 成人动漫在线一区| 亚洲一级二级三级在线免费观看| 91精品国产日韩91久久久久久| 久久99热99| 国产精品久久久一区麻豆最新章节| 色拍拍在线精品视频8848| 婷婷成人激情在线网| 亚洲精品一区二区三区香蕉| 成人亚洲一区二区一| 亚洲一区二区三区四区五区中文| 91精品国产综合久久久久久久| 国产精品一区二区不卡| 亚洲女性喷水在线观看一区| 69精品人人人人| 国产91精品在线观看| 亚洲一区二区在线免费看| 精品理论电影在线| 色综合久久中文字幕| 蜜臀91精品一区二区三区| 国产精品久久久久久久久图文区| 欧美日韩精品系列| 国产乱码精品1区2区3区| 一区二区不卡在线播放| 日韩免费看的电影| 日本韩国一区二区三区视频| 美女mm1313爽爽久久久蜜臀| 日韩毛片视频在线看| 日韩欧美在线影院| 色婷婷激情久久| 国产风韵犹存在线视精品| 亚洲一区自拍偷拍| 国产欧美日产一区| 欧美一卡二卡在线观看| 91精品福利视频| 国产iv一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲欧美日韩电影| 国产性色一区二区|