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

Andrey Semashev andrey.semashev at gmail.com
Wed Jan 7 06:54:38 PST 2015


On Wednesday 07 January 2015 15:41:14 David Henningsson wrote:
> 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.

Yes, I did that intentionally. The point is that audio processing should be 
done with max precision of the input and output signals. I don't see why PEAKS 
should be special in this regard - it does support both int16 and float 
samples.

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



More information about the pulseaudio-discuss mailing list