MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / III_imdct_l

Function III_imdct_l

modules/data/mp3/libmad/layer3.c:2126–2207  ·  view source on GitHub ↗

NAME: III_imdct_l() DESCRIPTION: perform IMDCT and windowing for long blocks */

Source from the content-addressed store, hash-verified

2124 DESCRIPTION: perform IMDCT and windowing for long blocks
2125*/
2126static
2127void 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;

Callers 1

III_decodeFunction · 0.85

Calls 3

imdct36Function · 0.85
window_lFunction · 0.85
window_sFunction · 0.85

Tested by

no test coverage detected