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

Georg Chini georg at chini.tk
Mon Apr 2 12:54:10 UTC 2018


The current code does not call snd_pcm_status_set_audio_htstamp_config()
to configure the way timestamps are updated in ALSA. This leads to
incorrect time stamps in the status object returned by snd_pcm_status(),
so the computed latencies are wrong.

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.
---
 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;
 
-- 
2.16.2



More information about the pulseaudio-discuss mailing list