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

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

?? huff.c

?? The first task at hand is to set up the endpoints appropriately for this example. The following code
?? 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一区二区三区免费野_久草精品视频
欧美白人最猛性xxxxx69交| 色狠狠一区二区| 日韩经典中文字幕一区| 亚洲成人av在线电影| 亚洲精品高清在线| 亚洲精品国产无天堂网2021| 国产精品激情偷乱一区二区∴| 国产欧美视频在线观看| 久久精品一区八戒影视| 国产亚洲自拍一区| 国产精品国产精品国产专区不片| 亚洲欧洲精品天堂一级| 国产精品成人在线观看| 亚洲第一搞黄网站| 日韩中文欧美在线| 国产麻豆成人传媒免费观看| 国产成人8x视频一区二区| 狠狠色狠狠色综合| eeuss国产一区二区三区| 91浏览器打开| 日韩一级免费一区| 久久蜜桃一区二区| 一区免费观看视频| 日本不卡一区二区三区| 久久成人免费电影| 99久久99久久精品免费观看| 欧洲在线/亚洲| 欧美大胆一级视频| 国产精品夫妻自拍| 日本视频中文字幕一区二区三区| 国产资源精品在线观看| 99久久综合色| 欧美电视剧免费全集观看| 欧美激情一区在线观看| 午夜电影网一区| 国产精品123| 欧美日韩激情一区二区| 国产欧美日韩精品一区| 午夜精彩视频在线观看不卡| 国产盗摄视频一区二区三区| 欧美亚洲愉拍一区二区| 国产情人综合久久777777| 亚洲狠狠丁香婷婷综合久久久| 蜜臀久久99精品久久久久久9| 成人看片黄a免费看在线| 666欧美在线视频| 最新国产精品久久精品| 久久99在线观看| 欧美日韩美女一区二区| 中文字幕一区二区三区在线播放| 青青草国产精品97视觉盛宴| 91麻豆精品在线观看| 精品久久久久久久久久久久包黑料| 亚洲男人电影天堂| 国产精品一区二区免费不卡| 91精品婷婷国产综合久久| 最新国产の精品合集bt伙计| 国产一区二区久久| 日韩午夜激情免费电影| 天天色天天爱天天射综合| 99久久伊人久久99| 国产精品天天摸av网| 国产一区二三区好的| 欧美视频第二页| 亚洲少妇中出一区| 不卡一区二区中文字幕| 日本一区二区不卡视频| 国产乱码精品一区二区三| 精品国产伦一区二区三区免费 | 精品国产91久久久久久久妲己 | 亚洲精品一线二线三线| 午夜精品一区二区三区电影天堂| 91在线观看免费视频| 国产精品欧美久久久久一区二区| 国产在线国偷精品产拍免费yy| 日韩三级中文字幕| 开心九九激情九九欧美日韩精美视频电影 | 亚洲一区二区三区国产| 在线观看国产91| 亚洲一区二区三区三| 欧美最新大片在线看| 亚洲一区二区三区四区中文字幕| 欧美性高清videossexo| 午夜精品一区二区三区电影天堂 | 欧美精品久久一区二区三区| 视频一区视频二区中文字幕| 欧美吻胸吃奶大尺度电影| 婷婷丁香久久五月婷婷| 欧美一区二区精品| 精品无码三级在线观看视频| 久久精品在线免费观看| 97精品久久久午夜一区二区三区| 国产精品三级视频| 日本久久电影网| 石原莉奈在线亚洲二区| 精品久久久久久最新网址| 国产一区91精品张津瑜| 成人免费小视频| 欧美日韩视频在线第一区 | 在线这里只有精品| 石原莉奈一区二区三区在线观看| 精品黑人一区二区三区久久| 国产成人av电影免费在线观看| 国产精品白丝在线| 678五月天丁香亚洲综合网| 国产在线视频不卡二| 中文字幕五月欧美| 欧美肥妇bbw| 国产99久久久精品| 亚洲成人av在线电影| 国产人妖乱国产精品人妖| 欧美视频一区二区在线观看| 国模娜娜一区二区三区| 亚洲一区二区三区四区在线观看| 欧美va亚洲va| 欧美日韩中文字幕一区二区| 国产一区福利在线| 亚洲一区二区三区小说| 亚洲国产精品激情在线观看| 欧美日韩一区二区不卡| 国产精品12区| 日韩电影网1区2区| 伊人夜夜躁av伊人久久| 欧美一卡二卡三卡| 99久久伊人精品| 国产精品伊人色| 亚洲综合激情网| 久久久精品黄色| 日韩欧美中文字幕公布| 91在线一区二区| 国产成人综合精品三级| 久久精品国产亚洲aⅴ| 亚洲激情五月婷婷| 国产精品美女久久久久久久久| 日韩一区二区麻豆国产| 欧美三级在线看| 91视视频在线观看入口直接观看www | 99精品黄色片免费大全| 国精品**一区二区三区在线蜜桃| 午夜精品在线看| 亚洲一区二区精品久久av| 国产精品成人网| 国产精品久久久久毛片软件| 337p粉嫩大胆噜噜噜噜噜91av| 欧美日韩精品免费| 欧洲生活片亚洲生活在线观看| 成人av在线观| hitomi一区二区三区精品| 国产99久久久国产精品| 国产精品2024| 国产精品综合久久| 国产一区视频网站| 久久99热这里只有精品| 久久成人综合网| 国模娜娜一区二区三区| 国产精品亚洲一区二区三区在线 | 欧美无砖砖区免费| 国产成人午夜电影网| 黑人巨大精品欧美黑白配亚洲| 成人sese在线| 国产一区不卡在线| 亚洲视频一区在线| 国产精品白丝在线| 久久国产精品露脸对白| 日本国产一区二区| 国产色综合久久| 日韩成人伦理电影在线观看| 99久久精品免费看国产免费软件| 日韩三级免费观看| 亚洲国产精品久久不卡毛片| 国产69精品久久久久毛片| 欧美一区二区三区日韩| 亚洲猫色日本管| 成人午夜碰碰视频| 精品欧美一区二区在线观看| 午夜视频在线观看一区| 91猫先生在线| 中国色在线观看另类| 激情欧美一区二区三区在线观看| 欧美日韩三级在线| 亚洲美女免费视频| 99久久夜色精品国产网站| 久久婷婷色综合| 蜜臀av一区二区在线观看| 欧美日韩综合不卡| 亚洲一区二区三区不卡国产欧美| 99在线热播精品免费| 国产清纯在线一区二区www| 久久精品国产99国产| 日韩一区二区三区电影在线观看 | 99精品国产视频| 国产目拍亚洲精品99久久精品| 成人福利视频在线| 久久一区二区三区四区| 美女网站在线免费欧美精品| 欧美一级淫片007| 蜜桃一区二区三区在线| 欧美电影免费观看高清完整版 | 欧美日韩中文字幕一区| 洋洋成人永久网站入口|