X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=wmadec_filter.c;h=5151622e223d213550e90ce96c634ffade5840f7;hb=5b273f3a68f69819f3607044bfa7ca0ebe2cb135;hp=fdf312b981abe0fee30e92856a58dd87fee90250;hpb=509972da450f90a330fe290b62cd3e3d02de6e67;p=paraslash.git diff --git a/wmadec_filter.c b/wmadec_filter.c index fdf312b9..5151622e 100644 --- a/wmadec_filter.c +++ b/wmadec_filter.c @@ -629,18 +629,21 @@ static int decode_exp_vlc(struct private_wmadec_data *s, int ch) return 0; } -static void vector_fmul_add(float *dst, const float *src0, const float *src1, - const float *src2, int src3, int len, int step) +/* compute src0 * src1 + src2 */ +static inline void vector_mult_add(float *dst, const float *src0, const float *src1, + const float *src2, int len) { int i; + for (i = 0; i < len; i++) - dst[i * step] = src0[i] * src1[i] + src2[i] + src3; + dst[i] = src0[i] * src1[i] + src2[i]; } -static void vector_fmul_reverse_c(float *dst, const float *src0, +static inline void vector_mult_reverse(float *dst, const float *src0, const float *src1, int len) { int i; + src1 += len - 1; for (i = 0; i < len; i++) dst[i] = src0[i] * src1[-i]; @@ -661,42 +664,30 @@ static void wma_window(struct private_wmadec_data *s, float *out) if (s->block_len_bits <= s->prev_block_len_bits) { block_len = s->block_len; bsize = s->frame_len_bits - s->block_len_bits; - - vector_fmul_add(out, in, s->windows[bsize], - out, 0, block_len, 1); - + vector_mult_add(out, in, s->windows[bsize], out, block_len); } else { block_len = 1 << s->prev_block_len_bits; n = (s->block_len - block_len) / 2; bsize = s->frame_len_bits - s->prev_block_len_bits; - - vector_fmul_add(out + n, in + n, s->windows[bsize], - out + n, 0, block_len, 1); - + vector_mult_add(out + n, in + n, s->windows[bsize], out + n, + block_len); memcpy(out + n + block_len, in + n + block_len, - n * sizeof(float)); + n * sizeof(float)); } - out += s->block_len; in += s->block_len; - /* right part */ if (s->block_len_bits <= s->next_block_len_bits) { block_len = s->block_len; bsize = s->frame_len_bits - s->block_len_bits; - - vector_fmul_reverse_c(out, in, s->windows[bsize], block_len); - + vector_mult_reverse(out, in, s->windows[bsize], block_len); } else { block_len = 1 << s->next_block_len_bits; n = (s->block_len - block_len) / 2; bsize = s->frame_len_bits - s->next_block_len_bits; - memcpy(out, in, n * sizeof(float)); - - vector_fmul_reverse_c(out + n, in + n, s->windows[bsize], - block_len); - + vector_mult_reverse(out + n, in + n, s->windows[bsize], + block_len); memset(out + n + block_len, 0, n * sizeof(float)); } }