📄 aac_filterbank_fp.c
字号:
break;
case LONG_STOP_SEQUENCE:
ippsMDCTInv_32f(p_in_spectrum, samples, p_data->p_mdct_inv_long,
p_data->p_buffer_inv);
ippsZero_32f(p_out_samples_1st_part, (N_LONG-N_SHORT)/4);
ippsMul_32f(prev_window_table_short, &samples[(N_LONG-N_SHORT)/4],
&p_out_samples_1st_part[(N_LONG-N_SHORT)/4], N_SHORT/2);
ippsCopy_32f(&samples[(N_LONG+N_SHORT)/4],
&p_out_samples_1st_part[(N_LONG + N_SHORT)/4],
((N_LONG/2)-((N_LONG+N_SHORT)/4)));
ippsAdd_32f_I(p_in_prev_samples, p_out_samples_1st_part, N_LONG/2);
ippsMul_32f(&window_table_long[N_LONG/2],
&samples[N_LONG/2], p_out_samples_2nd_part, N_LONG/2);
break;
case EIGHT_SHORT_SEQUENCE:
p_samples = samples;
p_spectrum = p_in_spectrum;
ippsZero_32f(p_samples, N_LONG);
p_samples += (N_LONG - N_SHORT) / 4;
ippsMDCTInv_32f(p_spectrum, (Ipp32f*)mdct_out_short,
p_data->p_mdct_inv_short, p_data->p_buffer_inv);
ippsMul_32f(prev_window_table_short, mdct_out_short, p_samples, N_SHORT/2);
ippsMul_32f(&window_table_short[N_SHORT/2], &mdct_out_short[N_SHORT/2],
&p_samples[N_SHORT/2],N_SHORT/2);
p_samples += N_SHORT/2;
p_spectrum += N_SHORT/2;
for (j = 1; j < 8; j++) {
ippsMDCTInv_32f(p_spectrum, (Ipp32f*)mdct_out_short,
p_data->p_mdct_inv_short, p_data->p_buffer_inv);
ippsMul_32f_I(window_table_short,(Ipp32f*)mdct_out_short, N_SHORT);
ippsAdd_32f_I((Ipp32f*)mdct_out_short, p_samples, N_SHORT);
p_samples += N_SHORT/2;
p_spectrum += N_SHORT/2;
}
ippsAdd_32f(p_in_prev_samples, samples,
p_out_samples_1st_part, N_LONG/2);
ippsCopy_32f(&samples[N_LONG/2], p_out_samples_2nd_part, N_LONG/2);
break;
}
}
/********************************************************************/
void FilterbankDecSSR(sFilterbank* p_data,
Ipp32f* p_in_spectrum,
Ipp32s window_sequence,
Ipp32s window_shape,
Ipp32s prev_window_shape,
Ipp32f* p_out_samples)
{
Ipp32f* p_in;
Ipp32f* p_out;
Ipp32f *window_table_long, *prev_window_table_long;
Ipp32f *window_table_short, *prev_window_table_short;
Ipp32s j;
if (0 == window_shape) {
window_table_long = p_data->sin_long_wnd_table;
window_table_short = p_data->sin_short_wnd_table;
} else {
window_table_long = p_data->KBD_long_wnd_table;
window_table_short = p_data->KBD_short_wnd_table;
}
if (0 == prev_window_shape) {
prev_window_table_long = p_data->sin_long_wnd_table;
prev_window_table_short = p_data->sin_short_wnd_table;
} else {
prev_window_table_long = p_data->KBD_long_wnd_table;
prev_window_table_short = p_data->KBD_short_wnd_table;
}
switch(window_sequence)
{
case ONLY_LONG_SEQUENCE:
ippsMDCTInv_32f(p_in_spectrum, p_out_samples,
p_data->p_mdct_inv_long, p_data->p_buffer_inv);
ippsMul_32f_I(prev_window_table_long, p_out_samples, N_LONG/8);
ippsMul_32f_I(&window_table_long[N_LONG/8],
&p_out_samples[N_LONG/8], N_LONG/8);
break;
case LONG_START_SEQUENCE:
ippsMDCTInv_32f(p_in_spectrum, p_out_samples,
p_data->p_mdct_inv_long, p_data->p_buffer_inv);
ippsMul_32f_I(prev_window_table_long, p_out_samples, N_LONG/8);
ippsMul_32f_I(&window_table_short[N_SHORT/8],
&p_out_samples[(3*N_LONG-N_SHORT)/16], N_SHORT/8);
ippsZero_32f(&p_out_samples[(3*N_LONG+N_SHORT)/16],
(N_LONG-N_SHORT)/16);
break;
case LONG_STOP_SEQUENCE:
ippsMDCTInv_32f(p_in_spectrum, p_out_samples,
p_data->p_mdct_inv_long, p_data->p_buffer_inv);
ippsZero_32f(p_out_samples, (N_LONG-N_SHORT)/16);
ippsMul_32f_I(prev_window_table_short,
&p_out_samples[(N_LONG-N_SHORT)/16], N_SHORT/8);
ippsMul_32f_I(&window_table_long[N_LONG/8],
&p_out_samples[N_LONG/8], N_LONG/8);
break;
case EIGHT_SHORT_SEQUENCE:
p_in = p_in_spectrum;
p_out = p_out_samples;
ippsMDCTInv_32f(p_in, p_out, p_data->p_mdct_inv_short,
p_data->p_buffer_inv);
ippsMul_32f_I(prev_window_table_short, p_out, N_SHORT/8);
ippsMul_32f_I(&window_table_short[N_SHORT/8],
&p_out[N_SHORT/8], N_SHORT/8);
p_in += N_SHORT/8;
p_out += N_SHORT/4;
for (j = 1; j < 8; j++) {
ippsMDCTInv_32f(p_in, p_out, p_data->p_mdct_inv_short,
p_data->p_buffer_inv);
ippsMul_32f_I(window_table_short, p_out, N_SHORT/4);
p_in += N_SHORT/8;
p_out += N_SHORT/4;
}
break;
}
}
/********************************************************************/
void FilterbankEnc(sFilterbank* p_data,
Ipp32f* p_in_samples_1st_part,
Ipp32f* p_in_samples_2nd_part,
Ipp32s window_sequence,
Ipp32s window_shape,
Ipp32s prev_window_shape,
Ipp32f* p_out_spectrum,
Ipp32s ltp)
{
Ipp32f mdct_in[N_LONG];
Ipp32f *window_table_long, *prev_window_table_long;
Ipp32f *window_table_short, *prev_window_table_short;
Ipp32s i;
if (0 == window_shape) {
window_table_long = p_data->sin_long_wnd_table;
window_table_short = p_data->sin_short_wnd_table;
} else {
window_table_long = p_data->KBD_long_wnd_table;
window_table_short = p_data->KBD_short_wnd_table;
}
if (0 == prev_window_shape) {
prev_window_table_long = p_data->sin_long_wnd_table;
prev_window_table_short = p_data->sin_short_wnd_table;
} else {
prev_window_table_long = p_data->KBD_long_wnd_table;
prev_window_table_short = p_data->KBD_short_wnd_table;
}
switch(window_sequence)
{
case ONLY_LONG_SEQUENCE:
ippsMul_32f(p_in_samples_1st_part, prev_window_table_long,
mdct_in, N_LONG/2);
ippsMul_32f(p_in_samples_2nd_part,
&window_table_long[N_LONG/2],
&mdct_in[N_LONG/2], N_LONG/2);
ippsMDCTFwd_32f(mdct_in, p_out_spectrum, p_data->p_mdct_fwd_long,
p_data->p_buffer_fwd);
break;
case LONG_START_SEQUENCE:
ippsMul_32f(p_in_samples_1st_part, prev_window_table_long,
mdct_in, N_LONG/2);
ippsCopy_32f(p_in_samples_2nd_part, &mdct_in[1024], 1472-1024);
ippsMul_32f(&p_in_samples_2nd_part[1472-1024],
&window_table_short[N_SHORT/2],
&mdct_in[1472], 1600-1472);
ippsZero_32f(&mdct_in[1600], (2048-1600));
ippsMDCTFwd_32f(mdct_in, p_out_spectrum,p_data->p_mdct_fwd_long,
p_data->p_buffer_fwd);
break;
case LONG_STOP_SEQUENCE:
ippsZero_32f(mdct_in, 448);
ippsMul_32f(&p_in_samples_1st_part[448], prev_window_table_short,
&mdct_in[448], 576-448);
ippsCopy_32f(&p_in_samples_1st_part[576], &mdct_in[576], 1024-576);
ippsMul_32f(p_in_samples_2nd_part,
&window_table_long[N_LONG/2],
&mdct_in[N_LONG/2], N_LONG/2);
ippsMDCTFwd_32f(mdct_in, p_out_spectrum, p_data->p_mdct_fwd_long,
p_data->p_buffer_fwd);
break;
case EIGHT_SHORT_SEQUENCE:
if (ltp) {
ippsMul_32f(&p_in_samples_1st_part[0],
prev_window_table_short, &mdct_in[0], N_SHORT/2);
ippsMul_32f(&p_in_samples_1st_part[128],
&window_table_short[N_SHORT/2], &mdct_in[N_SHORT/2], N_SHORT/2);
ippsMDCTFwd_32f(mdct_in,
p_out_spectrum,
p_data->p_mdct_fwd_short,
p_data->p_buffer_fwd);
} else {
/// W0
ippsMul_32f(&p_in_samples_1st_part[448],
prev_window_table_short, &mdct_in[0], N_SHORT/2);
ippsMul_32f(&p_in_samples_1st_part[448+128],
&window_table_short[N_SHORT/2], &mdct_in[N_SHORT/2], N_SHORT/2);
/// W1
ippsMul_32f(&p_in_samples_1st_part[576],
window_table_short, &mdct_in[N_SHORT], N_SHORT);
/// W2
ippsMul_32f(&p_in_samples_1st_part[704],
window_table_short, &mdct_in[2*N_SHORT], N_SHORT);
/// W3
ippsMul_32f(&p_in_samples_1st_part[832],
window_table_short, &mdct_in[3*N_SHORT], (3*N_SHORT)/4);
ippsMul_32f(p_in_samples_2nd_part,
&window_table_short[192], &mdct_in[3*N_SHORT+192], N_SHORT/4);
/// W4
ippsMul_32f(&p_in_samples_1st_part[960],
window_table_short, &mdct_in[4*N_SHORT], N_SHORT/4);
ippsMul_32f(p_in_samples_2nd_part,
&window_table_short[64], &mdct_in[4*N_SHORT+64], (3*N_SHORT)/4);
/// W5
ippsMul_32f(&p_in_samples_2nd_part[64],
window_table_short, &mdct_in[5*N_SHORT], N_SHORT);
/// W6
ippsMul_32f(&p_in_samples_2nd_part[64+1*128],
window_table_short, &mdct_in[6*N_SHORT], N_SHORT);
/// W7
ippsMul_32f(&p_in_samples_2nd_part[64+2*128],
window_table_short, &mdct_in[7*N_SHORT], N_SHORT);
for (i = 0; i < 8; i ++) {
ippsMDCTFwd_32f(&mdct_in[N_SHORT*i],
p_out_spectrum+i*(N_SHORT/2),
p_data->p_mdct_fwd_short,
p_data->p_buffer_fwd);
}
}
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -