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