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

Alexander E. Patrakov patrakov at gmail.com
Tue May 13 08:38:01 PDT 2014


13.05.2014 02:28, Peter Meerwald wrote:
> comments below

I will send a new version of the patch as a follow-up.

> I am not sure if 'range optimization' can be understood without more
> background info

Will reword to "assumption".

> maybe the better argument is that speex-float with fixed point speex is
> not a good idea

Will add this too.

>> +    if (method >= PA_RESAMPLER_SPEEX_FLOAT_BASE && method <= PA_RESAMPLER_SPEEX_FLOAT_MAX) {
>> +        if (speex_is_fixed_point()) {
>> +	    pa_log_info("Speex appears to be compiled with --enable-fixed-point.");
>> +	    pa_log_info("Switching to a fixed-point resampler because it should be faster.");
>
> one line of logging would be enough I think;

OK.

> maybe log it just once

That would be inconsistent with other pa_log_* calls that log their line 
each time PulseAudio doesn't like something about the resampler.

>> +static bool speex_is_fixed_point(void) {
>> +    static bool result;
>
> result = false?

Initialization to false is already guaranteed by the C99 standard. 
However, in other places in PulseAudio similar static bool variables are 
explicitly initialized to false, so I will do that too, for consistency.

>>   static unsigned speex_resample_float(pa_resampler *r, const pa_memchunk *input, unsigned in_n_frames, pa_memchunk *output, unsigned *out_n_frames) {
>>       float *in, *out;
>>       uint32_t inf = in_n_frames, outf = *out_n_frames;
>> @@ -1487,6 +1531,15 @@ static unsigned speex_resample_float(pa_resampler *r, const pa_memchunk *input,
>>       in = pa_memblock_acquire_chunk(input);
>>       out = pa_memblock_acquire_chunk(output);
>>
>> +    /* Strictly speaking, speex resampler expects its input
>> +     * to be normalized to the [-32768.0 .. 32767.0] range.
>> +     * This matters if speex has been compiled with --enable-fixed-point,
>> +     * because such speex will round the samples to the nearest
>> +     * integer, which is 0, -1 or 1 for the floating-point sample
>> +     * range which is used in PulseAudio. However, with fixed-point
>> +     * speex, this line is not reached, and with normal speex,
>
> which line?
>
>> +     * the traditional [-1.0 .. 1.0] range works fine.
>> +     */
>
> maybe better:
>
>      /* Strictly speaking, speex resampler expects its input
>       * to be normalized to the [-32768.0 .. 32767.0] range.
>       * This matters if speex has been compiled with --enable-fixed-point,
>       * because such speex will round the samples to the nearest
>       * integer. speex with --enable-fixed-point is therefore incompatible
>       * with PulseAudio's floating-point sample range [-1 .. 1].
>       */

I have combined your wording with some additional sentences.

     /* Strictly speaking, speex resampler expects its input
      * to be normalized to the [-32768.0 .. 32767.0] range.
      * This matters if speex has been compiled with --enable-fixed-point,
      * because such speex will round the samples to the nearest
      * integer. speex with --enable-fixed-point is therefore incompatible
      * with PulseAudio's floating-point sample range [-1 .. 1]. speex
      * without --enable-fixed-point works fine with this range.
      * Care has been taken to call speex_resample_float() only
      * for speex compiled without --enable-fixed-point.
      */

-- 
Alexander E. Patrakov


More information about the pulseaudio-discuss mailing list