audioconvert: add simple and faster resampler

Add a sinc based resampler that, unlike speex, avoids memcpy and
works directly on the source data. It also allows for ssse3
optimizations and aligned loads. It will later switch to table
interpolation when doing variable rate.
This commit is contained in:
Wim Taymans 2019-03-26 12:58:26 +01:00
parent f29d14fcc8
commit 9c8913437b
10 changed files with 720 additions and 7 deletions

View file

@ -30,12 +30,13 @@ struct resample {
uint32_t i_rate;
uint32_t o_rate;
void (*free) (struct resample *r);
void (*update_rate) (struct resample *r, double rate);
void (*process) (struct resample *r,
const void * SPA_RESTRICT src[], uint32_t *in_len,
void * SPA_RESTRICT dst[], uint32_t *out_len);
void (*reset) (struct resample *r);
void (*free) (struct resample *r);
void (*update_rate) (struct resample *r, double rate);
void (*process) (struct resample *r,
const void * SPA_RESTRICT src[], uint32_t *in_len,
void * SPA_RESTRICT dst[], uint32_t *out_len);
void (*reset) (struct resample *r);
uint32_t (*delay) (struct resample *r);
void *data;
};
@ -43,3 +44,4 @@ struct resample {
#define resample_update_rate(r,...) (r)->update_rate(r,__VA_ARGS__)
#define resample_process(r,...) (r)->process(r,__VA_ARGS__)
#define resample_reset(r) (r)->reset(r)
#define resample_delay(r) (r)->delay(r)