[pulseaudio-discuss] Alternative smoother implementation

Arun Raghavan arun at arunraghavan.net
Fri Feb 17 13:23:11 UTC 2017



On Fri, 17 Feb 2017, at 02:34 PM, Georg Chini wrote:
> Hi,
> 
> to get even better latency stability of module-loopback, I am still 
> working on an alternative
> smoother implementation. I am at the point where I have created a set of 
> functions similar
> to the original implementation:
> 
> 
> /* Create new smoother */
> pa_smoother_2* pa_smoother_2_new(pa_usec_t window, size_t frame_size, 
> uint32_t rate);
> /* Free the smoother */
> void pa_smoother_2_free(pa_smoother_2* s);
> /* Reset the smoother */
> void pa_smoother_2_reset(pa_smoother_2 *s);
> 
> /* Add a new data point and re-calculate time conversion factor */
> void pa_smoother_2_put(pa_smoother_2 *s, pa_usec_t time_stamp, int64_t 
> byte_count);
> 
> /* Calculate the current latency. For a source, the sign must be inverted
> */
> int64_t pa_smoother_2_get_delay(pa_smoother_2 *s, pa_usec_t time_stamp, 
> size_t byte_count);
> /* Convert a time interval from sound card time to system time */
> pa_usec_t pa_smoother_2_get(pa_smoother_2 *s, pa_usec_t time_stamp);
> /* Convert system time to sound card time */
> pa_usec_t pa_smoother_2_translate(pa_smoother_2 *s, pa_usec_t 
> time_difference);
> 
> /* Enable USB hack */
> void pa_smoother_2_usb_hack_enable(pa_smoother_2 *s, bool enable, 
> pa_usec_t offset);
> /* Set user time offset */
> void pa_smoother_2_set_time_offset(pa_smoother_2 *s, pa_usec_t offset);
> 
> 
> My question is how I should integrate this with the current code. I see 
> two possibilities:
> - Replace the old smoother wherever it is used
> - Add a parameter to daemon.conf (use-alternative-smoother) so that you 
> can choose
>    between the two implementations.
> Probably the second option is preferable. What do you think? Any better 
> idea?

Is there a way to characterise/test how the implementations compare?
Maybe a compile-time/#ifdef selection is sufficient as a first pass, and
then we can figure out how to proceed. I'd imagine we just want one
implementation and not have the complexity of maintaining two.

-- Arun


More information about the pulseaudio-discuss mailing list