⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpeglayer3.cc

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CC
📖 第 1 页 / 共 4 页
字号:
			in[1][0][0] = 1.0;			for (k = 3 * SSLIMIT - 1; in[1][0][k] == 0.0; k--);			in[1][0][0] = temp;			for (i = 0; sfBandIndex->l[i] <= k; i++);		    }		    {			int sfb = i;			i = sfBandIndex->l[i];			for (; sfb < 8; sfb++) {			    int t = scalefactors[1].l[sfb];			    int k =				sfBandIndex->l[sfb + 1] - sfBandIndex->l[sfb];			    if (t != 7) {				RATIOS r = ratios[t];				for (; k > 0; k--, i++) {				    is_pos[i] = t;				    is_ratio[i] = r;				}			    } else				for (; k > 0; k--, i++)				    is_pos[i] = t;			}		    }		}	    } else		// Part II	    {		for (int j = 0; j < 3; j++) {		    int sfbcnt = -1;		    for (int sfb = 12; sfb >= 0; sfb--) {			int lines;			{			    int t;			    t = sfBandIndex->s[sfb];			    lines = sfBandIndex->s[sfb + 1] - t;			    i = MUL3(t) + (j + 1) * lines - 1;			}			for (; lines > 0; lines--, i--)			    if (in[1][0][i] != 0.0f) {				sfbcnt = sfb;				sfb = 0;				break;	// quit loop			    }		    }		    for (int sfb = sfbcnt + 1; sfb < 12; sfb++) {			int k, t;			t = sfBandIndex->s[sfb];			k = sfBandIndex->s[sfb + 1] - t;			i = MUL3(t) + j * k;			t = scalefactors[1].s[j][sfb];			if (t != 7) {			    RATIOS r = ratios[t];			    for (; k > 0; k--, i++) {				is_pos[i] = t;				is_ratio[i] = r;			    }			} else			    for (; k > 0; k--, i++)				is_pos[i] = t;		    }		    {			int t1 = sfBandIndex->s[10], t2 = sfBandIndex->s[11];			int k, tt;			tt = MUL3(t1) + j * (t2 - t1);			k = sfBandIndex->s[12] - t2;			if (is_pos[tt] != 7) {			    RATIOS r = is_ratio[tt];			    int t = is_pos[tt];			    i = MUL3(t1) + j * k;			    for (; k > 0; k--, i++) {				is_pos[i] = t;				is_ratio[i] = r;			    }			} else			    for (; k > 0; k--, i++)				is_pos[i] = 7;		    }		}	    }	} else			// ms-stereo (Part III)	{	    {		REAL temp;		int k;		temp = in[1][0][0];		in[1][0][0] = 1.0;		for (k = ARRAYSIZE - 1; in[1][0][k] == 0.0; k--);		in[1][0][0] = temp;		for (i = 0; sfBandIndex->l[i] <= k; i++);	    }	    {		int sfb;		sfb = i;		i = sfBandIndex->l[i];		for (; sfb < 21; sfb++) {		    int k, t;		    k = sfBandIndex->l[sfb + 1] - sfBandIndex->l[sfb];		    t = scalefactors[1].l[sfb];		    if (t != 7) {			RATIOS r = ratios[t];			for (; k > 0; k--, i++) {			    is_pos[i] = t;			    is_ratio[i] = r;			}		    } else			for (; k > 0; k--, i++)			    is_pos[i] = t;		}	    }	    {		int k, t, tt;		tt = sfBandIndex->l[20];		k = 576 - sfBandIndex->l[21];		t = is_pos[tt];		if (t != 7) {		    RATIOS r = is_ratio[tt];		    for (; k > 0; k--, i++) {			is_pos[i] = t;			is_ratio[i] = r;		    }		} else		    for (; k > 0; k--, i++)			is_pos[i] = t;	    }	}	if (ms_stereo) {	    i = ARRAYSIZE - 1;	    do {		if (is_pos[i] == 7) {		    REAL t = in[LS][0][i];		    in[LS][0][i] = (t + in[RS][0][i]) * 0.7071068f;		    in[RS][0][i] = (t - in[RS][0][i]) * 0.7071068f;		} else {		    in[RS][0][i] = in[LS][0][i] * is_ratio[i].r;		    in[LS][0][i] *= is_ratio[i].l;		}	    } while (i--);	} else {	    i = ARRAYSIZE - 1;	    do {		if (is_pos[i] != 7) {		    in[RS][0][i] = in[LS][0][i] * is_ratio[i].r;		    in[LS][0][i] *= is_ratio[i].l;		}	    } while (i--);	}    } else {	if (ms_stereo) {	    int i = ARRAYSIZE - 1;	    do {		REAL t = in[LS][0][i];		in[LS][0][i] = (t + in[RS][0][i]) * 0.7071068f;		in[RS][0][i] = (t - in[RS][0][i]) * 0.7071068f;	    } while (i--);	}    }    // channels==2}inline voidlayer3reorder_1(int version, int frequency,		REAL in[SBLIMIT][SSLIMIT], REAL out[SBLIMIT][SSLIMIT]){    SFBANDINDEX *sfBandIndex = &(sfBandIndextable[version][frequency]);    int sfb, sfb_start, sfb_lines;    /* NO REORDER FOR LOW 2 SUBBANDS */    out[0][0] = in[0][0];    out[0][1] = in[0][1];    out[0][2] = in[0][2];    out[0][3] = in[0][3];    out[0][4] = in[0][4];    out[0][5] = in[0][5];    out[0][6] = in[0][6];    out[0][7] = in[0][7];    out[0][8] = in[0][8];    out[0][9] = in[0][9];    out[0][10] = in[0][10];    out[0][11] = in[0][11];    out[0][12] = in[0][12];    out[0][13] = in[0][13];    out[0][14] = in[0][14];    out[0][15] = in[0][15];    out[0][16] = in[0][16];    out[0][17] = in[0][17];    out[1][0] = in[1][0];    out[1][1] = in[1][1];    out[1][2] = in[1][2];    out[1][3] = in[1][3];    out[1][4] = in[1][4];    out[1][5] = in[1][5];    out[1][6] = in[1][6];    out[1][7] = in[1][7];    out[1][8] = in[1][8];    out[1][9] = in[1][9];    out[1][10] = in[1][10];    out[1][11] = in[1][11];    out[1][12] = in[1][12];    out[1][13] = in[1][13];    out[1][14] = in[1][14];    out[1][15] = in[1][15];    out[1][16] = in[1][16];    out[1][17] = in[1][17];    /* REORDERING FOR REST SWITCHED SHORT */    for (sfb = 3, sfb_start = sfBandIndex->s[3],	 sfb_lines = sfBandIndex->s[4] - sfb_start;	 sfb < 13;	 sfb++, sfb_start = sfBandIndex->s[sfb],	 (sfb_lines = sfBandIndex->s[sfb + 1] - sfb_start)) {	for (int freq = 0; freq < sfb_lines; freq++) {	    int src_line = sfb_start + (sfb_start << 1) + freq;	    int des_line = src_line + (freq << 1);	    out[0][des_line] = in[0][src_line];	    out[0][des_line + 1] = in[0][src_line + sfb_lines];	    out[0][des_line + 2] = in[0][src_line + (sfb_lines << 1)];	}    }}inline voidlayer3reorder_2(int version, int frequency, REAL in[SBLIMIT][SSLIMIT],		REAL out[SBLIMIT][SSLIMIT]){    SFBANDINDEX *sfBandIndex = &(sfBandIndextable[version][frequency]);    int sfb, sfb_start, sfb_lines;    for (sfb = 0, sfb_start = 0, sfb_lines = sfBandIndex->s[1];	 sfb < 13;	 sfb++, sfb_start = sfBandIndex->s[sfb],	 (sfb_lines = sfBandIndex->s[sfb + 1] - sfb_start)) {	for (int freq = 0; freq < sfb_lines; freq++) {	    int src_line = sfb_start + (sfb_start << 1) + freq;	    int des_line = src_line + (freq << 1);	    out[0][des_line] = in[0][src_line];	    out[0][des_line + 1] = in[0][src_line + sfb_lines];	    out[0][des_line + 2] = in[0][src_line + (sfb_lines << 1)];	}    }}inline voidlayer3antialias_1(REAL in[SBLIMIT][SSLIMIT]){    for (int ss = 0; ss < 8; ss++) {	REAL bu, bd;		/* upper and lower butterfly inputs */	bu = in[0][17 - ss];	bd = in[1][ss];	in[0][17 - ss] = (bu * cs[ss]) - (bd * ca[ss]);	in[1][ss] = (bd * cs[ss]) + (bu * ca[ss]);    }}inline voidlayer3antialias_2(REAL in[SBLIMIT][SSLIMIT], REAL out[SBLIMIT][SSLIMIT]){    out[0][0] = in[0][0];    out[0][1] = in[0][1];    out[0][2] = in[0][2];    out[0][3] = in[0][3];    out[0][4] = in[0][4];    out[0][5] = in[0][5];    out[0][6] = in[0][6];    out[0][7] = in[0][7];    for (int index = SSLIMIT; index <= (SBLIMIT - 1) * SSLIMIT;	 index += SSLIMIT) {	for (int n = 0; n < 8; n++) {	    REAL bu, bd;	    bu = in[0][index - n - 1];	    bd = in[0][index + n];	    out[0][index - n - 1] = (bu * cs[n]) - (bd * ca[n]);	    out[0][index + n] = (bd * cs[n]) + (bu * ca[n]);	}	out[0][index - SSLIMIT + 8] = in[0][index - SSLIMIT + 8];	out[0][index - SSLIMIT + 9] = in[0][index - SSLIMIT + 9];    }    out[31][8] = in[31][8];    out[31][9] = in[31][9];    out[31][10] = in[31][10];    out[31][11] = in[31][11];    out[31][12] = in[31][12];    out[31][13] = in[31][13];    out[31][14] = in[31][14];    out[31][15] = in[31][15];    out[31][16] = in[31][16];    out[31][17] = in[31][17];}voidMpegtoraw::layer3reorderandantialias(int ch, int gr,				     REAL in[SBLIMIT][SSLIMIT],				     REAL out[SBLIMIT][SSLIMIT]){    register layer3grinfo *gi = &(sideinfo.ch[ch].gr[gr]);    if (gi->generalflag) {	if (gi->mixed_block_flag) {	    fprintf(stderr, "Notchecked!");	    layer3reorder_1(version, frequency, in, out);	// Not checked...	    layer3antialias_1(out);	} else	    layer3reorder_2(version, frequency, in, out);    } else	layer3antialias_2(in, out);}static voiddct36(REAL * inbuf, REAL * prevblk1, REAL * prevblk2,      const REAL * wi, REAL * out){#define MACRO0(v) {                                 \    REAL tmp;                                       \    out2[9+(v)]=(tmp=sum0+sum1)*wi[27+(v)];         \    out2[8-(v)]=tmp * wi[26-(v)];  }                \    sum0-=sum1;                                     \    ts[SBLIMIT*(8-(v))]=out1[8-(v)]+sum0*wi[8-(v)]; \    ts[SBLIMIT*(9+(v))]=out1[9+(v)]+sum0*wi[9+(v)];#define MACRO1(v) { \    REAL sum0,sum1; \    sum0=tmp1a+tmp2a; \    sum1=(tmp1b+tmp2b)*hsec_36[(v)]; \    MACRO0(v); }#define MACRO2(v) {                    \    REAL sum0,sum1;                    \    sum0=tmp2a-tmp1a;                  \    sum1=(tmp2b-tmp1b) * hsec_36[(v)]; \    MACRO0(v); }    {	register REAL *in = inbuf;	in[17] += in[16];	in[16] += in[15];	in[15] += in[14];	in[14] += in[13];	in[13] += in[12];	in[12] += in[11];	in[11] += in[10];	in[10] += in[9];	in[9] += in[8];	in[8] += in[7];	in[7] += in[6];	in[6] += in[5];	in[5] += in[4];	in[4] += in[3];	in[3] += in[2];	in[2] += in[1];	in[1] += in[0];	in[17] += in[15];	in[15] += in[13];	in[13] += in[11];	in[11] += in[9];	in[9] += in[7];	in[7] += in[5];	in[5] += in[3];	in[3] += in[1];	{	    register const REAL *c = cos_18;	    register REAL *out2 = prevblk2;	    register REAL *out1 = prevblk1;	    register REAL *ts = out;	    REAL ta33, ta66, tb33, tb66;	    ta33 = in[2 * 3 + 0] * c[3];	    ta66 = in[2 * 6 + 0] * c[6];	    tb33 = in[2 * 3 + 1] * c[3];	    tb66 = in[2 * 6 + 1] * c[6];	    {		REAL tmp1a, tmp2a, tmp1b, tmp2b;		tmp1a =		    in[2 * 1 + 0] * c[1] + ta33 + in[2 * 5 + 0] * c[5] +		    in[2 * 7 + 0] * c[7];		tmp1b =		    in[2 * 1 + 1] * c[1] + tb33 + in[2 * 5 + 1] * c[5] +		    in[2 * 7 + 1] * c[7];		tmp2a =		    in[2 * 0 + 0] + in[2 * 2 + 0] * c[2] + in[2 * 4 +							      0] * c[4] +		    ta66 + in[2 * 8 + 0] * c[8];		tmp2b =		    in[2 * 0 + 1] + in[2 * 2 + 1] * c[2] + in[2 * 4 +							      1] * c[4] +		    tb66 + in[2 * 8 + 1] * c[8];		MACRO1(0);		MACRO2(8);	    }	    {		REAL tmp1a, tmp2a, tmp1b, tmp2b;		tmp1a =		    (in[2 * 1 + 0] - in[2 * 5 + 0] - in[2 * 7 + 0]) * c[3];		tmp1b =		    (in[2 * 1 + 1] - in[2 * 5 + 1] - in[2 * 7 + 1]) * c[3];		tmp2a =		    (in[2 * 2 + 0] - in[2 * 4 + 0] - in[2 * 8 + 0]) * c[6] -		    in[2 * 6 + 0] + in[2 * 0 + 0];		tmp2b =		    (in[2 * 2 + 1] - in[2 * 4 + 1] - in[2 * 8 + 1]) * c[6] -		    in[2 * 6 + 1] + in[2 * 0 + 1];		MACRO1(1);		MACRO2(7);	    }	    {		REAL tmp1a, tmp2a, tmp1b, tmp2b;		tmp1a =		    in[2 * 1 + 0] * c[5] - ta33 - in[2 * 5 + 0] * c[7] +		    in[2 * 7 + 0] * c[1];		tmp1b =		    in[2 * 1 + 1] * c[5] - tb33 - in[2 * 5 + 1] * c[7] +		    in[2 * 7 + 1] * c[1];		tmp2a =		    in[2 * 0 + 0] - in[2 * 2 + 0] * c[8] - in[2 * 4 +							      0] * c[2] +		    ta66 + in[2 * 8 + 0] * c[4];		tmp2b =		    in[2 * 0 + 1] - in[2 * 2 + 1] * c[8] - in[2 * 4 +							      1] * c[2] +		    tb66 + in[2 * 8 + 1] * c[4];		MACRO1(2);		MACRO2(6);	    }	    {		REAL tmp1a, tmp2a, tmp1b, tmp2b;		tmp1a =		    in[2 * 1 + 0] * c[7] - ta33 + in[2 * 5 + 0] * c[1] -		    in[2 * 7 + 0] * c[5];		tmp1b =		    in[2 * 1 + 1] * c[7] - tb33 + in[2 * 5 + 1] * c[1] -		    in[2 * 7 + 1] * c[5];		tmp2a =		    in[2 * 0 + 0] - in[2 * 2 + 0] * c[4] + in[2 * 4 +							      0] * c[8] +		    ta66 - in[2 * 8 + 0] * c[2];		tmp2b =		    in[2 * 0 + 1] - in[2 * 2 + 1] * c[4] + in[2 * 4 +							      1] * c[8] +		    tb66 - in[2 * 8 + 1] * c[2];		MACRO1(3);		MACRO2(5);	    }	    {		REAL sum0, sum1;		sum0 =		    in[2 * 0 + 0] - in[2 * 2 + 0] + in[2 * 4 + 0] - in[2 * 6 +								       0] +		    in[2 * 8 + 0];		sum1 =		    (in[2 * 0 + 1] - in[2 * 2 + 1] + in[2 * 4 + 1] -		     in[2 * 6 + 1] + in[2 * 8 + 1]) * hsec_36[4];		MACRO0(4);	    }	}    }}static voiddct12(REAL * in, REAL * prevblk1, REAL * prevblk2,      register const REAL * wi, register REAL * out){#define DCT12_PART1   \        in5=in[5*3];  \  in5+=(in4=in[4*3]); \  in4+=(in3=in[3*3]); \  in3+=(in2=in[2*3]); \  in2+=(in1=in[1*3]); \  in1+=(in0=in[0*3]); \                      \  in5+=in3;in3+=in1;  \                      \  in2*=cos1_6;        \  in3*=cos1_6;#define DCT12_PART2         \  in0+=in4*cos2_6;          \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -