> Also fixed a bug in sample_format_more_precise for 32-bit integer sample formats. can you please split out the bug fix as a separate patch? it can be readily applied thanks, p. > --- > src/pulsecore/resampler.c | 32 ++++++++++++++++++++++++++++++-- > src/pulsecore/resampler.h | 5 +++++ > 2 files changed, 35 insertions(+), 2 deletions(-) > > diff --git a/src/pulsecore/resampler.c b/src/pulsecore/resampler.c > index 8b30c24..66101f6 100644 > --- a/src/pulsecore/resampler.c > +++ b/src/pulsecore/resampler.c > @@ -111,6 +111,17 @@ static int (* const init_table[])(pa_resampler *r) = { > [PA_RESAMPLER_AUTO] = NULL, > [PA_RESAMPLER_COPY] = copy_init, > [PA_RESAMPLER_PEAKS] = pa_resampler_peaks_init, > +#ifdef HAVE_SOXR > + [PA_RESAMPLER_SOXR_LQ] = pa_resampler_soxr_init, > + [PA_RESAMPLER_SOXR_MQ] = pa_resampler_soxr_init, > + [PA_RESAMPLER_SOXR_HQ] = pa_resampler_soxr_init, > + [PA_RESAMPLER_SOXR_VHQ] = pa_resampler_soxr_init, > +#else > + [PA_RESAMPLER_SOXR_LQ] = NULL, > + [PA_RESAMPLER_SOXR_MQ] = NULL, > + [PA_RESAMPLER_SOXR_HQ] = NULL, > + [PA_RESAMPLER_SOXR_VHQ] = NULL, > +#endif > }; > > static pa_resample_method_t choose_auto_resampler(pa_resample_flags_t flags) { > @@ -234,7 +245,7 @@ static bool sample_format_more_precise(pa_sample_format_t a, pa_sample_format_t > case PA_SAMPLE_S32LE: > case PA_SAMPLE_S32BE: > if (b == PA_SAMPLE_FLOAT32LE || b == PA_SAMPLE_FLOAT32BE || > - b == PA_SAMPLE_S32LE || b == PA_SAMPLE_FLOAT32BE) > + b == PA_SAMPLE_S32LE || b == PA_SAMPLE_S32BE) > return false; > else > return true; > @@ -287,6 +298,19 @@ static pa_sample_format_t choose_work_format( > work_format = PA_SAMPLE_S16NE; > break; > > + case PA_RESAMPLER_SOXR_LQ: > + case PA_RESAMPLER_SOXR_MQ: > + case PA_RESAMPLER_SOXR_HQ: > + case PA_RESAMPLER_SOXR_VHQ: > + /* Note: libsoxr can potentially work with PA_SAMPLE_S32NE as well */ > + if (!map_required && > + (a == PA_SAMPLE_S16LE || a == PA_SAMPLE_S16BE || sample_format_more_precise(PA_SAMPLE_S16NE, a)) && > + (b == PA_SAMPLE_S16LE || b == PA_SAMPLE_S16BE || sample_format_more_precise(PA_SAMPLE_S16NE, b))) > + work_format = PA_SAMPLE_S16NE; > + else > + work_format = PA_SAMPLE_FLOAT32NE; > + break; > + > default: > work_format = PA_SAMPLE_FLOAT32NE; > } > @@ -601,7 +625,11 @@ static const char * const resample_methods[] = { > "ffmpeg", > "auto", > "copy", > - "peaks" > + "peaks", > + "soxr-lq", > + "soxr-mq", > + "soxr-hq", > + "soxr-vhq" > }; > > const char *pa_resample_method_to_string(pa_resample_method_t m) { > diff --git a/src/pulsecore/resampler.h b/src/pulsecore/resampler.h > index 5a84cf0..ebb7050 100644 > --- a/src/pulsecore/resampler.h > +++ b/src/pulsecore/resampler.h > @@ -59,6 +59,10 @@ typedef enum pa_resample_method { > PA_RESAMPLER_AUTO, /* automatic select based on sample format */ > PA_RESAMPLER_COPY, > PA_RESAMPLER_PEAKS, > + PA_RESAMPLER_SOXR_LQ, > + PA_RESAMPLER_SOXR_MQ, > + PA_RESAMPLER_SOXR_HQ, > + PA_RESAMPLER_SOXR_VHQ, > PA_RESAMPLER_MAX > } pa_resample_method_t; > > @@ -163,6 +167,7 @@ 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); > +int pa_resampler_soxr_init(pa_resampler *r); > > /* Resampler-specific quirks */ > bool pa_speex_is_fixed_point(void); > -- > 2.1.0 > > _______________________________________________ > pulseaudio-discuss mailing list > pulseaudio-discuss at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss > -- Peter Meerwald +43-664-2444418 (mobile)