mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-06 13:29:56 -05:00
Allow compilation without libsamplerate; based on patch from Marc-Andre Lureau; re #125
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1753 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
cc8c499875
commit
2e8244b4bc
3 changed files with 21 additions and 8 deletions
|
|
@ -78,7 +78,9 @@
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBSAMPLERATE
|
||||||
#include <samplerate.h>
|
#include <samplerate.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <pulse/xmalloc.h>
|
#include <pulse/xmalloc.h>
|
||||||
#include <pulse/util.h>
|
#include <pulse/util.h>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,9 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#if HAVE_LIBSAMPLERATE
|
||||||
#include <samplerate.h>
|
#include <samplerate.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <liboil/liboilfuncs.h>
|
#include <liboil/liboilfuncs.h>
|
||||||
#include <liboil/liboil.h>
|
#include <liboil/liboil.h>
|
||||||
|
|
@ -70,9 +72,11 @@ struct pa_resampler {
|
||||||
unsigned i_counter;
|
unsigned i_counter;
|
||||||
} trivial;
|
} trivial;
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBSAMPLERATE
|
||||||
struct { /* data specific to libsamplerate */
|
struct { /* data specific to libsamplerate */
|
||||||
SRC_STATE *state;
|
SRC_STATE *state;
|
||||||
} src;
|
} src;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct { /* data specific to speex */
|
struct { /* data specific to speex */
|
||||||
SpeexResamplerState* state;
|
SpeexResamplerState* state;
|
||||||
|
|
@ -84,7 +88,6 @@ struct pa_resampler {
|
||||||
} ffmpeg;
|
} ffmpeg;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int libsamplerate_init(pa_resampler*r);
|
|
||||||
static int trivial_init(pa_resampler*r);
|
static int trivial_init(pa_resampler*r);
|
||||||
static int speex_init(pa_resampler*r);
|
static int speex_init(pa_resampler*r);
|
||||||
static int ffmpeg_init(pa_resampler*r);
|
static int ffmpeg_init(pa_resampler*r);
|
||||||
|
|
@ -92,11 +95,19 @@ static int ffmpeg_init(pa_resampler*r);
|
||||||
static void calc_map_table(pa_resampler *r);
|
static void calc_map_table(pa_resampler *r);
|
||||||
|
|
||||||
static int (* const init_table[])(pa_resampler*r) = {
|
static int (* const init_table[])(pa_resampler*r) = {
|
||||||
|
#ifdef HAVE_LIBSAMPLERATE
|
||||||
[PA_RESAMPLER_SRC_SINC_BEST_QUALITY] = libsamplerate_init,
|
[PA_RESAMPLER_SRC_SINC_BEST_QUALITY] = libsamplerate_init,
|
||||||
[PA_RESAMPLER_SRC_SINC_MEDIUM_QUALITY] = libsamplerate_init,
|
[PA_RESAMPLER_SRC_SINC_MEDIUM_QUALITY] = libsamplerate_init,
|
||||||
[PA_RESAMPLER_SRC_SINC_FASTEST] = libsamplerate_init,
|
[PA_RESAMPLER_SRC_SINC_FASTEST] = libsamplerate_init,
|
||||||
[PA_RESAMPLER_SRC_ZERO_ORDER_HOLD] = libsamplerate_init,
|
[PA_RESAMPLER_SRC_ZERO_ORDER_HOLD] = libsamplerate_init,
|
||||||
[PA_RESAMPLER_SRC_LINEAR] = libsamplerate_init,
|
[PA_RESAMPLER_SRC_LINEAR] = libsamplerate_init,
|
||||||
|
#else
|
||||||
|
[PA_RESAMPLER_SRC_SINC_BEST_QUALITY] = NULL,
|
||||||
|
[PA_RESAMPLER_SRC_SINC_MEDIUM_QUALITY] = NULL,
|
||||||
|
[PA_RESAMPLER_SRC_SINC_FASTEST] = NULL,
|
||||||
|
[PA_RESAMPLER_SRC_ZERO_ORDER_HOLD] = NULL,
|
||||||
|
[PA_RESAMPLER_SRC_LINEAR] = NULL,
|
||||||
|
#endif
|
||||||
[PA_RESAMPLER_TRIVIAL] = trivial_init,
|
[PA_RESAMPLER_TRIVIAL] = trivial_init,
|
||||||
[PA_RESAMPLER_SPEEX_FLOAT_BASE+0] = speex_init,
|
[PA_RESAMPLER_SPEEX_FLOAT_BASE+0] = speex_init,
|
||||||
[PA_RESAMPLER_SPEEX_FLOAT_BASE+1] = speex_init,
|
[PA_RESAMPLER_SPEEX_FLOAT_BASE+1] = speex_init,
|
||||||
|
|
@ -622,6 +633,7 @@ void pa_resampler_run(pa_resampler *r, const pa_memchunk *in, pa_memchunk *out)
|
||||||
|
|
||||||
/*** libsamplerate based implementation ***/
|
/*** libsamplerate based implementation ***/
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBSAMPLERATE
|
||||||
static void libsamplerate_resample(pa_resampler *r, const pa_memchunk *input, unsigned in_n_frames, pa_memchunk *output, unsigned *out_n_frames) {
|
static void libsamplerate_resample(pa_resampler *r, const pa_memchunk *input, unsigned in_n_frames, pa_memchunk *output, unsigned *out_n_frames) {
|
||||||
SRC_DATA data;
|
SRC_DATA data;
|
||||||
|
|
||||||
|
|
@ -677,6 +689,7 @@ static int libsamplerate_init(pa_resampler *r) {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*** speex based implementation ***/
|
/*** speex based implementation ***/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,6 @@
|
||||||
USA.
|
USA.
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include <samplerate.h>
|
|
||||||
|
|
||||||
#include <pulse/sample.h>
|
#include <pulse/sample.h>
|
||||||
#include <pulse/channelmap.h>
|
#include <pulse/channelmap.h>
|
||||||
#include <pulsecore/memblock.h>
|
#include <pulsecore/memblock.h>
|
||||||
|
|
@ -35,11 +33,11 @@ typedef struct pa_resampler pa_resampler;
|
||||||
|
|
||||||
typedef enum pa_resample_method {
|
typedef enum pa_resample_method {
|
||||||
PA_RESAMPLER_INVALID = -1,
|
PA_RESAMPLER_INVALID = -1,
|
||||||
PA_RESAMPLER_SRC_SINC_BEST_QUALITY = SRC_SINC_BEST_QUALITY,
|
PA_RESAMPLER_SRC_SINC_BEST_QUALITY = 0, /* = SRC_SINC_BEST_QUALITY */
|
||||||
PA_RESAMPLER_SRC_SINC_MEDIUM_QUALITY = SRC_SINC_MEDIUM_QUALITY,
|
PA_RESAMPLER_SRC_SINC_MEDIUM_QUALITY = 1, /* = SRC_SINC_MEDIUM_QUALITY */
|
||||||
PA_RESAMPLER_SRC_SINC_FASTEST = SRC_SINC_FASTEST,
|
PA_RESAMPLER_SRC_SINC_FASTEST = 2, /* = SRC_SINC_FASTEST */
|
||||||
PA_RESAMPLER_SRC_ZERO_ORDER_HOLD = SRC_ZERO_ORDER_HOLD,
|
PA_RESAMPLER_SRC_ZERO_ORDER_HOLD = 3, /* = SRC_ZERO_ORDER_HOLD */
|
||||||
PA_RESAMPLER_SRC_LINEAR = SRC_LINEAR,
|
PA_RESAMPLER_SRC_LINEAR = 4, /* = SRC_LINEAR */
|
||||||
PA_RESAMPLER_TRIVIAL,
|
PA_RESAMPLER_TRIVIAL,
|
||||||
PA_RESAMPLER_SPEEX_FLOAT_BASE,
|
PA_RESAMPLER_SPEEX_FLOAT_BASE,
|
||||||
PA_RESAMPLER_SPEEX_FLOAT_MAX = PA_RESAMPLER_SPEEX_FLOAT_BASE + 10,
|
PA_RESAMPLER_SPEEX_FLOAT_MAX = PA_RESAMPLER_SPEEX_FLOAT_BASE + 10,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue