30#if defined(TEMPLATE_RESAMPLE_DBL)
32# define RENAME(N) N ## _double
33# define FILTER_SHIFT 0
37# define FELEM2U double
39# define OUT(d, v) d = v
41#elif defined(TEMPLATE_RESAMPLE_FLT)
43# define RENAME(N) N ## _float
44# define FILTER_SHIFT 0
50# define OUT(d, v) d = v
52#elif defined(TEMPLATE_RESAMPLE_S32)
54# define RENAME(N) N ## _int32
55# define FILTER_SHIFT 30
58# define FELEM2 int64_t
59# define FELEM2U uint64_t
60# define FELEM_MAX INT32_MAX
61# define FELEM_MIN INT32_MIN
62# define FOFFSET (1<<(FILTER_SHIFT-1))
63# define OUT(d, v) (d) = av_clipl_int32((v)>>FILTER_SHIFT)
65#elif defined(TEMPLATE_RESAMPLE_S16)
67# define RENAME(N) N ## _int16
68# define FILTER_SHIFT 15
71# define FELEM2 int32_t
72# define FELEM2U uint32_t
73# define FELEML int64_t
74# define FELEM_MAX INT16_MAX
75# define FELEM_MIN INT16_MIN
76# define FOFFSET (1<<(FILTER_SHIFT-1))
77# define OUT(d, v) (d) = av_clip_int16((v)>>FILTER_SHIFT)
81static void RENAME(resample_one)(
void *dest,
const void *source,
85 const DELEM *
src = source;
88 for (dst_index = 0; dst_index < dst_size; dst_index++) {
89 dst[dst_index] =
src[index2 >> 32];
95 void *dest,
const void *source,
96 int n,
int update_ctx)
99 const DELEM *
src = source;
103 int sample_index = 0;
105 while (
index >=
c->phase_count) {
110 for (dst_index = 0; dst_index < n; dst_index++) {
111 FELEM *
filter = ((FELEM *)
c->filter_bank) +
c->filter_alloc *
index;
113 FELEM2
val = FOFFSET;
116 for (
i = 0;
i + 1 <
c->filter_length;
i+=2) {
118 val2 +=
src[sample_index +
i + 1] * (FELEM2)
filter[
i + 1];
128 frac +=
c->dst_incr_mod;
130 if (frac >=
c->src_incr) {
135 while (
index >=
c->phase_count) {
150 void *dest,
const void *source,
151 int n,
int update_ctx)
154 const DELEM *
src = source;
158 int sample_index = 0;
160 double inv_src_incr = 1.0 /
c->src_incr;
163 while (
index >=
c->phase_count) {
168 for (dst_index = 0; dst_index < n; dst_index++) {
169 FELEM *
filter = ((FELEM *)
c->filter_bank) +
c->filter_alloc *
index;
170 FELEM2U
val = FOFFSET, v2 = FOFFSET;
173 for (
i = 0;
i <
c->filter_length;
i++) {
175 v2 +=
src[sample_index +
i] * (FELEM2)
filter[
i +
c->filter_alloc];
178 val += (FELEM2)(v2 -
val) * (FELEML) frac /
c->src_incr;
180# if FILTER_SHIFT == 0
181 val += (FELEM2)(v2 -
val) * inv_src_incr * frac;
183 val += (FELEM2)(v2 -
val) /
c->src_incr * frac;
188 frac +=
c->dst_incr_mod;
190 if (frac >=
c->src_incr) {
195 while (
index >=
c->phase_count) {
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static double val(void *priv, double ch)
#define i(width, name, range_min, range_max)
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
static int resample_linear(AVFilterContext *ctx, void *arg, int job, int nb_jobs)