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

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

?? fastimdct.c

?? 用DSP實現(xiàn)MP3解壓縮的源碼文件
?? C
字號:
#include "mp3dec.h"

/* An Inverse Modified Discrete Cosinus Transform is applied to 18 values
   at a time. The 18 frequency values generate 36 time domain values, 
   where half of these are overlapped with half of the previously generated
   values to produce 18 output values. These can later be fed into the
   subband synthesis.

   The multiply-add loop here is very time critical. It uses a total of
   684*32=21888 MAC operations per imdct, 4 times per frame. With 38
   frames per second, thats 3.33 million MAC's.

   Using some small trigonometric tricks, we can do this in 360*32*4*38=
   1.75 million MAC's per second instead.

*/

extern mpfloat Granule_imdct_previous[2][576];  /* used for overlapping */
extern mpfloat Granule_9x9_idct[72];
extern mpfloat Granule_imdct_win[4][36];

mpfloat Granule_twiddles_short[23] = {
    0.866025403f, 0.5f,
    1.931851653f, 0.707106781f, 0.517638090f,

    0.504314480f, 0.541196100f, 0.630236207f,
    0.821339815f, 1.306562965f, 3.830648788f,
    0.793353340f, 0.608761429f, 0.923879532f,
    0.382683432f, 0.991444861f, 0.130526192f, 
    0.382683432f, 0.608761429f, 0.793353340f,
    0.923879532f, 0.991444861f, 0.130526192f
};

mpfloat Granule_twiddles_normal[] = {
    5.736856623f, 1.931851653f, 1.183100792f,
    0.871723397f, 0.707106781f, 0.610387294f, 
    0.551688959f, 0.517638090f, 0.501909918f,

    -0.500476342f, -0.504314480f, -0.512139757f,
    -0.524264562f, -0.541196100f, -0.563690973f, 
    -0.592844523f, -0.630236207f, -0.678170852f, 
    -0.740093616f, -0.821339815f, -0.930579498f,
    -1.082840285f, -1.306562965f, -1.662754762f, 
    -2.310113158f, -3.830648788f, -11.46279281f
};

