|
|
|
@ -67,30 +67,29 @@ static void SET_TYPE(resample_one)(ResampleContext *c, |
|
|
|
|
{ |
|
|
|
|
FELEM *dst = dst0; |
|
|
|
|
const FELEM *src = src0; |
|
|
|
|
int i; |
|
|
|
|
int sample_index = index >> c->phase_shift; |
|
|
|
|
FELEM2 val = 0; |
|
|
|
|
FELEM *filter = ((FELEM *)c->filter_bank) + |
|
|
|
|
c->filter_length * (index & c->phase_mask); |
|
|
|
|
|
|
|
|
|
int i; |
|
|
|
|
int sample_index = index >> c->phase_shift; |
|
|
|
|
FELEM2 val = 0; |
|
|
|
|
FELEM *filter = ((FELEM *)c->filter_bank) + |
|
|
|
|
c->filter_length * (index & c->phase_mask); |
|
|
|
|
|
|
|
|
|
if (sample_index < 0) { |
|
|
|
|
for (i = 0; i < c->filter_length; i++) |
|
|
|
|
val += src[FFABS(sample_index + i) % src_size] * |
|
|
|
|
(FELEM2)filter[i]; |
|
|
|
|
} else if (c->linear) { |
|
|
|
|
FELEM2 v2 = 0; |
|
|
|
|
for (i = 0; i < c->filter_length; i++) { |
|
|
|
|
val += src[abs(sample_index + i)] * (FELEM2)filter[i]; |
|
|
|
|
v2 += src[abs(sample_index + i)] * (FELEM2)filter[i + c->filter_length]; |
|
|
|
|
} |
|
|
|
|
val += (v2 - val) * (FELEML)frac / c->src_incr; |
|
|
|
|
} else { |
|
|
|
|
for (i = 0; i < c->filter_length; i++) |
|
|
|
|
val += src[sample_index + i] * (FELEM2)filter[i]; |
|
|
|
|
if (sample_index < 0) { |
|
|
|
|
for (i = 0; i < c->filter_length; i++) |
|
|
|
|
val += src[FFABS(sample_index + i) % src_size] * |
|
|
|
|
(FELEM2)filter[i]; |
|
|
|
|
} else if (c->linear) { |
|
|
|
|
FELEM2 v2 = 0; |
|
|
|
|
for (i = 0; i < c->filter_length; i++) { |
|
|
|
|
val += src[abs(sample_index + i)] * (FELEM2)filter[i]; |
|
|
|
|
v2 += src[abs(sample_index + i)] * (FELEM2)filter[i + c->filter_length]; |
|
|
|
|
} |
|
|
|
|
val += (v2 - val) * (FELEML)frac / c->src_incr; |
|
|
|
|
} else { |
|
|
|
|
for (i = 0; i < c->filter_length; i++) |
|
|
|
|
val += src[sample_index + i] * (FELEM2)filter[i]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
OUT(dst[dst_index], val); |
|
|
|
|
OUT(dst[dst_index], val); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void SET_TYPE(set_filter)(void *filter0, double *tab, int phase, |
|
|
|
|