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

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

?? huff.c

?? 用TMS320X281x進行mp3解壓縮的算法原程序
?? C
字號:
/* MPEG Audio Layer-3 decoder             */
/* Bjorn Wesen 1997                       */
/*                                        */
/* Huffman decoder                        */

#undef ROCKFORD

#include "mp3dec.h"
#include "huffman.h"

/* lots of tables */

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

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

static char t_slen1[16] = {0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4};
static char t_slen2[16] = {0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3};
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 dataword;
int dataword_len;
int datapos;

void
HuffmanTable_init()
{
}

void
Granule_decode_huffman(Granule *gr, Bitstream *bs, int part2_start,
		       Granule_intfreqs dec, Frame *f)
{
    int reg1, reg2, i, v, w,
	part2_end = part2_start + gr->part2_3_length;
    int h, used;

    /* The spectrum is partitioned in 3 regions, and every regions energies
       are coded using its own huffman table, in table_select[region].
       
       region0_count specifies the number of bands - 1 in region 0.
       For short blocks, each band is counted 3 times due to the 3 windows. 
       
       region1_count specifies 1 less than the number of bands in region 1.
       
       If its a BLOCKTYPE_3WIN and mixed_block_flag==0, the granule 
       contains 12*3=36 bands total. If mixed_block_flag==1, its 8+9*3=35
       and for other block types its 21 bands in total.
       
       */
    
    /* first find out the region boundaries - we have 3 regions, the first
       one ranging from 1 to reg1, then one from reg1 to reg2, and the
       last one from reg2 to 576 
     */
    
    if(gr->window_switching_flag &&
       gr->block_type == BLOCKTYPE_3WIN) {
	
	/* short block regions */
	
	reg1 = 36;  
	reg2 = 576;
	
    } else {

	/* long block regions */

	reg1 = Frame_bands[f->sampling_frequency].l[gr->region0_count + 1];
	reg2 = Frame_bands[f->sampling_frequency].l[gr->region0_count + 
						    gr->region1_count + 2];
    }

    /* There is a subdivision of the frequency band into two parts, the
       first is called the 'big values' part and extends from 1 to 
       big_values * 2. The second one extends to big_values*2+count1*4.
       We don't know the value of count1 explicetely.
       */

    /* fill up dataword, end at a bytealign in the buffer */
    {
	int bitpos = bs->pos & 7;
	datapos = (bs->pos >> 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 = bs->buffer[datapos] << 24 |
	    bs->buffer[datapos + 1] << 16 | 
	    bs->buffer[datapos + 2] << 8 |
	    bs->buffer[datapos + 3];
	datapos = (datapos + 4) % BITSTREAM_BUFSIZE;
	dataword <<= bitpos;  /* strip the misaligned leading bits */
	dataword_len = 32 - bitpos;  /* number of valid bits in dataword */
	/* now dataword is loaded with at least 24 bits of data */
    }

    part2_end -= bs->pos;

    /* 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 int *h_tab;
	unsigned int lead;
	int l, len, x, y;

	if(i == reg1)
	    h = gr->table_select[1];
	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)) {
	    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 |= bs->buffer[datapos++] << (24 - dataword_len);
	    dataword_len += 8;
	}
	datapos = 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 |= bs->buffer[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 |= bs->buffer[datapos++] << (24 - dataword_len);
		dataword_len += 8;
	    }
	    datapos = datapos % BITSTREAM_BUFSIZE;
	}

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

	*dec++ = x;
	*dec++ = y;

	/* there are enough bits in dataword for the next run */
	
    }
    /* 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). 
    */

    h = gr->count1table_select + 32;  /* choose count1 table */
    while(BITS_USED < part2_end && i < 576) {
	(void)HuffmanTable_decode(h, bs, dec + 2, dec + 3, dec, dec + 1);
	dec += 4;
	i += 4;
    }

    used = BITS_USED;

    bs->pos += used;

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

    if(used > part2_end) {
	i -= 4;
	Bitstream_rewindbits(bs, used - part2_end);
    } else if(used < part2_end)
	Bitstream_flushbits(bs, part2_end - used);
    
    /* the rest of the frequency lines are zero */

    for(; i < 576; i++)
	*dec++ = 0;

}