void
Granule_imdct(Granule *gr, int ch, Granule_floatfreqs X)
{
    int sb, i, j, k, l, window;
    mpfloat save, sum, sum2, pp1;
    mpfloat s;
    mpfloat x[36], t[18];
    mpfloat *v, *prev, *z, *twid;

    prev = Granule_imdct_previous[ch];

    /* process each subband */

    for(sb = 0; sb < NUM_SUBBANDS; sb++) {

	for(i = 0; i < 36; i++)
	    x[i] = (mpfloat)0.0f;
	
	/* decode the block_type - it's in block_type, but we have to think
	   about the mixed blocks lower 2 subbands */
	
	if(gr->block_type == BLOCKTYPE_3WIN &&
	   !(gr->window_switching_flag && 
	     gr->mixed_block_flag && sb < 2)) {

	    /* process the 3 windows separately, each window has 12 values */

	    for(window = 0; window < 3; window++) {

#ifdef LEE_IMDCT
		/* 30*3=90 adds, 25*3=75 muls */

		X[15+window] += X[12+window];
		X[12+window] += X[9+window];
		X[9+window] += X[6+window];
		X[6+window] += X[3+window];
		X[3+window] += X[window];

		X[15+window] += X[9+window];
		X[9+window] += X[3+window];

		twid = Granule_twiddles_short;

		/* do a 3x3 IDCT on the even part */

		pp1 = X[6+window] * twid[0];
		sum = X[window] + X[12+window] * twid[1];
		t[1] = X[window] - X[12+window];
		t[0] = sum + pp1;
		t[2] = sum - pp1;

		/* 3x3 IDCT for odd part */

		pp1 = X[9+window] * twid[0];
		sum = X[3+window] + X[15+window] * twid[1];
		t[4] = X[3+window] - X[15+window];
		t[5] = sum + pp1;
		t[3] = sum - pp1;

		/* scale the odd part */

		t[3] *= twid[2];
		t[4] *= twid[3];
		t[5] *= twid[4];

		save = t[0];
		t[0] += t[5];
		t[5] = save - t[5];

		save = t[1];
		t[1] += t[4];
		t[4] = save - t[4];

		save = t[2];
		t[2] += t[3];
		t[3] = save - t[3];

		t[0]  *= twid[5];
		t[1]  *= twid[6];
		t[2]  *= twid[7];
		t[3]  *= twid[8];
		t[4]  *= twid[9];
		t[5]  *= twid[10];

		t[6]  = -t[2] * twid[15];
		t[7]  = -t[1] * twid[13];
		t[8]  = -t[0] * twid[11];
		t[9]  = -t[0] * twid[12];
		t[10] = -t[1] * twid[14];
		t[11] = -t[2] * twid[16];
		
		t[0]  =  t[3];
		t[1]  =  t[4] * twid[17];
		t[2]  =  t[5] * twid[18];
		
		t[3]  = -t[5] * twid[19];
		t[4]  = -t[4] * twid[20];
		t[5]  = -t[0] * twid[21];
		
		t[0] *= twid[22];

		z = &x[window * 6 + 6];
		z[0]  += t[0];
		z[1]  += t[1];
		z[2]  += t[2];
		z[3]  += t[3];
		z[4]  += t[4];
		z[5]  += t[5];
		z[6]  += t[6];
		z[7]  += t[7];
		z[8]  += t[8];
		z[9]  += t[9];
		z[10]  += t[10];
		z[11]  += t[11];

#else
		/* uses 3*6*6+3*12=144 MAC's */
		v = Granule_imdct_bigCOS2;
		for(i = 0; i < 6; i++) {
		    s = X[window] * *(v++); 
		    s += X[window + 3] * *(v++);
		    s += X[window + 6] * *(v++);
		    s += X[window + 9] * *(v++);
		    s += X[window + 12] * *(v++);
		    s += X[window + 15] * *(v++);
		    ISCALE(s);
		    t[i] = s;
		}

		/* periodic expansion */
		z = &x[window * 6 + 6];
		z[0] -= t[3] * Granule_imdct_win[2][0];
		z[1] -= t[4] * Granule_imdct_win[2][1];
		z[2] -= t[5] * Granule_imdct_win[2][2];
		z[3] += t[5] * Granule_imdct_win[2][3];
		z[4] += t[4] * Granule_imdct_win[2][4];
		z[5] += t[3] * Granule_imdct_win[2][5];
		z[6] += t[2] * Granule_imdct_win[2][6];
		z[7] += t[1] * Granule_imdct_win[2][7];
		z[8] += t[0] * Granule_imdct_win[2][8];
		z[9] += t[0] * Granule_imdct_win[2][9];
		z[10] += t[1] * Granule_imdct_win[2][10];
		z[11] += t[2] * Granule_imdct_win[2][11];
#endif
	    }

#ifdef INT_MATH
	    for(i = 0; i < 36; i++)
		ISCALE(x[i]);
#endif

	} else {

#ifdef LEE_IMDCT
	    
	    /* uses 207 muls, 189 adds */
		 
	    X[17] += X[16];
	    X[16] += X[15];
	    X[15] += X[14];
	    X[14] += X[13];
	    X[13] += X[12];
	    X[12] += X[11];
	    X[11] += X[10];
	    X[10] += X[9];
	    X[9] += X[8];
	    X[8] += X[7];
	    X[7] += X[6];
	    X[6] += X[5];
	    X[5] += X[4];
	    X[4] += X[3];
	    X[3] += X[2];
	    X[2] += X[1];
	    X[1] += X[0];

	    X[17] += X[15];
	    X[15] += X[13];
	    X[13] += X[11];
	    X[11] += X[9];
	    X[9] += X[7];
	    X[7] += X[5];
	    X[5] += X[3];
	    X[3] += X[1];

	    for(i = 0, j = 0; i < 9; i++, j += 8) {
#ifdef USE_INLINE_ASM
__asm {
	mov eax, X
	mov ecx, j
	lea ebx, [Granule_9x9_idct + ecx*4]
	fld dword ptr [eax]
	fld dword ptr [eax + 4]

	fld dword ptr [ebx]
	fld st(0)
	fmul dword ptr [eax + 8]
	faddp st(3), st
	fmul dword ptr [eax + 12]
	faddp st(1), st

	fld dword ptr [ebx + 4]
	fld st(0)
	fmul dword ptr [eax + 16]
	faddp st(3), st
	fmul dword ptr [eax + 20]
	faddp st(1), st

	fld dword ptr [ebx + 8]
	fld st(0)
	fmul dword ptr [eax + 24]
	faddp st(3), st
	fmul dword ptr [eax + 28]
	faddp st(1), st

	fld dword ptr [ebx + 12]
	fld st(0)
	fmul dword ptr [eax + 32]
	faddp st(3), st
	fmul dword ptr [eax + 36]
	faddp st(1), st

	fld dword ptr [ebx + 16]
	fld st(0)
	fmul dword ptr [eax + 40]
	faddp st(3), st
	fmul dword ptr [eax + 44]
	faddp st(1), st

	fld dword ptr [ebx + 20]
	fld st(0)
	fmul dword ptr [eax + 48]
	faddp st(3), st
	fmul dword ptr [eax + 52]
	faddp st(1), st

	fld dword ptr [ebx + 24]
	fld st(0)
	fmul dword ptr [eax + 56]
	faddp st(3), st
	fmul dword ptr [eax + 60]
	faddp st(1), st

	fld dword ptr [ebx + 28]
	fld st(0)
	fmul dword ptr [eax + 64]
	faddp st(3), st
	fmul dword ptr [eax + 68]
	faddp st(1), st

	fstp dword ptr [sum2]
	fstp dword ptr [sum]
}
#else
                        sum = X[0];
			sum2 = X[1];
			for(l = 0, k = 0; l < 16; l += 2, k++) {
			    s = Granule_9x9_idct[j+k];
			    sum += X[2+l] * s;
			    sum2 += X[3+l] * s;
			}
#endif
			t[i] = sum;
			t[17-i] = sum2;
	    }

	    twid = Granule_twiddles_normal;
	    
	    for(i = 0; i < 9; i++)
		t[9+i] *= twid[i];

	    for(i = 0; i < 9; i++) {
		save = t[i];
		t[i] += t[17-i];
		t[17-i] = save - t[17-i];
	    }

	    for(i = 0; i < 18; i++)
		t[i] *= twid[9+i];

#else
	    /* this loop uses 19*36=684 MAC operations */

	    /* do a 18x18 IMDCT */
	    /* 324 muls and 324 adds */

	    v = Granule_imdct_bigCOS;
	    for(i = 0; i < 18; i++) {
		s = (mpfloat)0.0f;
		k = 0;
		do {
		    s += X[k] * v[k];
		    s += X[k+1] * v[k+1];
		    s += X[k+2] * v[k+2];
		    s += X[k+3] * v[k+3];
		    s += X[k+4] * v[k+4];
		    s += X[k+5] * v[k+5];
		    k += 6;
		} while(k < 18);
		v += 18;
		ISCALE(s);
		t[i] = s;
	    }
#endif
	    /* correct the transform into the 18x36 IMDCT we need */
	    /* 36 muls */

	    for(i = 0; i < 9; i++) {
		x[i] = t[i+9] * Granule_imdct_win[gr->block_type][i];
		ISCALE(x[i]);
		x[i+9] = t[17-i] * Granule_imdct_win[gr->block_type][i+9];
		ISCALE(x[i+9]);
		x[i+18] = t[8-i] * Granule_imdct_win[gr->block_type][i+18];
		ISCALE(x[i+18]);
		x[i+27] = t[i] * Granule_imdct_win[gr->block_type][i+27];
		ISCALE(x[i+27]);
	    }

	}
	
	/* Overlap and add with previous block -
	   The first half of the 36 values is overlapped with the second half
	   of the previous block. The second half of the actual block is stored
	   to be used in the next block.
	   */
	
	for(i = 0; i < 18; i++) {
	    *(X++) = x[i] + *prev;  /* produce an output value */
	    *(prev++) = x[i+18]; 
	}
    }	
    
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天综合天天做天天综合| jvid福利写真一区二区三区| 国产成人午夜高潮毛片| 欧亚一区二区三区| 国产目拍亚洲精品99久久精品| 一区二区三区在线影院| 国产伦精品一区二区三区免费迷| 欧美午夜视频网站| 亚洲人成人一区二区在线观看| 麻豆国产欧美一区二区三区| 欧美丝袜丝交足nylons| 亚洲欧美综合色| 国产美女主播视频一区| 在线成人小视频| 亚洲一区二区在线免费看| 成人av电影在线观看| 欧美精品一区二区三| 蜜桃视频在线一区| 欧美中文字幕久久| 亚洲综合成人在线视频| 91色九色蝌蚪| 亚洲摸摸操操av| 92精品国产成人观看免费| 亚洲国产成人在线| 成人综合在线观看| 国产欧美久久久精品影院| 国内成+人亚洲+欧美+综合在线| 欧美一级高清片| 青青草91视频| 欧美成人精品1314www| 日韩av一区二区三区四区| 91精品国产综合久久精品app| 亚洲线精品一区二区三区| 欧美色综合天天久久综合精品| 亚洲一区中文日韩| 精品视频1区2区| 日韩精品免费专区| 日韩欧美国产午夜精品| 国产一区二区不卡| 国产婷婷色一区二区三区四区| 国产精品综合在线视频| 国产精品天美传媒沈樵| 99久久伊人久久99| 亚洲综合在线电影| 欧美日韩免费电影| 久久精品二区亚洲w码| 精品国产自在久精品国产| 国产精品资源网站| 亚洲免费在线观看| 欧美高清你懂得| 精品亚洲aⅴ乱码一区二区三区| 精品久久人人做人人爰| 成人午夜视频网站| 樱桃视频在线观看一区| 欧美另类一区二区三区| 紧缚捆绑精品一区二区| 国产精品每日更新| 欧美日韩综合一区| 国产麻豆午夜三级精品| 一区视频在线播放| 欧美精品第1页| 国产一区二区毛片| 一区二区三区日本| 精品免费国产二区三区| 成人美女视频在线观看| 亚洲二区在线观看| 久久久99精品久久| 欧美日韩在线播放一区| 国产福利一区二区三区在线视频| 中文字幕亚洲视频| 日韩一区国产二区欧美三区| 国产成人精品午夜视频免费| 依依成人精品视频| 2020日本不卡一区二区视频| 一本高清dvd不卡在线观看| 日本午夜一本久久久综合| 国产精品乱人伦一区二区| 欧美福利电影网| 不卡大黄网站免费看| 麻豆一区二区在线| 亚洲一区二区在线观看视频| 久久久精品蜜桃| 91精品国产黑色紧身裤美女| 成人免费视频一区二区| 日韩一区欧美二区| 亚洲视频图片小说| 久久精品亚洲一区二区三区浴池 | 欧美一级黄色大片| av福利精品导航| 国产成人精品免费| 日韩福利电影在线| 亚洲图片欧美色图| 亚洲欧美国产高清| 国产精品不卡在线| 国产欧美日韩在线| 欧美精品一区二区三区视频| 欧美精品九九99久久| 91国偷自产一区二区三区观看| 国产盗摄女厕一区二区三区| 日韩av网站在线观看| 亚洲高清免费一级二级三级| 中文字幕一区二区三区四区不卡| 久久久综合视频| 精品国产凹凸成av人网站| 在线成人免费视频| 欧美日韩国产高清一区二区| 欧美婷婷六月丁香综合色| 在线观看成人小视频| 97精品电影院| 日本精品一级二级| 色婷婷香蕉在线一区二区| 97久久精品人人做人人爽50路| 成人av电影在线观看| www.66久久| 99re热这里只有精品视频| 99热在这里有精品免费| youjizz久久| 色哟哟国产精品| 色伊人久久综合中文字幕| 欧美性猛交一区二区三区精品| 欧美自拍偷拍一区| 欧美肥妇free| 欧美精品一区二区三区蜜桃视频| 精品国产伦一区二区三区观看方式| 日韩精品一区二区三区蜜臀| 久久综合成人精品亚洲另类欧美 | 欧美一区二区三区四区在线观看 | 91麻豆精品国产91久久久久| 欧美一区二区网站| 4438成人网| 国产性天天综合网| 亚洲欧美日韩中文播放 | 亚洲裸体在线观看| 亚洲国产一区二区视频| 日韩成人dvd| 国产一区不卡视频| 91年精品国产| 91精品国产综合久久久蜜臀粉嫩 | 久久女同性恋中文字幕| 国产欧美日韩三区| 亚洲精品国产无套在线观| 日韩精品电影在线| 成人永久aaa| 欧美伊人久久大香线蕉综合69| 日韩三级免费观看| 国产精品久久久久影院| 亚洲亚洲精品在线观看| 精品一区二区三区在线播放视频| 成人av午夜影院| 欧美日韩精品一区视频| 久久免费电影网| 亚洲午夜在线视频| 国产精品一区二区视频| 欧美伊人久久久久久午夜久久久久| 欧美r级电影在线观看| 亚洲日本免费电影| 国产在线播精品第三| 一本大道综合伊人精品热热 | 国产成人免费视频一区| 欧美亚洲一区二区在线| 久久综合九色综合欧美98| 亚洲综合色婷婷| 成人av资源在线| 欧美一级二级在线观看| 一区二区三区在线视频观看 | 欧美在线制服丝袜| 欧美国产激情二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 91麻豆精品秘密| 国产精品免费aⅴ片在线观看| 日韩高清国产一区在线| 在线观看免费成人| 国产精品你懂的| 国产乱码精品1区2区3区| 在线播放中文字幕一区| 亚洲欧美日韩国产另类专区| 国产98色在线|日韩| 日韩欧美激情一区| 日韩av电影天堂| 欧洲精品一区二区| 亚洲私人影院在线观看| 国产99一区视频免费| 日韩欧美一二三| 日韩黄色免费网站| 欧美无砖砖区免费| 亚洲视频香蕉人妖| 99麻豆久久久国产精品免费优播| 久久综合国产精品| 国产一区二区三区在线观看精品| 欧美人伦禁忌dvd放荡欲情| 一区二区三区鲁丝不卡| 99精品视频在线观看| 国产精品欧美一区喷水| 成人黄色网址在线观看| 久久精品人人爽人人爽| 国产精品一二三四| 久久免费国产精品| 成人免费毛片嘿嘿连载视频| 国产欧美日韩在线看| 福利视频网站一区二区三区|