[pulseaudio-discuss] [PATCH 2/4] Enabled libsoxr resampler backend.

David Henningsson david.henningsson at canonical.com
Wed Jan 7 06:41:14 PST 2015



On 2015-01-07 15:08, Andrey Semashev wrote:
> Added ID and names for the resampler presets and also corrected the working sample rate deduction to take the new resampler into account. Removed duplicate condition checks from the deduction code.
> ---
>   src/pulsecore/resampler.c | 23 ++++++++++++++++++-----
>   src/pulsecore/resampler.h |  4 ++++
>   2 files changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/src/pulsecore/resampler.c b/src/pulsecore/resampler.c
> index 183d05f..17919a3 100644
> --- a/src/pulsecore/resampler.c
> +++ b/src/pulsecore/resampler.c
> @@ -111,6 +111,15 @@ 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_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_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) {
> @@ -278,10 +287,11 @@ static pa_sample_format_t choose_work_format(
>               }
>                                                   /* Else fall trough */
>           case PA_RESAMPLER_PEAKS:
> -            if (a == PA_SAMPLE_S16NE || b == PA_SAMPLE_S16NE)
> -                work_format = PA_SAMPLE_S16NE;

Were the rows above removed on purpose? I suppose the behaviour should 
be different between SOXR and PEAKS here.

> -            else if (sample_format_more_precise(a, PA_SAMPLE_S16NE) ||
> -                     sample_format_more_precise(b, PA_SAMPLE_S16NE))
> +        case PA_RESAMPLER_SOXR_MQ:
> +        case PA_RESAMPLER_SOXR_HQ:
> +        case PA_RESAMPLER_SOXR_VHQ:
> +            if (sample_format_more_precise(a, PA_SAMPLE_S16NE) ||
> +                sample_format_more_precise(b, PA_SAMPLE_S16NE))
>                   work_format = PA_SAMPLE_FLOAT32NE;
>               else
>                   work_format = PA_SAMPLE_S16NE;
> @@ -601,7 +611,10 @@ static const char * const resample_methods[] = {
>       "ffmpeg",
>       "auto",
>       "copy",
> -    "peaks"
> +    "peaks",
> +    "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..a0306e7 100644
> --- a/src/pulsecore/resampler.h
> +++ b/src/pulsecore/resampler.h
> @@ -59,6 +59,9 @@ typedef enum pa_resample_method {
>       PA_RESAMPLER_AUTO, /* automatic select based on sample format */
>       PA_RESAMPLER_COPY,
>       PA_RESAMPLER_PEAKS,
> +    PA_RESAMPLER_SOXR_MQ,
> +    PA_RESAMPLER_SOXR_HQ,
> +    PA_RESAMPLER_SOXR_VHQ,
>       PA_RESAMPLER_MAX
>   } pa_resample_method_t;
>
> @@ -163,6 +166,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);
>

-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic


More information about the pulseaudio-discuss mailing list