Hello, > 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. in any case, such change should be in a separate, independent patch peaks is a bit special as it just computes the maximum absolute sample magnitude over a number of samples; switching to float does not improve quality but causes (potentially expensive) floating point comparisions I think the current special case code for peaks, i.e. if (a == PA_SAMPLE_S16NE || b == PA_SAMPLE_S16NE) work_format = PA_SAMPLE_S16NE; makes sense p. > > > - 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; > > _______________________________________________ > pulseaudio-discuss mailing list > pulseaudio-discuss at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss > -- Peter Meerwald +43-664-2444418 (mobile)