📄 mp3dec_layer3_int.c
字号:
{ 17331497, 57555973, 108133460, 174813955, 536870935, 412195909, 666376477, 1251956820, 1039402258, -1134308520, -1631581894, -1046001545, -791820975, -1296121091, -554439031, -487758516, -437181022, -396956545, -364090208, -338355488, -318280992, -302629280, -581104896, -281462400, -272600668, -250142024, -213167061, -163568839, -103612219, -35888559, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 161882836, 787012958, 936585517, -1220582009, -1900017357, -1229622214, -892684672, -1402911360, -581345472, -499601056, -440953440, -397334720, -363743675, -335460810, -310736462, -288622674, -536870920, -249660198, -231892947, -214801826, -198099932, -181525144, -164823238, -147732101, -129964873, -222379216, -91002380, -68888615, -44164253, -15881392 }};static const Ipp32s _pIMDCTWinShort[]={ 280302863, 821806413, 1307305214, 1703713325, 1984016189, 2129111628, 2129111628, 1984016189, 1703713325, 1307305214, 821806413, 280302863};/*/////////////////////////////////////////////////////////////////////////////// Name:// _sIMDCT_36_32s//// Description:// Performs 36 points IMDCT and windowing for long block.//// Input Arguments:// pSrc - pointer to the input buffer which is the// output of alias reduction.// blockType - indication of the window type:// 0: normal window;// 1: start block;// 2: short block;// 3: stop block.//// Output Arguments:// pDst - pointer to the output buffer of IMDCT for long block.//// Returns:// ippStsNoErr - no error.// ippStsBadArgErr - bad arguments.//// Notes:// Input 18 data are in Q = IPP_MP3_REQUANT_Q.// output 36 data are in Q = IPP_MP3_HYBRID_Q.// about 460 cycle(evaluate).*/static void _sIMDCT_36_32s(Ipp32s* pSrc, Ipp32s* pDst, int blockType){ int i; static const Ipp32s c9_50 = 2017974528; /* Q30, max 1.9 */ static const Ipp32s c9_51 = 1645067904; static const Ipp32s c9_52 = 372906624; static const Ipp32s c9_40 = 2114858496; static const Ipp32s c9_41 = 1380375936; static const Ipp32s c9_42 = 734482688; static const Ipp32s c9_43 = 1859775360; static const Ipp32s const_0 = 759250112; Ipp64s pSrc64[4]; /* input aliasing for 36 point IDCT */ /* stage 1 */ { Ipp32s tmp0, tmp2; Ipp32s t0, t1, t2, t3; t0 = pSrc[0]; t1 = pSrc[1]; pDst[0] = t0; tmp0 = t0 + t1; pDst[1] = tmp0; for(i = 0; i <= 12; i += 4) { t2 = pSrc[2+i]; t0 = pSrc[4+i]; t3 = pSrc[3+i]; pDst[2+i] = t1 + t2; t1 = pSrc[5+i]; tmp2 = t2 + t3; pDst[3+i] = tmp0 + tmp2; pDst[4+i] = t3 + t0; tmp0 = t0 + t1; pDst[5+i] = tmp2 + tmp0; } /* about 60 cycle */ } { /************************************************************************** // Fast 9 Point Inverse Discrete Cosine Transform // By Francois-Raymond Boyer // mailto:boyerf@iro.umontreal.ca // http://www.iro.umontreal.ca/~boyerf // The code has been optimized for Intel processors // (takes a lot of time to convert float to and from iternal // FPU representation) // It is a simple "factorization" of the IDCT matrix. // ------------------------------------------------------------------------ // Then the code was optimized by Vadim Pisarevsky // (two additions saved using <s> variable) // ***************************************************************************/ { /* stage 2, right shift 2 bits */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -