All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
To: Raymond Yau <superquad.vortex2@gmail.com>
Cc: ALSA Development Mailing List <alsa-devel@alsa-project.org>
Subject: Re: [PATCH RFC 0/9] audio timestamping evolutions
Date: Wed, 10 Dec 2014 08:55:14 -0600	[thread overview]
Message-ID: <54885ED2.8050403@linux.intel.com> (raw)
In-Reply-To: <CAN8cciaOsP9wk0wvu5S4BXMwZ6mbe6iqBxBc8OfpirF4XN3PgQ@mail.gmail.com>

On 12/9/14, 10:40 PM, Raymond Yau wrote:
>  >
>  > This series of patches was inspired by recent threads on the alsa
>  > mailing list, as well issues detected with existing and upcoming
>  > hardware:
>  >
>  > 1. there was a request from the PulseAudio community to get more
>  > information from drivers to make rewinds safer. While the conclusion
>  > was that it's nearly impossible for a driver developer to provide this
>  > information, there are however ways to assess the granularity of the
>  > hw_ptr updates using timestamping capabilities, and indirectly
>  > understand how safe rewinds might be.
>
> How long do the application need  to measure the granularity of the
> hw_ptr updates ?

If you look at the examples, it's pretty clear that the granularity can 
be observed with a limited set of measurements, 10 queries or so. If you 
take longer measurements you will be tracking drift mainly.
>
> Are there limitation using wallclock ?

The only limitation I can think of is that implementations need to watch 
out for wrap-around, i think in the HDAUdio case it means you need to 
have one interrupt or status query every 5mn, which is probably fine for 
most applications.
Also the wall clock keeps ticking independently of the stream state, if 
the stream can be mixed, paused, resumed then the low-level driver 
should probably track the start position and compensate for it.

>
> It seem that audio_time.c is hardcoded to use 48000Hz which is the hda
> link rate, do the measurement still valid when application use 44100Hz ?

If you use a wallclock then you really abstract away the actual sampling 
frequency and the transmission pattern discontinuity 
(12-11-11-12-11-11-12-11-11-11 pattern, with an invalid sample every 12 
or 11 samples for HDAudio). It wouldn't matter if you transmitted 44.1 
or 48kHz since they use the same wall clock ticks.

> As hda controller only know the timimg up to hda link, those codec delay
> seem not exposed to the user space

The delay is reported by the timestamping logic if the codec driver 
provides it. my patches don't do any magic, they only report what is 
available.
If the codec delay is not reported then that's too bad. feel free to 
contribute patches to correct this point if needed.

> 7.3.4.5 Audio Function Group Capabilities The Audio Parameter returns a
> set of bit fields describing the audio capabilities of the Audio Function.
>
> Input Delay is a 4-bit value representing the number of samples between
> when the sample is received as an analog signal at the pin and when the
> digital representation is transmitted on the High Definition Audio
> Link.  This may be a “typical” value.  If this is 0, the widgets along
> the critical path should be queried, and each individual widget must
> report its individual delay.
>
> Output Delay is a four bit value representing the number of samples
> between when the sample is received from the Link and when it appears as
> an analog signal at the pin.  This may be a “typical” value.  If this is
> 0, the widgets along the critical path should be queried, and each
> individual widget must report its individual delay.
>
> snd-hda-intel seem only expose widget delay in hda_proc.c
>
> 7.3.4.6 Audio Widget Capabilities
>
> Delay indicates the number of sample delays through the widget.  This
> may be 0 if the delay value in the Audio Function Parameters is supplied
> to represent the entire path.
>
>  >
>  > 2. There was also a request to add a start_at capability based either
>  > on system hr timers or a wall clock, which requires a means to expose
>  > both types of information to applications. Rather than adding new sets
>  > of timestamps, it is suggested the new start_at functionality relies
>  > on the new audio_timestamp definitions provided here.
>
> Do the application need to set specific start threshold when usng
> start_at to prevent it start when buffer is full ?

These patches aren't mine but I would imagine that the buffer is full 
(pre-rolled) and ready to be played. The buffer fullness is probably not 
a criterion for starting a stream in that use case, the timestamp 
requested probably trumps everything else.


_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  reply	other threads:[~2014-12-10 14:55 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-08 22:23 [PATCH RFC 0/9] audio timestamping evolutions Pierre-Louis Bossart
2014-12-08 22:23 ` [PATCH RFC 1/9] ALSA: core: don't override timestamp unconditionally Pierre-Louis Bossart
2014-12-08 22:23 ` [PATCH RFC 2/9] ALSA: core: allow for trigger_tstamp snapshot in .trigger Pierre-Louis Bossart
2014-12-10 16:31   ` Takashi Iwai
2014-12-10 17:22     ` Pierre-Louis Bossart
2014-12-10 17:35       ` Takashi Iwai
2014-12-10 18:43         ` Pierre-Louis Bossart
2014-12-10 19:20           ` Takashi Iwai
2014-12-08 22:23 ` [PATCH RFC 3/9] ALSA: hda: read trigger_timestamp immediately after starting DMA Pierre-Louis Bossart
2014-12-08 22:23 ` [PATCH RFC 4/9] ALSA: usb: update trigger timestamp on first non-zero URB submitted Pierre-Louis Bossart
2014-12-08 22:23 ` [PATCH RFC 5/9] ALSA: core: selection of audio_tstamp type and accuracy reports Pierre-Louis Bossart
2014-12-10 16:35   ` Takashi Iwai
2014-12-10 17:27     ` Pierre-Louis Bossart
2014-12-10 17:39       ` Takashi Iwai
2014-12-10 20:08         ` Takashi Iwai
2014-12-10 21:48           ` Pierre-Louis Bossart
2014-12-10 22:27             ` Takashi Iwai
2014-12-10 23:04               ` Pierre-Louis Bossart
2014-12-11  5:54                 ` Takashi Iwai
2014-12-12  2:36                   ` Pierre-Louis Bossart
2014-12-12  8:37                     ` Takashi Iwai
2014-12-12 15:20                       ` Pierre-Louis Bossart
2014-12-14 15:03                         ` Takashi Iwai
2014-12-16 14:01               ` Tim Cussins
2014-12-08 22:23 ` [PATCH RFC 6/9] ALSA: core: pass audio tstamp config from userspace Pierre-Louis Bossart
2014-12-10 17:28   ` Takashi Iwai
2014-12-10 17:35     ` Pierre-Louis Bossart
2014-12-10 17:40       ` Takashi Iwai
2014-12-08 22:23 ` [PATCH RFC 7/9] ALSA: core: pass audio tstamp config from userspace in compat mode Pierre-Louis Bossart
2014-12-08 22:23 ` [PATCH RFC 8/9] ALSA: core: replace .wall_clock by .get_time_info Pierre-Louis Bossart
2014-12-08 22:23 ` [PATCH RFC 9/9] ALSA: hda: replace .wallclock " Pierre-Louis Bossart
2014-12-10  4:40 ` [PATCH RFC 0/9] audio timestamping evolutions Raymond Yau
2014-12-10 14:55   ` Pierre-Louis Bossart [this message]
2014-12-12  4:55     ` Raymond Yau
2014-12-12 15:28       ` Pierre-Louis Bossart
2014-12-14  3:34         ` Raymond Yau

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=54885ED2.8050403@linux.intel.com \
    --to=pierre-louis.bossart@linux.intel.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=superquad.vortex2@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.