From: Alan Young <consult.awy@gmail.com>
To: alsa-devel@alsa-project.org
Subject: Improving status timestamp accuracy
Date: Sat, 4 Jun 2016 10:31:49 +0100 [thread overview]
Message-ID: <5752A005.2050309@gmail.com> (raw)
I am looking at ways to get more accurate status timestamp information
for various SoC drivers. The data that is obtained by snd_pcm_status().
One route would be to implement the more accurate timestamp mechanisms
that currently are only available for HDA and Skylake (which I think is
the SoC version of HDA).
Looking at the code however, I think that may be unnecessary, at least
for my purposes. It may not actually be practical in many cases.
A call to snd_pcm_status() result in snd_pcm_update_hw_ptr0() being
called. This gets the current output position (pos) via
substream->ops->pointer(substream) and then makes all the other
calculations based on the result. In theory, the result of
substream->ops->pointer() could be sample accurate but in practice it is
very unlikely to be better than period accurate. In fact, if I read it
right, it will just about always be accurate to the point of the last
period interrupt. Even when a DMA driver claims support of
DMA_RESIDUE_GRANULARITY_BURST, it is often the case that the actual
granularity is a period.
The consequence of all that is that, for most drivers, the accuracy of a
status report is period time. The result values, tstamp & audio_tstamp,
are calculated using the current time and the pos estimate from above.
snd_pcm_update_hw_ptr0() is also called when there is a DMA interrupt.
At that time the calculate results will be accurate, or at worst
consistently inaccurate (there could be a constant offset). It would be
useful if a snd_pcm_status() call would simply return the results from
the point of the last interrupt, and not try to estimate a current value
based on the inaccurate substream->ops->pointer() result. It could
either: (a) return the result from the time of the last interrupt, in
which case tstamp would be in the past and driver_tstamp would be now;
or (b) update audio_tstamp based on the elapsed time since it was
recorded. (b) effectively abandons the idea that a current position
report will be accurate outside of an interrupt callback but, even if it
is, doing so is unlikely to result in any loss of accuracy in practice
(assuming a drift of better than 40ppm and period time < 100ms).
Any comments on either of these approaches? I guess (b) is more
compatible with the current model.
Alan.
next reply other threads:[~2016-06-04 9:31 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-04 9:31 Alan Young [this message]
2016-06-04 10:17 ` Improving status timestamp accuracy Clemens Ladisch
2016-06-04 10:43 ` Alan Young
2016-06-04 15:59 ` Clemens Ladisch
2016-06-04 16:20 ` Alan Young
2016-06-05 16:27 ` Clemens Ladisch
2016-06-05 16:32 ` Alan Young
2016-06-05 1:14 ` Raymond Yau
2016-06-05 10:33 ` Alan Young
2016-06-06 1:24 ` Raymond Yau
2016-06-06 9:40 ` Alan Young
2016-06-06 8:34 ` Takashi Iwai
2016-06-06 9:42 ` Alan Young
2016-06-06 14:53 ` Pierre-Louis Bossart
2016-06-07 6:44 ` Alan Young
2016-06-07 18:01 ` Pierre-Louis Bossart
2016-07-08 15:03 ` Alan Young
2016-07-15 20:13 ` Pierre-Louis Bossart
2016-07-19 15:33 ` Alan Young
2016-07-19 15:58 ` Pierre-Louis Bossart
2016-07-20 6:59 ` Alan Young
2016-08-01 21:56 ` Pierre-Louis Bossart
2016-08-02 7:30 ` Alan Young
2016-08-02 7:55 ` Clemens Ladisch
2016-08-02 16:25 ` Pierre-Louis Bossart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5752A005.2050309@gmail.com \
--to=consult.awy@gmail.com \
--cc=alsa-devel@alsa-project.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).