[alsa-devel] [PATCH v2] ALSA: core: update tstamp only if audio_tstamp changed

Takashi Iwai tiwai at suse.de
Tue Nov 21 13:59:41 CET 2017


On Tue, 21 Nov 2017 09:29:28 +0100,
Henrik Eriksson wrote:
> 
> commit 3179f6200188 ("ALSA: core: add .get_time_info") had a side effect
> of changing the behaviour of the PCM runtime tstamp.  Prior to this
> change tstamp was not updated by snd_pcm_update_hw_ptr0() unless the
> hw_ptr had moved, after this change tstamp was always updated.
> 
> For an application using alsa-lib, doing snd_pcm_readi() followed by
> snd_pcm_status() to estimate the age of the read samples by subtracting
> status->avail * [sample rate] from status->tstamp this change degraded
> the accuracy of the estimate on devices where the pcm hw does not
> provide a granular hw_ptr, e.g., devices using
> soc-generic-dmaengine-pcm.c and a dma-engine with residue_granularity
> DMA_RESIDUE_GRANULARITY_DESCRIPTOR.  The accuracy of the estimate
> depended on the latency between the PCM hw completing a period and the
> driver called snd_pcm_period_elapsed() to notify ALSA core, typically
> determined by interrupt handling latency.  After the change the accuracy
> of the estimate depended on the latency between the PCM hw completing a
> period and the application calling snd_pcm_status(), determined by the
> scheduling of the application process.  The maximum error of the
> estimate is one period length in both cases, but the error average and
> variance is smaller when it depends on interrupt latency.
> 
> Instead of always updating tstamp, update it only if audio_tstamp
> changed.
> 
> Fixes: 3179f6200188 ("ALSA: core: add .get_time_info")
> Suggested-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> Signed-off-by: Henrik Eriksson <henrik.eriksson at axis.com>
> ---
> Changes since v1:
> - Use Pierre-Louis Bossart's suggested fix
> - Clean up commit log

Applied, thanks.


Takashi


More information about the Alsa-devel mailing list