int
HuffmanTable_decode(int tbl, 
		    Bitstream *bs,
		    int *x, int *y, int *v, int *w)
{
    unsigned int *h_tab;
    unsigned int lead;
    int len;
  
    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 |= bs->buffer[datapos++] << (24 - dataword_len);
	dataword_len += 8;
    }
    datapos = datapos % BITSTREAM_BUFSIZE;

    /* dataword now contains at least 24 bits */

    *x = (*h_tab >> 4) & 0xf;
    *y = *h_tab & 0xf;
  	
    *v = (*x >> 3) & 1;
    *w = (*x >> 2) & 1;
    *y = *x & 1;
    *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 datapos;

}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利一区二区三区| 亚洲视频免费观看| 欧美三级日韩在线| 91社区在线播放| 色嗨嗨av一区二区三区| 91麻豆自制传媒国产之光| 91玉足脚交白嫩脚丫在线播放| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 中文字幕一区二区三区蜜月| 日本一区二区不卡视频| 中文字幕制服丝袜成人av| 亚洲欧美一区二区在线观看| 亚洲视频一二三| 亚洲国产人成综合网站| 蜜桃av一区二区三区| 国产精华液一区二区三区| eeuss鲁一区二区三区| 欧美日韩卡一卡二| 精品成人私密视频| 综合色中文字幕| 亚洲成人午夜电影| 久久99九九99精品| 97se亚洲国产综合自在线不卡 | 欧美情侣在线播放| 欧美一区二区性放荡片| 国产亚洲一区二区三区| 日韩码欧中文字| 日韩高清在线电影| 成人午夜激情影院| 欧美日韩一区二区在线观看 | 国产一区二区三区观看| 99视频在线精品| 欧美精品99久久久**| 国产亚洲欧美日韩在线一区| 亚洲精品乱码久久久久久日本蜜臀| 婷婷综合五月天| 国产精品亚洲一区二区三区在线 | 亚洲三级理论片| 免费看欧美女人艹b| 菠萝蜜视频在线观看一区| 538prom精品视频线放| 国产精品情趣视频| 免费的国产精品| 色狠狠桃花综合| 中文字幕欧美激情| 蜜乳av一区二区| 欧美在线视频全部完| 亚洲国产精品成人久久综合一区| 亚洲bt欧美bt精品| 色婷婷av一区二区| 国产午夜精品一区二区三区视频| 亚洲国产一区二区在线播放| 丁香六月久久综合狠狠色| 91精品国产综合久久福利软件 | 中文字幕一区三区| 久久99国产精品免费网站| 欧美影视一区二区三区| 国产精品国产三级国产三级人妇 | www日韩大片| 午夜精品国产更新| 一本大道av伊人久久综合| 国产丝袜在线精品| 韩国视频一区二区| 日韩视频免费观看高清完整版在线观看 | 久久精品在线观看| 久久国产精品99久久久久久老狼| 欧美日本韩国一区| 亚洲福利国产精品| 欧美日韩免费一区二区三区视频| 一个色在线综合| 在线免费观看成人短视频| 国产精品国产三级国产普通话三级 | 免费成人av在线播放| 7777精品伊人久久久大香线蕉完整版| 一区二区三区丝袜| 欧美性猛交xxxxxxxx| 一区二区三区精品| 欧美精品视频www在线观看 | 日本一区二区三区四区在线视频| 久久精品国产成人一区二区三区 | 欧美色图第一页| 亚洲一区影音先锋| 欧美日韩视频在线第一区| 亚洲国产va精品久久久不卡综合| 欧美蜜桃一区二区三区 | 日韩欧美在线网站| 国产一区视频网站| 国产精品国产三级国产普通话三级 | aaa亚洲精品一二三区| 亚洲免费伊人电影| 欧美日韩美少妇| 久久99国产精品久久99果冻传媒| 26uuu精品一区二区三区四区在线| 国产自产高清不卡| 亚洲日本护士毛茸茸| 91精品午夜视频| 国产成人综合在线观看| 一区二区三区四区在线播放| 欧美久久高跟鞋激| 久久99精品国产.久久久久| 中文字幕第一区| 欧美午夜精品久久久| 精品一区精品二区高清| 日韩一区日韩二区| 日韩欧美资源站| 99久久精品久久久久久清纯| 丝袜亚洲另类欧美| 欧美国产1区2区| 欧美日韩在线三区| 国产成人午夜高潮毛片| 亚洲高清不卡在线观看| 国产视频亚洲色图| 3d成人动漫网站| 91原创在线视频| 国产精品影视天天线| 天堂va蜜桃一区二区三区| 久久精品夜夜夜夜久久| 欧美人狂配大交3d怪物一区| 国产精品影音先锋| 蜜桃久久av一区| 亚洲成在人线在线播放| 国产精品久久久一本精品| 日韩欧美国产一区二区三区| 91老司机福利 在线| 国产suv精品一区二区三区| 日韩国产精品久久| 亚洲综合视频网| 中文字幕综合网| 久久精品亚洲精品国产欧美 | 亚洲精品免费播放| 欧美激情综合网| 欧美精品一区二区久久久| 欧美性videosxxxxx| 91一区二区三区在线观看| 国产乱子轮精品视频| 奇米精品一区二区三区四区 | 久久综合中文字幕| 69久久夜色精品国产69蝌蚪网| www.综合网.com| 国产东北露脸精品视频| 国产一区二区在线观看视频| 日韩电影在线免费观看| 亚洲国产日韩一区二区| 亚洲婷婷国产精品电影人久久| 国产欧美一区二区精品性| 精品少妇一区二区三区视频免付费 | 99国产精品久| a亚洲天堂av| 91视频在线看| 色天使色偷偷av一区二区| 91久久香蕉国产日韩欧美9色| 成人网在线播放| youjizz久久| 色婷婷综合久久久久中文一区二区| 成人免费av在线| 91丝袜呻吟高潮美腿白嫩在线观看| 成人免费精品视频| 一本久道中文字幕精品亚洲嫩| 97精品久久久午夜一区二区三区 | 大尺度一区二区| 成人免费毛片嘿嘿连载视频| 成人蜜臀av电影| 91浏览器入口在线观看| 欧美在线不卡视频| 538在线一区二区精品国产| 日韩一区二区免费高清| 久久午夜老司机| 中文字幕欧美一| 一区二区三区成人在线视频| 偷偷要91色婷婷| 国产一区二区三区免费观看| 国产69精品久久99不卡| 色婷婷av一区二区三区软件| 欧美疯狂做受xxxx富婆| 久久久久久97三级| 一区二区三区在线观看网站| 午夜欧美视频在线观看| 激情五月婷婷综合| 色综合久久综合中文综合网| 欧美一区二区性放荡片| 国产精品美女久久久久久2018| 亚洲午夜电影网| 国产乱子伦一区二区三区国色天香 | 国产农村妇女精品| 亚洲成人av一区| 成人免费高清在线观看| 欧美人牲a欧美精品| 日本一区二区三区视频视频| 亚洲一本大道在线| 国产成人一区二区精品非洲| 在线视频欧美精品| 国产调教视频一区| 奇米精品一区二区三区四区| 99久久精品免费| 久久久亚洲综合| 舔着乳尖日韩一区| 99精品视频中文字幕| 欧美不卡一区二区三区四区| 亚洲精品伦理在线| 福利电影一区二区|