resampler: Split the resampler implementations into separate files

Rebased by Peter Meerwald.

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
Signed-off-by: poljar (Damir Jelić) <poljarinho@gmail.com>
This commit is contained in:
poljar (Damir Jelić) 2014-08-04 14:40:12 +02:00 committed by Tanu Kaskinen
parent 64d17a6b0a
commit 72103e1e33
8 changed files with 748 additions and 604 deletions

View file

@ -26,10 +26,14 @@
#include <pulse/channelmap.h>
#include <pulsecore/memblock.h>
#include <pulsecore/memchunk.h>
#include <pulsecore/sconv.h>
#include <pulsecore/remap.h>
typedef struct pa_resampler pa_resampler;
typedef struct pa_resampler_impl pa_resampler_impl;
typedef struct pa_resampler pa_resampler;
struct pa_resampler_impl {
void (*free)(pa_resampler *r);
void (*update_rates)(pa_resampler *r);
@ -67,6 +71,45 @@ typedef enum pa_resample_flags {
PA_RESAMPLER_NO_LFE = 0x0008U
} pa_resample_flags_t;
struct pa_resampler {
pa_resample_method_t method;
pa_resample_flags_t flags;
pa_sample_spec i_ss, o_ss;
pa_channel_map i_cm, o_cm;
size_t i_fz, o_fz, w_fz, w_sz;
pa_mempool *mempool;
pa_memchunk to_work_format_buf;
pa_memchunk remap_buf;
pa_memchunk resample_buf;
pa_memchunk from_work_format_buf;
size_t to_work_format_buf_size;
size_t remap_buf_size;
size_t resample_buf_size;
size_t from_work_format_buf_size;
/* points to buffer before resampling stage, remap or to_work */
pa_memchunk *leftover_buf;
size_t *leftover_buf_size;
/* have_leftover points to leftover_in_remap or leftover_in_to_work */
bool *have_leftover;
bool leftover_in_remap;
bool leftover_in_to_work;
pa_sample_format_t work_format;
uint8_t work_channels;
pa_convert_func_t to_work_format_func;
pa_convert_func_t from_work_format_func;
pa_remap_t remap;
bool map_required;
pa_resampler_impl impl;
};
pa_resampler* pa_resampler_new(
pa_mempool *pool,
const pa_sample_spec *a,
@ -116,4 +159,11 @@ const pa_sample_spec* pa_resampler_input_sample_spec(pa_resampler *r);
const pa_channel_map* pa_resampler_output_channel_map(pa_resampler *r);
const pa_sample_spec* pa_resampler_output_sample_spec(pa_resampler *r);
/* Implementation specific init functions */
int pa_resampler_ffmpeg_init(pa_resampler *r);
int pa_resampler_libsamplerate_init(pa_resampler *r);
int pa_resampler_peaks_init(pa_resampler *r);
int pa_resampler_speex_init(pa_resampler *r);
int pa_resampler_trivial_init(pa_resampler*r);
#endif