?? layeriiidecoder.java
字號:
i_stereo_k_values(is_pos[i], io_type, i);
else
is_ratio[i] = TAN12[is_pos[i]];
i++;
} // for (; sb>0...
sfb++;
} // while (sfb < 12)
sfb = sfBandIndex[sfreq].s[10];
sb = sfBandIndex[sfreq].s[11] - sfb;
sfb = (sfb << 2) - sfb + j * sb;
temp = sfBandIndex[sfreq].s[11];
sb = sfBandIndex[sfreq].s[12] - temp;
i = (temp << 2) - temp + j * sb;
for (; sb > 0; sb--) {
is_pos[i] = is_pos[sfb];
if (lsf) {
k[0][i] = k[0][sfb];
k[1][i] = k[1][sfb];
} else {
is_ratio[i] = is_ratio[sfb];
}
i++;
} // for (; sb > 0 ...
}
if (max_sfb <= 3) {
i = 2;
ss = 17;
sb = -1;
while (i >= 0) {
if (ro[1][i][ss] != 0.0f) {
sb = (i<<4) + (i<<1) + ss;
i = -1;
} else {
ss--;
if (ss < 0) {
i--;
ss = 17;
}
} // if (ro ...
} // while (i>=0)
i = 0;
while (sfBandIndex[sfreq].l[i] <= sb)
i++;
sfb = i;
i = sfBandIndex[sfreq].l[i];
for (; sfb<8; sfb++) {
sb = sfBandIndex[sfreq].l[sfb+1]-sfBandIndex[sfreq].l[sfb];
for (; sb>0; sb--) {
is_pos[i] = scalefac[1].l[sfb];
if (is_pos[i] != 7)
if (lsf)
i_stereo_k_values(is_pos[i], io_type, i);
else
is_ratio[i] = TAN12[is_pos[i]];
i++;
} // for (; sb>0 ...
} // for (; sfb<8 ...
} // for (j=0 ...
} else { // if (gr_info.mixed_block_flag)
for (int j=0; j<3; j++) {
int sfbcnt;
sfbcnt = -1;
for( sfb=12; sfb >=0; sfb-- )
{
temp = sfBandIndex[sfreq].s[sfb];
lines = sfBandIndex[sfreq].s[sfb+1] - temp;
i = (temp << 2) - temp + (j+1) * lines - 1;
while (lines > 0) {
if (ro[1][i/18][i%18] != 0.0f) {
// MDM: in java, array access is very slow.
// Is quicker to compute div and mod values.
//if (ro[1][ss_div[i]][ss_mod[i]] != 0.0f) {
sfbcnt = sfb;
sfb = -10;
lines = -10;
}
lines--;
i--;
} // while (lines > 0) */
} // for (sfb=12 ...
sfb = sfbcnt + 1;
while(sfb<12) {
temp = sfBandIndex[sfreq].s[sfb];
sb = sfBandIndex[sfreq].s[sfb+1] - temp;
i = (temp << 2) - temp + j * sb;
for ( ; sb > 0; sb--) {
is_pos[i] = scalefac[1].s[j][sfb];
if (is_pos[i] != 7)
if (lsf)
i_stereo_k_values(is_pos[i], io_type, i);
else
is_ratio[i] = TAN12[is_pos[i]];
i++;
} // for (; sb>0 ...
sfb++;
} // while (sfb<12)
temp = sfBandIndex[sfreq].s[10];
temp2= sfBandIndex[sfreq].s[11];
sb = temp2 - temp;
sfb = (temp << 2) - temp + j * sb;
sb = sfBandIndex[sfreq].s[12] - temp2;
i = (temp2 << 2) - temp2 + j * sb;
for (; sb>0; sb--) {
is_pos[i] = is_pos[sfb];
if (lsf) {
k[0][i] = k[0][sfb];
k[1][i] = k[1][sfb];
} else {
is_ratio[i] = is_ratio[sfb];
}
i++;
} // for (; sb>0 ...
} // for (sfb=12
} // for (j=0 ...
} else { // if (gr_info.window_switching_flag ...
i = 31;
ss = 17;
sb = 0;
while (i >= 0) {
if (ro[1][i][ss] != 0.0f) {
sb = (i<<4) + (i<<1) + ss;
i = -1;
} else {
ss--;
if (ss < 0) {
i--;
ss = 17;
}
}
}
i = 0;
while (sfBandIndex[sfreq].l[i] <= sb)
i++;
sfb = i;
i = sfBandIndex[sfreq].l[i];
for (; sfb<21; sfb++) {
sb = sfBandIndex[sfreq].l[sfb+1] - sfBandIndex[sfreq].l[sfb];
for (; sb > 0; sb--) {
is_pos[i] = scalefac[1].l[sfb];
if (is_pos[i] != 7)
if (lsf)
i_stereo_k_values(is_pos[i], io_type, i);
else
is_ratio[i] = TAN12[is_pos[i]];
i++;
}
}
sfb = sfBandIndex[sfreq].l[20];
for (sb = 576 - sfBandIndex[sfreq].l[21]; (sb > 0) && (i<576); sb--)
{
is_pos[i] = is_pos[sfb]; // error here : i >=576
if (lsf) {
k[0][i] = k[0][sfb];
k[1][i] = k[1][sfb];
} else {
is_ratio[i] = is_ratio[sfb];
}
i++;
} // if (gr_info.mixed_block_flag)
} // if (gr_info.window_switching_flag ...
} // if (i_stereo)
i = 0;
for(sb=0;sb<SBLIMIT;sb++)
for(ss=0;ss<SSLIMIT;ss++) {
if (is_pos[i] == 7) {
if (ms_stereo) {
lr[0][sb][ss] = (ro[0][sb][ss]+ro[1][sb][ss]) * 0.707106781f;
lr[1][sb][ss] = (ro[0][sb][ss]-ro[1][sb][ss]) * 0.707106781f;
} else {
lr[0][sb][ss] = ro[0][sb][ss];
lr[1][sb][ss] = ro[1][sb][ss];
}
}
else if (i_stereo) {
if (lsf) {
lr[0][sb][ss] = ro[0][sb][ss] * k[0][i];
lr[1][sb][ss] = ro[0][sb][ss] * k[1][i];
} else {
lr[1][sb][ss] = ro[0][sb][ss] / (float) (1 + is_ratio[i]);
lr[0][sb][ss] = lr[1][sb][ss] * is_ratio[i];
}
}
/* else {
System.out.println("Error in stereo processing\n");
} */
i++;
}
} // channels == 2
}
/**
*
*/
private void antialias(int ch, int gr)
{
int sb18, ss, sb18lim;
gr_info_s gr_info = (si.ch[ch].gr[gr]);
// 31 alias-reduction operations between each pair of sub-bands
// with 8 butterflies between each pair
if ((gr_info.window_switching_flag !=0) && (gr_info.block_type == 2) &&
!(gr_info.mixed_block_flag != 0) )
return;
if ((gr_info.window_switching_flag !=0) && (gr_info.mixed_block_flag != 0)&&
(gr_info.block_type == 2)) {
sb18lim = 18;
} else {
sb18lim = 558;
}
for (sb18=0; sb18 < sb18lim; sb18+=18) {
for (ss=0;ss<8;ss++) {
int src_idx1 = sb18 + 17 - ss;
int src_idx2 = sb18 + 18 + ss;
float bu = out_1d[src_idx1];
float bd = out_1d[src_idx2];
out_1d[src_idx1] = (bu * cs[ss]) - (bd * ca[ss]);
out_1d[src_idx2] = (bd * cs[ss]) + (bu * ca[ss]);
}
}
}
/**
*
*/
// MDM: tsOutCopy and rawout do not need initializing, so the arrays
// can be reused.
float[] tsOutCopy = new float[18];
float[] rawout = new float[36];
private void hybrid(int ch, int gr)
{
int bt;
int sb18;
gr_info_s gr_info = (si.ch[ch].gr[gr]);
float[] tsOut;
float[][] prvblk;
for(sb18=0;sb18<576;sb18+=18)
{
bt = ((gr_info.window_switching_flag !=0 ) && (gr_info.mixed_block_flag !=0) &&
(sb18 < 36)) ? 0 : gr_info.block_type;
tsOut = out_1d;
// Modif E.B 02/22/99
for (int cc = 0;cc<18;cc++)
tsOutCopy[cc] = tsOut[cc+sb18];
inv_mdct(tsOutCopy, rawout, bt);
for (int cc = 0;cc<18;cc++)
tsOut[cc+sb18] = tsOutCopy[cc];
// Fin Modif
// overlap addition
prvblk = prevblck;
tsOut[0 + sb18] = rawout[0] + prvblk[ch][sb18 + 0];
prvblk[ch][sb18 + 0] = rawout[18];
tsOut[1 + sb18] = rawout[1] + prvblk[ch][sb18 + 1];
prvblk[ch][sb18 + 1] = rawout[19];
tsOut[2 + sb18] = rawout[2] + prvblk[ch][sb18 + 2];
prvblk[ch][sb18 + 2] = rawout[20];
tsOut[3 + sb18] = rawout[3] + prvblk[ch][sb18 + 3];
prvblk[ch][sb18 + 3] = rawout[21];
tsOut[4 + sb18] = rawout[4] + prvblk[ch][sb18 + 4];
prvblk[ch][sb18 + 4] = rawout[22];
tsOut[5 + sb18] = rawout[5] + prvblk[ch][sb18 + 5];
prvblk[ch][sb18 + 5] = rawout[23];
tsOut[6 + sb18] = rawout[6] + prvblk[ch][sb18 + 6];
prvblk[ch][sb18 + 6] = rawout[24];
tsOut[7 + sb18] = rawout[7] + prvblk[ch][sb18 + 7];
prvblk[ch][sb18 + 7] = rawout[25];
tsOut[8 + sb18] = rawout[8] + prvblk[ch][sb18 + 8];
prvblk[ch][sb18 + 8] = rawout[26];
tsOut[9 + sb18] = rawout[9] + prvblk[ch][sb18 + 9];
prvblk[ch][sb18 + 9] = rawout[27];
tsOut[10 + sb18] = rawout[10] + prvblk[ch][sb18 + 10];
prvblk[ch][sb18 + 10] = rawout[28];
tsOut[11 + sb18] = rawout[11] + prvblk[ch][sb18 + 11];
prvblk[ch][sb18 + 11] = rawout[29];
tsOut[12 + sb18] = rawout[12] + prvblk[ch][sb18 + 12];
prvblk[ch][sb18 + 12] = rawout[30];
tsOut[13 + sb18] = rawout[13] + prvblk[ch][sb18 + 13];
prvblk[ch][sb18 + 13] = rawout[31];
tsOut[14 + sb18] = rawout[14] + prvblk[ch][sb18 + 14];
prvblk[ch][sb18 + 14] = rawout[32];
tsOut[15 + sb18] = rawout[15] + prvblk[ch][sb18 + 15];
prvblk[ch][sb18 + 15] = rawout[33];
tsOut[16 + sb18] = rawout[16] + prvblk[ch][sb18 + 16];
prvblk[ch][sb18 + 16] = rawout[34];
tsOut[17 + sb18] = rawout[17] + prvblk[ch][sb18 + 17];
prvblk[ch][sb18 + 17] = rawout[35];
}
}
/**
*
*/
private void do_downmix()
{
for (int sb=0; sb<SSLIMIT; sb++) {
for (int ss=0; ss<SSLIMIT; ss+=3) {
lr[0][sb][ss] = (lr[0][sb][ss] + lr[1][sb][ss]) * 0.5f;
lr[0][sb][ss+1] = (lr[0][sb][ss+1] + lr[1][sb][ss+1]) * 0.5f;
lr[0][sb][ss+2] = (lr[0][sb][ss+2] + lr[1][sb][ss+2]) * 0.5f;
}
}
}
/**
* Fast INV_MDCT.
*/
public void inv_mdct(float[] in, float[] out, int block_type)
{
float[] win_bt;
int i;
float tmpf_0, tmpf_1, tmpf_2, tmpf_3, tmpf_4, tmpf_5, tmpf_6, tmpf_7, tmpf_8, tmpf_9;
float tmpf_10, tmpf_11, tmpf_12, tmpf_13, tmpf_14, tmpf_15, tmpf_16, tmpf_17;
tmpf_0 = tmpf_1 = tmpf_2 = tmpf_3 = tmpf_4 = tmpf_5 = tmpf_6 = tmpf_7 = tmpf_8 = tmpf_9 =
tmpf_10 = tmpf_11 = tmpf_12 = tmpf_13 = tmpf_14 = tmpf_15 = tmpf_16 = tmpf_17 = 0.0f;
if(block_type == 2)
{
/*
*
* Under MicrosoftVM 2922, This causes a GPF, or
* At best, an ArrayIndexOutOfBoundsExceptin.
for(int p=0;p<36;p+=9)
{
out[p] = out[p+1] = out[p+2] = out[p+3] =
out[p+4] = out[p+5] = out[p+6] = out[p+7] =
out[p+8] = 0.0f;
}
*/
out[0] = 0.0f;
out[1] = 0.0f;
out[2] = 0.0f;
out[3] = 0.0f;
out[4] = 0.0f;
out[5] = 0.0f;
out[6] = 0.0f;
out[7] = 0.0f;
out[8] = 0.0f;
out[9] = 0.0f;
out[10] = 0.0f;
out[11] = 0.0f;
out[12] = 0.0f;
out[13] = 0.0f;
out[14] = 0.0f;
out[15] = 0.0f;
out[16] = 0.0f;
out[17] = 0.0f;
out[18] = 0.0f;
out[19] = 0.0f;
out[20] = 0.0f;
out[21] = 0.0f;
out[22] = 0.0f;
out[23] = 0.0f;
out[24] = 0.0f;
out[25] = 0.0f;
out[26] = 0.0f;
out[27] = 0.0f;
out[28] = 0.0f;
out[29] = 0.0f;
out[30] = 0.0f;
out[31] = 0.0f;
out[32] = 0.0f;
out[33] = 0.0f;
out[34] = 0.0f;
out[35] = 0.0f;
int six_i = 0;
for(i=0;i<3;i++)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -