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

Peter Meerwald pmeerw at pmeerw.net
Wed Nov 12 02:03:26 PST 2014


> 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)


More information about the pulseaudio-discuss mailing list