[pulseaudio-discuss] [PATCH v2] resampler: Support speex resampler compiled with FIXED_POINT

Laurențiu Nicola lnicola at dend.ro
Sat May 10 10:37:57 PDT 2014


Sorry for barging in on this, but is there a way to run a benchmark on
all the resamplers included in PulseAudio? For me, both speex-float-6
and speex-fixed-6 eat around 40% CPU.

Laurentiu Nicola

On Sat, May 10, 2014, at 20:29, Alexander E. Patrakov wrote:
> 10.05.2014 23:12, Peter Meerwald wrote:
> > Hi,
> >
> >>>> When Speex is compiled with FIXED_POINT defined, it scales float input
> >>>> to ±32768 instead of ±1. In order to make floating point resampler
> >>>> work with speex compiled with FIXED_POINT, we need to rescale the input
> >>>> to speex. This rescaling does not hurt normal speex, so we do it
> >>>> unconditionally.
> >>>
> >>> floating point multiplication is quite costly on some platforms, I'd
> >>> rather not force everyone to scale every sample twice for no good reason
> >>
> >> Well, on such platforms (*cough* ARM *cough*) I'd call it a bug to use
> >> speex-float-* resamplers by default, or even to provide them at all. If we fix
> >> that, then the extra multiplication in an already-very-slow path would no
> >> longer be relevant.
> >
> > speex-float resampler is actually faster than speex-fixed when using the
> > NEON patch, or at least on par -- so it depends
> >
> > but floating point math really sucks on Cortex-A8, doing the same
> > operation with NEON is quite fast
> 
> Do I understand correctly that the above is a consideration on how one 
> should build speex on various ARM platforms?
> 
> > so how about overriding PA's speex-float choice to speex-fixed when we
> > find that speex-float is compiled as FIXED_POINT (and educate the user?)
> 
> Good idea, but it would be really nice to see the numbers. Especially 
> the following comparison.
> 
> Compile Speex as appropriate for the target platform. Start from s16 
> samples, as found on a CD.
> 
> Variant A: convert them to floating point in PulseAudio, feed to 
> speex_resampler_process_float(), convert back to s16.
> 
> Variant B: feed directly to speex_resampler_process_int().
> 
> I.e. do not compare the two variants of speex, but two ways of using the 
> optimally-compiled speex.
> 
> I am going to extend this thought in another e-mail.
> 
> -- 
> Alexander E. Patrakov
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss


More information about the pulseaudio-discuss mailing list