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

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

?? huff.c

?? VC寫的MP3解碼源碼和Layer3編碼源碼
?? 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;

}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区在线播放| 日韩在线播放一区二区| 日本精品一区二区三区高清| 蜜臀久久久久久久| 国产精品女上位| 欧美美女激情18p| 成人激情综合网站| 青青青伊人色综合久久| 国产精品久久久久一区| 欧美一区二区视频在线观看2020| 成人免费视频视频在线观看免费| 有码一区二区三区| 日本一区二区三区四区在线视频| 欧美久久久久久久久中文字幕| 国产精品18久久久久久vr| 午夜视频在线观看一区二区三区| 国产精品毛片无遮挡高清| 日韩欧美一级二级| 欧美综合天天夜夜久久| 成人一二三区视频| 久久精品国产免费| 亚洲国产日韩一级| 亚洲天堂精品视频| 国产清纯白嫩初高生在线观看91| 欧美一区二区三区啪啪| 91精品福利视频| av电影在线观看一区| 国产一区二区福利| 久久精品国产一区二区三| 亚洲一区二区三区四区不卡| 国产精品女人毛片| 国产色产综合色产在线视频 | 色呦呦日韩精品| 国产成人在线视频网址| 狠狠色丁香婷婷综合久久片| 日韩精品五月天| 亚洲成人精品在线观看| 亚洲最快最全在线视频| 亚洲欧美一区二区三区孕妇| 国产精品美女久久久久久久| 久久久91精品国产一区二区三区| 欧美成人三级在线| 日韩一级二级三级精品视频| 欧美一级日韩免费不卡| 7777精品伊人久久久大香线蕉经典版下载 | 欧美日韩一区 二区 三区 久久精品| 成人av网在线| 不卡一二三区首页| 不卡的电影网站| 99免费精品视频| 色综合咪咪久久| 欧洲国产伦久久久久久久| 色狠狠一区二区三区香蕉| 色综合婷婷久久| 97se亚洲国产综合自在线| 色噜噜狠狠一区二区三区果冻| 一本色道a无线码一区v| 欧洲国内综合视频| 91精品国产综合久久精品图片| 91麻豆精品国产91久久久资源速度| 欧美嫩在线观看| 日韩欧美一级特黄在线播放| 久久精品亚洲麻豆av一区二区| 久久一二三国产| 中文字幕精品一区二区三区精品| 中文字幕在线观看不卡| 亚洲女同女同女同女同女同69| 一区二区三区欧美亚洲| 丝袜诱惑亚洲看片| 毛片av一区二区| 国产成人免费9x9x人网站视频| 99久久免费视频.com| 91国产免费看| 日韩欧美中文一区二区| 久久久欧美精品sm网站| 综合在线观看色| 午夜精品福利一区二区三区av| 蜜桃视频在线观看一区二区| 国产精品一区二区免费不卡| 91在线观看免费视频| 制服丝袜亚洲色图| 久久精品欧美日韩精品| 夜夜操天天操亚洲| 久久国产福利国产秒拍| 成人福利电影精品一区二区在线观看 | 亚洲视频1区2区| 丝袜美腿亚洲综合| 国产伦精品一区二区三区免费迷 | 成人avav影音| 欧美日韩和欧美的一区二区| 久久久蜜桃精品| 亚洲影视在线播放| 国产精品亚洲专一区二区三区| 色噜噜久久综合| 久久九九99视频| 伊人婷婷欧美激情| 国产一区二区三区免费在线观看| 色综合色狠狠天天综合色| 日韩三级在线观看| 亚洲丝袜制服诱惑| 国产在线一区二区| 欧美少妇性性性| 欧美激情一区二区| 日韩不卡一区二区| 一本一道久久a久久精品综合蜜臀| 91精品国产麻豆| 亚洲精品久久久久久国产精华液| 狠狠网亚洲精品| 欧美日韩五月天| 《视频一区视频二区| 精品在线你懂的| 欧美亚洲另类激情小说| 国产精品毛片久久久久久久| 久久精品国产精品亚洲红杏| 欧美性猛交xxxxxxxx| 国产精品久久久久久久久动漫| 精品一区二区三区视频在线观看| 欧美日韩精品是欧美日韩精品| 中文字幕亚洲电影| 国产高清亚洲一区| 日韩亚洲欧美在线| 亚洲成人你懂的| 91久久线看在观草草青青| 国产女主播视频一区二区| 久久精品国产精品亚洲综合| 91精品欧美综合在线观看最新| 亚洲在线中文字幕| 一本到不卡免费一区二区| 国产精品久久久久久久第一福利| 国产精品伊人色| 日韩精品一区二区三区视频播放 | 日韩免费一区二区| 亚洲视频在线一区| 91精品一区二区三区在线观看| 国产成人av福利| 欧美精品久久久久久久多人混战| 亚洲精品视频在线观看免费| 成人h精品动漫一区二区三区| 欧美极品美女视频| 国产成人99久久亚洲综合精品| 久久嫩草精品久久久久| 韩国精品免费视频| 国产婷婷色一区二区三区| 国产成人在线看| 国产欧美日韩在线视频| 高清av一区二区| 中文字幕一区av| 色哟哟精品一区| 成人黄色国产精品网站大全在线免费观看 | 欧美日韩在线三区| 午夜精品福利一区二区三区av | av高清不卡在线| 亚洲美女偷拍久久| 在线亚洲一区观看| 亚洲成av人片在线观看无码| 欧美日本一区二区三区| 日韩国产欧美在线观看| 欧美成人vr18sexvr| 国产精品自拍三区| 中文字幕中文字幕一区二区| 色婷婷av一区二区三区软件| 亚洲一区精品在线| 欧美一区二区三区色| 国产一区在线精品| 国产精品美女视频| 欧美专区亚洲专区| 日韩电影免费一区| 久久久久久免费网| 99re成人精品视频| 午夜精品免费在线| 久久综合九色欧美综合狠狠 | 国产99一区视频免费| 中文字幕一区二区三区在线不卡 | 成人动漫av在线| 亚洲自拍偷拍综合| 欧美xxxx老人做受| 99在线精品观看| 精品视频在线免费| 久久精品噜噜噜成人av农村| 国产精品网站在线观看| 欧美吻胸吃奶大尺度电影| 美女国产一区二区三区| 国产精品久久久久永久免费观看 | 天天操天天综合网| 久久久99久久精品欧美| 色综合视频在线观看| 男人操女人的视频在线观看欧美| 欧美激情在线观看视频免费| 欧美日韩国产精品自在自线| 国产精品69毛片高清亚洲| 亚洲一区二区三区视频在线播放| 精品国产乱码久久久久久老虎| 一本一本大道香蕉久在线精品| 久久精品国产在热久久| 亚洲精品网站在线观看| 久久一夜天堂av一区二区三区| 欧美午夜精品电影| 丰满少妇久久久久久久| 日本在线不卡视频| 一区二区三区日韩欧美|