| @@ -551,7 +551,7 @@ static void reverse_matrixing(float *su1, float *su2, int *prev_code, | |||
| for (i = 0, band = 0; band < 4 * 256; band += 256, i++) { | |||
| int s1 = prev_code[i]; | |||
| int s2 = curr_code[i]; | |||
| nsample = 0; | |||
| nsample = band; | |||
| if (s1 != s2) { | |||
| /* Selector value changed, interpolation needed. */ | |||
| @@ -561,41 +561,41 @@ static void reverse_matrixing(float *su1, float *su2, int *prev_code, | |||
| mc2_r = matrix_coeffs[s2 * 2 + 1]; | |||
| /* Interpolation is done over the first eight samples. */ | |||
| for (; nsample < 8; nsample++) { | |||
| float c1 = su1[band + nsample]; | |||
| float c2 = su2[band + nsample]; | |||
| c2 = c1 * INTERPOLATE(mc1_l, mc2_l, nsample) + | |||
| c2 * INTERPOLATE(mc1_r, mc2_r, nsample); | |||
| su1[band + nsample] = c2; | |||
| su2[band + nsample] = c1 * 2.0 - c2; | |||
| for (; nsample < band + 8; nsample++) { | |||
| float c1 = su1[nsample]; | |||
| float c2 = su2[nsample]; | |||
| c2 = c1 * INTERPOLATE(mc1_l, mc2_l, nsample - band) + | |||
| c2 * INTERPOLATE(mc1_r, mc2_r, nsample - band); | |||
| su1[nsample] = c2; | |||
| su2[nsample] = c1 * 2.0 - c2; | |||
| } | |||
| } | |||
| /* Apply the matrix without interpolation. */ | |||
| switch (s2) { | |||
| case 0: /* M/S decoding */ | |||
| for (; nsample < 256; nsample++) { | |||
| float c1 = su1[band + nsample]; | |||
| float c2 = su2[band + nsample]; | |||
| su1[band + nsample] = c2 * 2.0; | |||
| su2[band + nsample] = (c1 - c2) * 2.0; | |||
| for (; nsample < band + 256; nsample++) { | |||
| float c1 = su1[nsample]; | |||
| float c2 = su2[nsample]; | |||
| su1[nsample] = c2 * 2.0; | |||
| su2[nsample] = (c1 - c2) * 2.0; | |||
| } | |||
| break; | |||
| case 1: | |||
| for (; nsample < 256; nsample++) { | |||
| float c1 = su1[band + nsample]; | |||
| float c2 = su2[band + nsample]; | |||
| su1[band + nsample] = (c1 + c2) * 2.0; | |||
| su2[band + nsample] = c2 * -2.0; | |||
| for (; nsample < band + 256; nsample++) { | |||
| float c1 = su1[nsample]; | |||
| float c2 = su2[nsample]; | |||
| su1[nsample] = (c1 + c2) * 2.0; | |||
| su2[nsample] = c2 * -2.0; | |||
| } | |||
| break; | |||
| case 2: | |||
| case 3: | |||
| for (; nsample < 256; nsample++) { | |||
| float c1 = su1[band + nsample]; | |||
| float c2 = su2[band + nsample]; | |||
| su1[band + nsample] = c1 + c2; | |||
| su2[band + nsample] = c1 - c2; | |||
| for (; nsample < band + 256; nsample++) { | |||
| float c1 = su1[nsample]; | |||
| float c2 = su2[nsample]; | |||
| su1[nsample] = c1 + c2; | |||
| su2[nsample] = c1 - c2; | |||
| } | |||
| break; | |||
| default: | |||
| @@ -627,14 +627,14 @@ static void channel_weighting(float *su1, float *su2, int *p3) | |||
| get_channel_weights(p3[1], p3[0], w[0]); | |||
| get_channel_weights(p3[3], p3[2], w[1]); | |||
| for (band = 1; band < 4; band++) { | |||
| for (nsample = 0; nsample < 8; nsample++) { | |||
| su1[band * 256 + nsample] *= INTERPOLATE(w[0][0], w[0][1], nsample); | |||
| su2[band * 256 + nsample] *= INTERPOLATE(w[1][0], w[1][1], nsample); | |||
| for (band = 256; band < 4 * 256; band += 256) { | |||
| for (nsample = band; nsample < band + 8; nsample++) { | |||
| su1[nsample] *= INTERPOLATE(w[0][0], w[0][1], nsample - band); | |||
| su2[nsample] *= INTERPOLATE(w[1][0], w[1][1], nsample - band); | |||
| } | |||
| for(; nsample < 256; nsample++) { | |||
| su1[band * 256 + nsample] *= w[1][0]; | |||
| su2[band * 256 + nsample] *= w[1][1]; | |||
| for(; nsample < band + 256; nsample++) { | |||
| su1[nsample] *= w[1][0]; | |||
| su2[nsample] *= w[1][1]; | |||
| } | |||
| } | |||
| } | |||