48
54
#define DBL_TO_FELEM(d, v) d = av_clip_int16(lrint(v * (1 << 15)))
51
static void SET_TYPE(resample_one)(ResampleContext *c, int no_filter,
57
static void SET_TYPE(resample_nearest)(void *dst0, int dst_index, const void *src0, unsigned int index)
60
const FELEM *src = src0;
61
dst[dst_index] = src[index];
64
static void SET_TYPE(resample_linear)(ResampleContext *c, void *dst0, int dst_index,
65
const void *src0, unsigned int index, int frac)
68
const FELEM *src = src0;
70
unsigned int sample_index = index >> c->phase_shift;
72
FELEM *filter = ((FELEM *)c->filter_bank) +
73
c->filter_length * (index & c->phase_mask);
76
for (i = 0; i < c->filter_length; i++) {
77
val += src[sample_index + i] * (FELEM2)filter[i];
78
v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_length];
80
val += (v2 - val) * (FELEML)frac / c->src_incr;
82
OUT(dst[dst_index], val);
85
static void SET_TYPE(resample_one)(ResampleContext *c,
52
86
void *dst0, int dst_index, const void *src0,
53
int src_size, int index, int frac)
87
unsigned int index, int frac)
56
90
const FELEM *src = src0;
59
dst[dst_index] = src[index];
62
int sample_index = index >> c->phase_shift;
64
FELEM *filter = ((FELEM *)c->filter_bank) +
65
c->filter_length * (index & c->phase_mask);
67
if (sample_index < 0) {
68
for (i = 0; i < c->filter_length; i++)
69
val += src[FFABS(sample_index + i) % src_size] *
71
} else if (c->linear) {
73
for (i = 0; i < c->filter_length; i++) {
74
val += src[abs(sample_index + i)] * (FELEM2)filter[i];
75
v2 += src[abs(sample_index + i)] * (FELEM2)filter[i + c->filter_length];
77
val += (v2 - val) * (FELEML)frac / c->src_incr;
79
for (i = 0; i < c->filter_length; i++)
80
val += src[sample_index + i] * (FELEM2)filter[i];
83
OUT(dst[dst_index], val);
92
unsigned int sample_index = index >> c->phase_shift;
94
FELEM *filter = ((FELEM *)c->filter_bank) +
95
c->filter_length * (index & c->phase_mask);
97
for (i = 0; i < c->filter_length; i++)
98
val += src[sample_index + i] * (FELEM2)filter[i];
100
OUT(dst[dst_index], val);
87
103
static void SET_TYPE(set_filter)(void *filter0, double *tab, int phase,