NAME: III_imdct_l() DESCRIPTION: perform IMDCT and windowing for long blocks */
| 2124 | DESCRIPTION: perform IMDCT and windowing for long blocks |
| 2125 | */ |
| 2126 | static |
| 2127 | void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36], |
| 2128 | unsigned int block_type) |
| 2129 | { |
| 2130 | unsigned int i; |
| 2131 | stack(__FUNCTION__, __FILE__, __LINE__); |
| 2132 | |
| 2133 | /* IMDCT */ |
| 2134 | |
| 2135 | imdct36(X, z); |
| 2136 | |
| 2137 | /* windowing */ |
| 2138 | |
| 2139 | switch (block_type) { |
| 2140 | case 0: /* normal window */ |
| 2141 | # if defined(ASO_INTERLEAVE1) |
| 2142 | { |
| 2143 | register mad_fixed_t tmp1, tmp2; |
| 2144 | |
| 2145 | tmp1 = window_l[0]; |
| 2146 | tmp2 = window_l[1]; |
| 2147 | |
| 2148 | for (i = 0; i < 34; i += 2) { |
| 2149 | z[i + 0] = mad_f_mul(z[i + 0], tmp1); |
| 2150 | tmp1 = window_l[i + 2]; |
| 2151 | z[i + 1] = mad_f_mul(z[i + 1], tmp2); |
| 2152 | tmp2 = window_l[i + 3]; |
| 2153 | } |
| 2154 | |
| 2155 | z[34] = mad_f_mul(z[34], tmp1); |
| 2156 | z[35] = mad_f_mul(z[35], tmp2); |
| 2157 | } |
| 2158 | # elif defined(ASO_INTERLEAVE2) |
| 2159 | { |
| 2160 | register mad_fixed_t tmp1, tmp2; |
| 2161 | |
| 2162 | tmp1 = z[0]; |
| 2163 | tmp2 = window_l[0]; |
| 2164 | |
| 2165 | for (i = 0; i < 35; ++i) { |
| 2166 | z[i] = mad_f_mul(tmp1, tmp2); |
| 2167 | tmp1 = z[i + 1]; |
| 2168 | tmp2 = window_l[i + 1]; |
| 2169 | } |
| 2170 | |
| 2171 | z[35] = mad_f_mul(tmp1, tmp2); |
| 2172 | } |
| 2173 | # elif 1 |
| 2174 | for (i = 0; i < 36; i += 4) { |
| 2175 | z[i + 0] = mad_f_mul(z[i + 0], window_l(i + 0)); |
| 2176 | z[i + 1] = mad_f_mul(z[i + 1], window_l(i + 1)); |
| 2177 | z[i + 2] = mad_f_mul(z[i + 2], window_l(i + 2)); |
| 2178 | z[i + 3] = mad_f_mul(z[i + 3], window_l(i + 3)); |
| 2179 | } |
| 2180 | # else |
| 2181 | for (i = 0; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]); |
| 2182 | # endif |
| 2183 | break; |
no test coverage detected