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

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

?? decode.c

?? 44b0上實現mp3解碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***********************************************
copyright by Haia Tech
www.haia2004.com
************************************************/



#include <math.h>
//#include <stdlib.h>
#include "common.h"
#include "decode.h"
 
extern struct Granule grle[2][2];
extern Bit_stream_struc  bs;
extern frame_params fr_ps;

struct BandIndex sfBandIndex[3]=
{
	{{0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576},
		{0,4,8,12,16,22,30,40,52,66,84,106,136,192}},
	{{0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576},
		{0,4,8,12,16,22,28,38,50,64,80,100,126,192}},
	{{0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576},
		{0,4,8,12,16,22,30,42,58,78,104,138,180,192}}
};


void decode_info()
{
    layer *hdr = fr_ps.header;
    int x;

    hdr->version = getbit(1);
    hdr->lay = 4-getbit(2);
    hdr->error_protection = !getbit(1); /* error protect. TRUE/FALSE */
    hdr->bitrate_index = getbit(4);
    hdr->sampling_frequency = getbit(2);
    hdr->padding = getbit(1);
    hdr->extension = getbit(1);
    hdr->mode = getbit(2);
    hdr->mode_ext = getbit(2);
    hdr->copyright = getbit(1);
    hdr->original = getbit(1);
    hdr->emphasis = getbit(2);
}

void III_get_side_info(III_side_info_t *si)
{
	int ch, gr, i;
	int stereo = fr_ps.stereo;

	si->main_data_begin = getbit(9);  //SI 邊信息結構
	if (stereo == 1)
		si->private_bits = getbit(5);
	else
		si->private_bits = getbit(3);

	for (ch=0; ch<stereo; ch++)         //第二顆粒是否傳送信息
		for (i=0; i<4; i++)
			si->scfsi[ch][i] = getbit(1);

	for (gr=0; gr<2; gr++) {
		for (ch=0; ch<stereo; ch++) {
			grle[ch][gr].part2_3_length = getbit(12);
			grle[ch][gr].big_values = getbit(9);
			grle[ch][gr].global_gain = getbit(8);
			grle[ch][gr].scalefac_compress = getbit(4);
			grle[ch][gr].window_switching_flag = getbit(1);
			if (grle[ch][gr].window_switching_flag) {            //窗開關為1
				grle[ch][gr].block_type = getbit(2);
				grle[ch][gr].mixed_block_flag = getbit(1);
				for (i=0; i<2; i++)
					grle[ch][gr].table_select[i] = getbit(5);
				for (i=0; i<3; i++)
					grle[ch][gr].subblock_gain[i] = getbit(3);

				/* Set region_count parameters since they are implicit in this case. */

				if (grle[ch][gr].block_type == 0) {
//					printf("Side info bad: block_type == 0 in split block.\n");
//					exit(0);
				}
				else if (grle[ch][gr].block_type == 2
						&& grle[ch][gr].mixed_block_flag == 0)
					grle[ch][gr].region0_count = 8; /* MI 9; */     //region0和1的缺省配置
				else grle[ch][gr].region0_count = 7; /* MI 8; */
					grle[ch][gr].region1_count = 20 - grle[ch][gr].region0_count;
			}
			else {                                                       //窗開關為0
				for (i=0; i<3; i++)
					grle[ch][gr].table_select[i] = getbit(5);
				grle[ch][gr].region0_count = getbit(4);
				grle[ch][gr].region1_count = getbit(3);
				grle[ch][gr].block_type = 0;
			}
			grle[ch][gr].preflag = getbit(1);
			grle[ch][gr].scalefac_scale = getbit(1);
			grle[ch][gr].count1table_select = getbit(1);
         }
	}
}


struct {
	int l[5];
	int s[3];
} sfbtable = {
	{0, 6, 11, 16, 21},
	{0, 6, 12}
};
int slen[2][16]={
	{0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
	{0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}
};

void III_get_scale_factors(III_scalefac_t *scalefac, III_side_info_t *si, int gr, int ch)
{
	int sfb, i, window;
	struct Granule *gr_info = &(grle[ch][gr]);

	if (gr_info->window_switching_flag && (gr_info->block_type == 2)) {
		if (gr_info->mixed_block_flag) { /* MIXED */ /* NEW - ag 11/25 */
			for (sfb = 0; sfb < 8; sfb++)
				(*scalefac)[ch].l[sfb] = hgetbits(
					slen[0][gr_info->scalefac_compress]);       //用 slen[0]
			for (sfb = 3; sfb < 6; sfb++)
				for (window=0; window<3; window++)
					(*scalefac)[ch].s[window][sfb] = hgetbits(
						slen[0][gr_info->scalefac_compress]);   //用 slen[0]
			for (sfb = 6; sfb < 12; sfb++)
				for (window=0; window<3; window++)
					(*scalefac)[ch].s[window][sfb] = hgetbits(
						slen[1][gr_info->scalefac_compress]);   //6-11用 slen[1]

			for (sfb=12,window=0; window<3; window++)
				(*scalefac)[ch].s[window][sfb] = 0;
		}
		else {  /* SHORT*/
			for (i=0; i<2; i++)
				for (sfb = sfbtable.s[i]; sfb < sfbtable.s[i+1]; sfb++)
					for (window=0; window<3; window++)
						(*scalefac)[ch].s[window][sfb] = hgetbits(
							slen[i][gr_info->scalefac_compress]);
				for (sfb=12,window=0; window<3; window++)
					(*scalefac)[ch].s[window][sfb] = 0;
		}
	}
	else {   /* LONG types 0,1,3 */
		for (i=0; i<4; i++) {
			if ((si->scfsi[ch][i] == 0) || (gr == 0))
				for (sfb = sfbtable.l[i]; sfb < sfbtable.l[i+1]; sfb++)
					(*scalefac)[ch].l[sfb] = hgetbits(
						slen[(i<2)?0:1][gr_info->scalefac_compress]);
		}
		(*scalefac)[ch].l[22] = 0;
	}
}
 

int pretab[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};

void III_dequantize_sample(int is[SBLIMIT][SSLIMIT], double xr[SBLIMIT][SSLIMIT], III_scalefac_t *scalefac, struct Granule *gr_info, int ch)
{
	int ss,sb,cb=0,sfreq=fr_ps.header->sampling_frequency;
	int next_cb_boundary, cb_begin, cb_width, sign;
	double is43_table[1024],temp;
	static int init=1;

	if(init)
	{
		for(init=0;init<1024;init++)
		  is43_table[init]=1.33333333333*log(init);
		init=0;
	}

	/* choose correct scalefactor band per block type, initalize boundary */

	if (gr_info->window_switching_flag && (gr_info->block_type == 2) )
		if (gr_info->mixed_block_flag)
			next_cb_boundary=sfBandIndex[sfreq].l[1];  /* LONG blocks: 0,1,3 */
		else
		{
			next_cb_boundary=sfBandIndex[sfreq].s[1]*3; /* pure SHORT block */
			cb_width = sfBandIndex[sfreq].s[1];
			cb_begin = 0;
		}
	else
		next_cb_boundary=sfBandIndex[sfreq].l[1];  /* LONG blocks: 0,1,3 */

	/* apply formula per block type */
	for (sb=0 ; sb < SBLIMIT ; sb++) {        //0-31
		for (ss=0 ; ss < SSLIMIT ; ss++) {    //0-17

/*********              由sb和ss計算cb(比例因子帶)和cb_width(比例因子帶寬)   **************/
			if ( (sb*18)+ss == next_cb_boundary)
			{ /* Adjust critical band boundary */
				if (gr_info->window_switching_flag && (gr_info->block_type == 2))
				{
					if (gr_info->mixed_block_flag)
					{
						if (((sb*18)+ss) == sfBandIndex[sfreq].l[8])
						{
							next_cb_boundary=sfBandIndex[sfreq].s[4]*3;
							cb = 3;
							cb_width = sfBandIndex[sfreq].s[cb+1] -
										sfBandIndex[sfreq].s[cb];
							cb_begin = sfBandIndex[sfreq].s[cb]*3;
						}
						else if (((sb*18)+ss) < sfBandIndex[sfreq].l[8])
							next_cb_boundary = sfBandIndex[sfreq].l[(++cb)+1];
						else {
							next_cb_boundary = sfBandIndex[sfreq].s[(++cb)+1]*3;
							cb_width = sfBandIndex[sfreq].s[cb+1] -
										sfBandIndex[sfreq].s[cb];
							cb_begin = sfBandIndex[sfreq].s[cb]*3;
						}
					}
					else
					{
						next_cb_boundary = sfBandIndex[sfreq].s[(++cb)+1]*3;
						cb_width = sfBandIndex[sfreq].s[cb+1] -
									sfBandIndex[sfreq].s[cb];
						cb_begin = sfBandIndex[sfreq].s[cb]*3;
					}
				}
	            else /* long blocks */
		           next_cb_boundary = sfBandIndex[sfreq].l[(++cb)+1];
			}
/***************************************************************************************/
		  if(is[sb][ss]!=0)
		  {
			/* Compute overall (global) scaling. */
			xr[sb][ss] = (0.25 * (gr_info->global_gain - 210.0));
				

			/* Do long/short dependent scaling operations. */

			if (gr_info->window_switching_flag && (
				((gr_info->block_type == 2) && (gr_info->mixed_block_flag == 0)) ||
				((gr_info->block_type == 2) && gr_info->mixed_block_flag && (sb >= 2)) ))
			{

				xr[sb][ss] += (0.25 * -8.0 *gr_info->subblock_gain[(((sb*18)+ss) - cb_begin)/cb_width]);
				xr[sb][ss] += (0.25 * -2.0 * (1.0+gr_info->scalefac_scale)
						* (*scalefac)[ch].s[(((sb*18)+ss) - cb_begin)/cb_width][cb]);
			}
			else    /* LONG block types 0,1,3 & 1st 2 subbands of switched blocks */
			{
				xr[sb][ss] +=  (-0.5 * (1.0+gr_info->scalefac_scale)
								* ((*scalefac)[ch].l[cb]
								+ gr_info->preflag * pretab[cb]));
			}

			/* Scale quantized value. */
            //求出符號
			sign=0;
			if(is[sb][ss]<0)
			{
				sign=1;
			    is[sb][ss]=-is[sb][ss];
			}

			if(is[sb][ss]>1023)
				temp=is43_table[(unsigned)is[sb][ss]>>3]+2.7725887;// 4/3*ln8
			else
				temp=is43_table[is[sb][ss]];

			xr[sb][ss] *=0.69314318;        //log(2);
			xr[sb][ss] +=temp;
			xr[sb][ss] =exp(xr[sb][ss]);
			if (sign) xr[sb][ss] = -xr[sb][ss];
		  }
		  else
			xr[sb][ss] =0;

		}
	}
}
 

void III_reorder(SS xr ,  struct Granule *gr_info)
{
   int sfreq=fr_ps.header->sampling_frequency;
   int sfb, sfb_start, sfb_lines;
   int sb, ss, window, freq, src_line, des_line;
   SS ro ;

   if (gr_info->window_switching_flag && (gr_info->block_type == 2)) 
   {
      if (gr_info->mixed_block_flag) 
	  {
         /* NO REORDER FOR LOW 2 SUBBANDS */
         for (sb=0 ; sb < 2 ; sb++)
            for (ss=0 ; ss < SSLIMIT ; ss++) 
               ro[sb][ss] = xr[sb][ss];
            
         /* REORDERING FOR REST SWITCHED SHORT */
         for(sfb=3,sfb_start=sfBandIndex[sfreq].s[3],
            sfb_lines=sfBandIndex[sfreq].s[4] - sfb_start;
            sfb < 13; sfb++,sfb_start=sfBandIndex[sfreq].s[sfb],
            (sfb_lines=sfBandIndex[sfreq].s[sfb+1] - sfb_start))
               for(window=0; window<3; window++)
                  for(freq=0;freq<sfb_lines;freq++) {
                     src_line = sfb_start*3 + window*sfb_lines + freq;
                     des_line = (sfb_start*3) + window + (freq*3);
                     ro[des_line/SSLIMIT][des_line%SSLIMIT] =
                                    xr[src_line/SSLIMIT][src_line%SSLIMIT];
               }
      }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日产一区| 国产99精品国产| 在线免费视频一区二区| 国产精品视频麻豆| 国产精品白丝jk白祙喷水网站| 日韩三级视频在线看| 日韩不卡手机在线v区| 国产精品一区二区视频| 精品国产精品网麻豆系列| 青娱乐精品视频| 欧美一级久久久久久久大片| 亚洲国产精品麻豆| 色悠久久久久综合欧美99| 亚洲婷婷国产精品电影人久久| 成人av在线一区二区三区| 久久久www成人免费毛片麻豆| 久久精品国产成人一区二区三区| 91精品国产入口| 麻豆精品一二三| 日韩欧美国产三级电影视频| 蜜桃免费网站一区二区三区 | 亚洲三级在线观看| 91国产免费观看| 亚洲第一搞黄网站| 欧美一区国产二区| 国产精品中文欧美| 中文字幕在线一区免费| 色哟哟精品一区| 午夜av一区二区三区| 欧美一区二区私人影院日本| 精品一区二区三区视频| 欧美国产精品一区| 国v精品久久久网| 一区二区三区免费在线观看| 欧美三级视频在线播放| 亚洲国产综合在线| 欧美哺乳videos| 99久久夜色精品国产网站| 一区二区三区精品视频| 欧美日韩精品一区二区三区蜜桃| 日本系列欧美系列| 国产精品久久久久一区| 在线免费观看日本一区| 七七婷婷婷婷精品国产| 国产欧美中文在线| 欧美在线观看视频一区二区三区| 青青草国产成人av片免费| 国产精品第四页| 3d动漫精品啪啪| 不卡av免费在线观看| 亚洲另类在线视频| 欧美成人三级电影在线| 成人黄页在线观看| 美国十次了思思久久精品导航| 久久精品欧美一区二区三区不卡 | 国产精品77777竹菊影视小说| 亚洲一区二区欧美| 亚洲手机成人高清视频| 国产欧美一区二区三区鸳鸯浴 | 性久久久久久久久| 自拍偷自拍亚洲精品播放| 久久一区二区三区国产精品| 欧美亚洲图片小说| 91美女精品福利| 成人手机在线视频| 国产裸体歌舞团一区二区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲成av人片观看| 亚洲第一成人在线| 亚瑟在线精品视频| 亚洲成人综合网站| 亚洲福利一二三区| 亚洲一区视频在线观看视频| 中文字幕视频一区| 1区2区3区精品视频| 国产精品高清亚洲| 国产精品久久久久aaaa樱花| 欧美国产欧美综合| 欧美国产1区2区| 欧美激情艳妇裸体舞| 国产欧美一区二区三区网站| 久久久精品综合| 国产精品情趣视频| 综合色中文字幕| 一区二区三区视频在线观看| 一区二区成人在线视频| 亚洲一级在线观看| 人人爽香蕉精品| 激情六月婷婷久久| 成人做爰69片免费看网站| 成人在线视频一区| 91福利在线播放| 欧美精品久久天天躁| 欧美成人a∨高清免费观看| www激情久久| 国产精品青草综合久久久久99| 国产精品国产三级国产aⅴ中文| 亚洲天堂免费看| 亚洲bdsm女犯bdsm网站| 乱一区二区av| 成人夜色视频网站在线观看| 日本乱人伦aⅴ精品| 欧美一区二区三区四区久久| 久久精品视频在线看| 亚洲你懂的在线视频| 日韩国产高清在线| 丰满亚洲少妇av| 欧美亚洲愉拍一区二区| 日韩视频一区二区在线观看| 久久综合九色综合欧美98| 1024成人网| 蜜桃视频免费观看一区| 粉嫩av一区二区三区在线播放| 在线日韩一区二区| 精品第一国产综合精品aⅴ| 中文字幕一区二区三区四区不卡| 亚洲成av人在线观看| 国产成人亚洲综合a∨婷婷 | 欧美午夜电影一区| ww亚洲ww在线观看国产| 一区二区三区国产豹纹内裤在线 | 国产成人自拍网| 欧美视频完全免费看| 久久色.com| 午夜私人影院久久久久| 福利一区在线观看| 欧美一级在线观看| 亚洲激情六月丁香| 国产一区二区h| 欧美日韩成人一区| 国产精品第13页| 精品一二三四在线| 欧美三级视频在线| 中文字幕中文字幕在线一区| 美女任你摸久久 | 成人激情免费电影网址| 日韩一区二区三| 一区二区在线看| 国产露脸91国语对白| 欧美一区二区福利视频| 亚洲一区二区三区三| 99久久精品费精品国产一区二区| 欧美成人a∨高清免费观看| 亚洲在线观看免费| 91亚洲精品一区二区乱码| 亚洲精品在线三区| 琪琪一区二区三区| 欧美年轻男男videosbes| 中文字幕在线播放不卡一区| 激情综合一区二区三区| 欧美精品黑人性xxxx| 一二三四社区欧美黄| 成人动漫一区二区三区| 久久午夜免费电影| 九九九精品视频| 日韩一区二区不卡| 蜜臀va亚洲va欧美va天堂| 欧美精品色一区二区三区| 亚洲图片有声小说| 欧美色电影在线| 亚洲一区免费视频| 在线观看网站黄不卡| 一区二区三区精品| 欧美亚洲一区二区三区四区| 一个色在线综合| 91久久精品一区二区三区| 亚洲蜜桃精久久久久久久| 色综合欧美在线| 亚洲一区二区视频| 欧美在线短视频| 午夜精品久久久久久久| 欧美色图在线观看| 五月激情综合婷婷| 777精品伊人久久久久大香线蕉| 午夜国产不卡在线观看视频| 欧美日本国产一区| 免费精品99久久国产综合精品| 制服.丝袜.亚洲.中文.综合| 婷婷中文字幕综合| 日韩午夜在线观看| 国产在线播放一区三区四| 国产欧美综合在线| 91免费版在线| 亚洲18色成人| 欧美精品一区二区高清在线观看| 激情五月激情综合网| 欧美激情一区二区三区| 色哟哟在线观看一区二区三区| 亚洲图片欧美视频| 欧美成va人片在线观看| 国产91丝袜在线播放| 亚洲激情图片一区| 日韩欧美国产1| 成人免费视频免费观看| 亚洲黄色尤物视频| 日韩女优av电影在线观看| 丁香激情综合五月| 午夜精品久久久久久久久| 久久九九久久九九| 欧美性一级生活|