[pulseaudio-discuss] [PATCH v2] alsa-util: Set ALSA report_delay flag in pa_alsa_safe_delay()

Tanu Kaskinen tanuk at iki.fi
Fri May 11 08:09:32 UTC 2018


On Fri, 2018-05-04 at 21:10 +0200, Georg Chini wrote:
> The current code does not call snd_pcm_status_set_audio_htstamp_config()
> to configure the way timestamps are updated in ALSA. In kernel 4.14 and
> above a bug in ALSA has been fixed which changes timmestamp behavior.
> This leads to inconsistencies in the delay reporting because the time
> stamp no longer reflects the time when the delay was updated if the
> ALSA report_delay flag is not set. Therefore latencies are not calculated
> correctly.
> 
> This patch uses snd_pcm_status_set_audio_htstamp_config() to set the
> ALSA report_delay flag to 1 before the call to snd_pcm_status(). With
> this, time stamps are updated as expected.
> ---
> 
> Changes in v2:
>  - updated commit message
> 
>  src/modules/alsa/alsa-util.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
> index 61fb4903..b91a0e98 100644
> --- a/src/modules/alsa/alsa-util.c
> +++ b/src/modules/alsa/alsa-util.c
> @@ -1187,6 +1187,7 @@ int pa_alsa_safe_delay(snd_pcm_t *pcm, snd_pcm_status_t *status, snd_pcm_sframes
>      size_t abs_k;
>      int err;
>      snd_pcm_sframes_t avail = 0;
> +    snd_pcm_audio_tstamp_config_t tstamp_config;
>  
>      pa_assert(pcm);
>      pa_assert(delay);
> @@ -1200,6 +1201,12 @@ int pa_alsa_safe_delay(snd_pcm_t *pcm, snd_pcm_status_t *status, snd_pcm_sframes
>       * avail, delay and timestamp values in a single kernel call to improve
>       * timer-based scheduling */
>  
> +    /* The time stamp configuration needs to be set so that the
> +     * ALSA code will use the internal delay reported by the driver */
> +    tstamp_config.type_requested = 1; /* ALSA default time stamp type */
> +    tstamp_config.report_delay = 1;
> +    snd_pcm_status_set_audio_htstamp_config(status, &tstamp_config);
> +
>      if ((err = snd_pcm_status(pcm, status)) < 0)
>          return err;
>  

Looks good to me.

-- 
Tanu

https://liberapay.com/tanuk
https://www.patreon.com/tanuk


More information about the pulseaudio-discuss mailing list