void idct_8(Int32 vec[]) { Int32 tmp0; Int32 tmp1; Int32 tmp2; Int32 tmp3; Int32 tmp4; Int32 tmp5; Int32 tmp6; Int32 tmp7; Int32 tmp8; tmp5 = fxp_mul32_by_16(vec[4] << 1, Qfmt15(0.70710678118655F)); tmp1 = vec[0] + tmp5; tmp5 = vec[0] - tmp5; tmp3 = fxp_mul32_by_16(vec[2] << 1, Qfmt15(0.54119610014620F)); /* (1/(2*cos(2*phi)));*/ tmp7 = fxp_mul32_Q29(vec[6], Qfmt(1.30656296487638F)); /* (1/(2*cos(6*phi)));*/ tmp0 = fxp_mul32_by_16((tmp3 - tmp7) << 1, Qfmt15(0.70710678118655F)); /* (1/(2*cos(2*phi))); */ tmp7 = (tmp3 + tmp7) + tmp0; vec[0] = tmp1 + tmp7; tmp2 = fxp_mul32_by_16(vec[1] << 1, Qfmt15(0.50979557910416F)); /* (1/(2*cos( phi)));*/ vec[1] = tmp5 + tmp0; vec[2] = tmp5 - tmp0; tmp4 = fxp_mul32_by_16(vec[3] << 1, Qfmt15(0.60134488693505F)); /* (1/(2*cos(3*phi)));*/ vec[3] = tmp1 - tmp7; tmp6 = fxp_mul32_by_16(vec[5] << 1, Qfmt15(0.89997622313642F)); /* (1/(2*cos(5*phi)));*/ tmp8 = fxp_mul32_Q29(vec[7], Qfmt(2.56291544774151F)); /* (1/(2*cos(7*phi)));*/ tmp7 = tmp2 + tmp8; tmp5 = fxp_mul32_by_16((tmp2 - tmp8) << 1, Qfmt15(0.54119610014620F)); tmp8 = tmp4 + tmp6; tmp6 = fxp_mul32_Q29((tmp4 - tmp6), Qfmt(1.30656296487638F)); tmp0 = tmp7 + tmp8; tmp2 = fxp_mul32_by_16((tmp7 - tmp8) << 1, Qfmt15(0.70710678118655F)); tmp3 = fxp_mul32_by_16((tmp5 - tmp6) << 1, Qfmt15(0.70710678118655F)); tmp1 = (tmp5 + tmp6) + tmp3; tmp5 = tmp0 + tmp1; tmp6 = tmp1 + tmp2; tmp7 = tmp2 + tmp3; vec[7] = vec[0] - tmp5; vec[0] += tmp5; vec[6] = vec[1] - tmp6; vec[1] += tmp6; vec[5] = vec[2] - tmp7; vec[2] += tmp7; vec[4] = vec[3] - tmp3; vec[3] += tmp3; }
void pvmp3_mdct_6(int32 vec[], int32 *history) { int32 i; int32 tmp; int32 tmp1; int32 tmp2; int32 *pt_vec = vec; int32 *pt_vec_o = vec; const int32 *pt_cos = cosTerms_1_ov_cos_phi_N6; for (i = 2; i != 0; i--) { tmp = *(pt_vec++); tmp1 = *(pt_vec++); tmp2 = *(pt_vec++); *(pt_vec_o++) = fxp_mul32_Q29(tmp, *(pt_cos++)); *(pt_vec_o++) = fxp_mul32_Q29(tmp1, *(pt_cos++)); *(pt_vec_o++) = fxp_mul32_Q29(tmp2, *(pt_cos++)); } pvmp3_dct_6(vec); // Even terms tmp = -(vec[0] + vec[1]); history[3] = tmp; history[2] = tmp; tmp = -(vec[1] + vec[2]); vec[0] = vec[3] + vec[4]; vec[1] = vec[4] + vec[5]; history[4] = tmp; history[1] = tmp; tmp = -(vec[2] + vec[3]); vec[4] = -vec[1]; history[5] = tmp; history[0] = tmp; vec[2] = vec[5]; vec[3] = -vec[5]; vec[5] = -vec[0]; }
void dst_32(Int32 vec[], Int32 scratch_mem[]) /* scratch_mem size 32 */ { Int32 *temp_even = scratch_mem; Int32 i; const Int32 *pt_cos = &CosTable_16[13]; Int32 tmp0 = vec[31] >> 1; Int32 tmp1, tmp2; Int32 *pt_even = temp_even; Int32 *pt_odd = vec; Int32 *pt_vec = vec; Int32 *pt_vecN_1 = vec; Int32 tmp3; tmp1 = 0; for (i = 5; i != 0; i--) { *(pt_even++) = *(pt_vec++); tmp2 = *(pt_vec++); *(pt_even++) = *(pt_vec++); tmp3 = *(pt_vec++); *(pt_even++) = *(pt_vec++); *(pt_odd++) = tmp2 + tmp1; tmp1 = *(pt_vec++); *(pt_odd++) = tmp3 + tmp2; *(pt_odd++) = tmp1 + tmp3; } *(pt_even) = *(pt_vec++); *(pt_odd) = *(pt_vec) + tmp1; dst_16(temp_even, &scratch_mem[16]); dst_16(vec, &scratch_mem[24]); pt_vecN_1 = &vec[16]; tmp1 = temp_even[15]; tmp3 = fxp_mul32_Q31((vec[15] - tmp0) << 3, Qfmt31(0.63687550772175F)) << 2; tmp2 = temp_even[14]; *(pt_vecN_1++) = tmp3 - tmp1; vec[15] = tmp3 + tmp1; tmp1 = temp_even[13]; tmp3 = fxp_mul32_Q31((vec[14] + tmp0) << 3, Qfmt31(0.85190210461718F)); *(pt_vecN_1++) = tmp3 - tmp2; vec[14] = tmp3 + tmp2; pt_even = &temp_even[12]; pt_vec = &vec[13]; for (i = 2; i != 0; i--) { tmp3 = fxp_mul32_Q29((*(pt_vec) - tmp0), *(pt_cos--)); tmp2 = *(pt_even--); *(pt_vec--) = tmp3 + tmp1; *(pt_vecN_1++) = tmp3 - tmp1; tmp3 = fxp_mul32_Q29((*(pt_vec) + tmp0), *(pt_cos--)); tmp1 = *(pt_even--); *(pt_vec--) = tmp3 + tmp2; *(pt_vecN_1++) = tmp3 - tmp2; } for (i = 5; i != 0; i--) { tmp3 = fxp_mul32_Q31((*(pt_vec) - tmp0), *(pt_cos--)) << 1; tmp2 = *(pt_even--); *(pt_vec--) = tmp3 + tmp1; *(pt_vecN_1++) = tmp3 - tmp1; tmp3 = fxp_mul32_Q31((*(pt_vec) + tmp0), *(pt_cos--)) << 1; tmp1 = *(pt_even--); *(pt_vec--) = tmp3 + tmp2; *(pt_vecN_1++) = tmp3 - tmp2; } }
void idct_32(Int32 vec[], Int32 scratch_mem[]) /* scratch_mem size 32 */ { Int32 *temp_even = scratch_mem; Int32 i; const Int32 *pt_cos = CosTable_16; Int32 tmp1, tmp2; Int32 *pt_even = temp_even; Int32 *pt_odd = vec; Int32 *pt_vec = vec; Int32 *pt_vecN_1; Int32 tmp3; *(pt_even++) = *(pt_vec++); tmp1 = *(pt_vec++); tmp2 = 0; for (i = 7; i != 0; i--) { *(pt_odd++) = tmp2 + tmp1; *(pt_even++) = *(pt_vec++); tmp2 = *(pt_vec++); *(pt_even++) = *(pt_vec++); *(pt_odd++) = tmp2 + tmp1; tmp1 = *(pt_vec++); } *(pt_odd++) = tmp2 + tmp1; *(pt_even++) = *(pt_vec++); tmp2 = *(pt_vec++); *(pt_odd++) = tmp2 + tmp1; idct_16(temp_even, &scratch_mem[16]); idct_16(vec, &scratch_mem[24]); pt_cos = &CosTable_16[13]; pt_vec = &vec[15]; pt_even = &temp_even[15]; pt_vecN_1 = &vec[16]; tmp1 = *(pt_even--); tmp3 = fxp_mul32_Q31(*(pt_vec) << 3, Qfmt3(0.63687550772175F)) << 2; tmp2 = *(pt_even--); *(pt_vecN_1++) = tmp1 - tmp3; *(pt_vec--) = tmp1 + tmp3; tmp3 = fxp_mul32_Q31(*(pt_vec) << 3, Qfmt3(0.85190210461718F)); tmp1 = *(pt_even--); *(pt_vecN_1++) = tmp2 - tmp3; *(pt_vec--) = tmp2 + tmp3; for (i = 2; i != 0; i--) { tmp3 = fxp_mul32_Q29(*(pt_vec), *(pt_cos--)); tmp2 = *(pt_even--); *(pt_vecN_1++) = tmp1 - tmp3; *(pt_vec--) = tmp1 + tmp3; tmp3 = fxp_mul32_Q29(*(pt_vec), *(pt_cos--)); tmp1 = *(pt_even--); *(pt_vecN_1++) = tmp2 - tmp3; *(pt_vec--) = tmp2 + tmp3; } for (i = 5; i != 0; i--) { tmp3 = fxp_mul32_Q31(*(pt_vec) << 1, *(pt_cos--)); tmp2 = *(pt_even--); *(pt_vecN_1++) = tmp1 - tmp3; *(pt_vec--) = tmp1 + tmp3; tmp3 = fxp_mul32_Q31(*(pt_vec) << 1, *(pt_cos--)); tmp1 = *(pt_even--); *(pt_vecN_1++) = tmp2 - tmp3; *(pt_vec--) = tmp2 + tmp3; } }
} else { j = 0; } } tmp = InvFiltFactors[j]; if (tmp < BwVectorOld[i]) { tmp = ((tmp << 1) + tmp + BwVectorOld[i]) >> 2; } else { tmp = fxp_mul32_Q29(Qfmt(0.90625f), tmp); tmp = fxp_mac32_Q29(Qfmt(0.09375f), BwVectorOld[i], tmp); } if (tmp < Qfmt(0.015625F)) { tmp = 0; } if (tmp >= Qfmt(0.99609375f)) { tmp = Qfmt(0.99609375f); } BwVector[i] = tmp; }
void eight_ch_filtering(const Int32 *pQmfReal, const Int32 *pQmfImag, Int32 *mHybridReal, Int32 *mHybridImag, Int32 scratch_mem[]) { Int32 real; Int32 imag; Int32 tmp1; Int32 tmp2; real = fxp_mul32_Q29(Q29_fmt(-0.06989827306334f), pQmfReal[ 4]); real = fxp_mac32_Q31(real, Qfmt31(0.01055120626280f), pQmfReal[12]); imag = fxp_mul32_Q29(Q29_fmt(-0.06989827306334f), pQmfImag[ 4]); imag = fxp_mac32_Q31(imag, Qfmt31(0.01055120626280f), pQmfImag[12]); mHybridReal[2] = (imag - real); mHybridImag[2] = -(imag + real); real = fxp_mul32_Q29(Q29_fmt(-0.07266113929591f), pQmfReal[ 3]); real = fxp_mac32_Q31(real, Qfmt31(0.04540841899650f), pQmfReal[11]); imag = fxp_mul32_Q29(Q29_fmt(-0.07266113929591f), pQmfImag[ 3]); imag = fxp_mac32_Q31(imag, Qfmt31(0.04540841899650f), pQmfImag[11]); tmp1 = fxp_mul32_Q29(Q29_fmt(-0.38268343236509f), real); mHybridReal[3] = fxp_mac32_Q29(Q29_fmt(0.92387953251129f), imag, tmp1); tmp2 = fxp_mul32_Q29(Q29_fmt(-0.92387953251129f), real); mHybridImag[3] = fxp_mac32_Q29(Q29_fmt(-0.38268343236509f), imag, tmp2); mHybridImag[4] = fxp_mul32_Q31(Qfmt31(0.09093731860946f), (pQmfReal[ 2] - pQmfReal[10])); mHybridReal[4] = fxp_mul32_Q31(Qfmt31(0.09093731860946f), (pQmfImag[10] - pQmfImag[ 2])); real = fxp_mul32_Q29(Q29_fmt(-0.02270420949825f), pQmfReal[ 1]); real = fxp_mac32_Q31(real, Qfmt31(0.14532227859182f), pQmfReal[ 9]); imag = fxp_mul32_Q29(Q29_fmt(-0.02270420949825f), pQmfImag[ 1]); imag = fxp_mac32_Q31(imag, Qfmt31(0.14532227859182f), pQmfImag[ 9]); tmp1 = fxp_mul32_Q29(Q29_fmt(0.92387953251129f), imag); mHybridReal[5] = fxp_mac32_Q31(tmp1, Qfmt31(0.76536686473018f), real); tmp2 = fxp_mul32_Q29(Q29_fmt(-0.92387953251129f), real); mHybridImag[5] = fxp_mac32_Q31(tmp2, Qfmt31(0.76536686473018f), imag); real = fxp_mul32_Q29(Q29_fmt(-0.00527560313140f), pQmfReal[ 0]); real = fxp_mac32_Q31(real, Qfmt31(0.13979654612668f), pQmfReal[ 8]); imag = fxp_mul32_Q29(Q29_fmt(-0.00527560313140f), pQmfImag[ 0]); imag = fxp_mac32_Q31(imag, Qfmt31(0.13979654612668f), pQmfImag[ 8]); mHybridReal[6] = (imag + real); mHybridImag[6] = (imag - real); tmp1 = fxp_mul32_Q31(Qfmt31(0.21791935610828f), pQmfReal[ 7]); mHybridReal[7] = fxp_mac32_Q31(tmp1, Qfmt31(0.09026515280366f), pQmfImag[ 7]); tmp2 = fxp_mul32_Q29(Q29_fmt(-0.04513257640183f), pQmfReal[ 7]); mHybridImag[7] = fxp_mac32_Q31(tmp2, Qfmt31(0.21791935610828f), pQmfImag[ 7]); mHybridReal[0] = pQmfReal[HYBRID_FILTER_DELAY] >> 3; mHybridImag[0] = pQmfImag[HYBRID_FILTER_DELAY] >> 3; tmp1 = fxp_mul32_Q29(Q29_fmt(-0.04513257640183f), pQmfImag[ 5]); mHybridReal[1] = fxp_mac32_Q31(tmp1, Qfmt31(0.21791935610828f), pQmfReal[ 5]); tmp2 = fxp_mul32_Q31(Qfmt31(0.21791935610828f), pQmfImag[ 5]); mHybridImag[1] = fxp_mac32_Q31(tmp2, Qfmt31(0.09026515280366f), pQmfReal[ 5]); /* * 8*ifft */ ps_fft_rx8(mHybridReal, mHybridImag, scratch_mem); }