[PATCH] aplay: Support setting timestamp

Pavel Hofman pavel.hofman at ivitera.com
Sat Jun 18 17:20:09 CEST 2022



Dne 18. 06. 22 v 10:23 Takashi Sakamoto napsal(a):
> Hi,
> 
> On Thu, Jun 16, 2022 at 12:00:22PM +0200, Pavel Hofman wrote:
>> Dne 16. 06. 22 v 10:13 Takashi Sakamoto napsal(a):
>>>
>>> On Thu, Jun 16, 2022 at 08:54:26AM +0200, Pavel Hofman wrote:
>>>> To allow enabling timestamp and specify its type, a new option
>>>> --tstamp-type=TYPE is added. Recognized values are none (default),
>>>> gettimeofday, monotonic, monotonic-raw.
>>>>
>>>> Signed-off-by: Pavel Hofman <pavel.hofman at ivitera.com>
>>>> ---
>>>>    aplay/aplay.1 |  4 ++++
>>>>    aplay/aplay.c | 32 ++++++++++++++++++++++++++++++++
>>>>    2 files changed, 36 insertions(+)
>>> I prefer the idea to work for timestamp feature defined in ALSA PCM
>>> interface, while I have a mixed feeling to integrate `aplay` tool, since
>>> I have an intension to obsolete the tool with `axfer` tool with more
>>> robust design with command argument compatibility (as much as possible).
>>>
>>> This is not so strong request but would I ask you to work for `axfer` tool
>>> instead of `aplay`? Then, it's preferable that the name of command
>>> argument is decided with enough care of all of timestamp feature in ALSA
>>> PCM interface, since we have two categories of timestamps at least; e.g.
>>> system timestamp and audio timestamp. As long as I know, they possibly use
>>> different clock sources, thus these two timestamps have different levels
>>> of clock id, I think.
>>>
>>> Of course, it's a loose accord in the community to obsolete `aplay`, and
>>> it's easy to decide to continue aplay integration. (I'm not in leading
>>> place of the project.) I'll be a bit happy if people take care of axfer
>>> tool as well.
>>
>> Thanks for your input. I use aplay in my project and needed to have tstamps
>> enabled in proc status files for my simple code which calculates relative
>> samplerate between capture and playback soundcards (one of them having rate
>> adjustable - audio gadget, snd-aloop)
>> https://mailman.alsa-project.org/pipermail/alsa-devel/2022-June/201647.html
> 
> I had read your message, then replied to the patch.
> 
> I'm not at so strong objection to your patch, however if I'm allowed to
> note my opinion honestly, it surely brings an issue in a point of
> application design. In short, the purpose of the patch is just for the
> case to retrieve the history of PCM buffer pointer position and system
> time stamp via procfs node for PCM substream of aplay for analysis,
> therefore it's not for aplay itself.
> 
> As you know, aplay program has no code to process time stamp except for
> the case of XRUN detection. I can easily imagine the future that the new
> command line option is rarely used, except at your laboratory or office.
> 
> 
> In my opinion, the better practice for your case is to add the way to
> configure parameters of PCM substream for time stamp operation; e.g. add
> kobject parameter to ALSA PCM device for PCM substream (please avoid to
> hack procfs node since it's ancient way in unregulated world).
> 
> Although it's probably and technically possible, it has side effect to
> user processes of existent ALSA PCM applications such as PipeWire plugins
> and PulseAudio modules when the applications voluntarily process time
> stamp for any purpose.
> 
>> . The existing aplay did not have this feature, so I added it and submitted
>> the patch. I did not know aplay was planned to be obsoleted, it seems to
>> receive a healthy stream of patches.
>   
>> As of the tstamp terminology - what command option would be more appropriate
>> instead? Thanks a lot,
> 
> It's a kind of sophisticated work, I think.
> 
> For your information, the design of several kinds of time stamp in ALSA
> PCM interface (from my memo written 2020) is below:
> 
>   - system time stamp
>      - Available for several purposes
>          - trigger (struct snd_pcm_status.trigger_tstamp)
>             - the record of time stamp at start/stop/suspend/resume/pause
>               of PCM substream.
>          - current (struct snd_pcm_status.tstamp)
>             - the record of the latest time stamp at updating hwptr, at
>               xrun and reset of PCM substream.
>          - driver (struct snd_pcm_status.driver_tstamp)
>             - the record of the latest time stamp when the driver operates
>               PCM substream at both hardIRQ/softIRQ and process contexts
>      - Multiple levels of clock_id
>         - monotinic time
>         - monotonic raw time
>         - real time (default, gettimeofday)
>      - The sampling timing at hardIRQ context is invocation of hardIRQ
>        handler instead of the time of actual interrupt request, thus
>        includes time jitter due to CPU-level IRQ-mask.
> 
>   - audio time stamp (struct snd_pcm_status.audio_tstamp,
>                       struct snd_pcm_mmap_status.audio_tstamp)
>      - timespec compensated for audio frame granularity
>      - Available when audio-related hardware supports specific function
>        to record time of DMA transmission or audio link.
>      - Currently, implemented for Intel HDA driver in Intel CPU (Skylate
>        generation or later) with Global Time Stamp (GTS) register.
>      - Multiple levels
>         - default
>             - computed just from hwptr
>         - link audio time
>         - link absolute audio time
>         - link estimated audio time
>         - link synchronized autio time
>      - For detail, please refer to
>        `Documentation/sound/designs/timestamping.rst`.
> 
> 

Takashi, I really do appreciate your comprehensive and very useful 
explanation. It should become part of core alsa documentation somehow, 
please.

But I cannot implement such extensive solution to either aplay or axfer, 
that's way above my skills and especially needs.

As I said in my previous message, I have axfer patch implementing the 
same feature as in my aplay patch. Should you find it usefull, I can 
submit it. You are the axfer maintainer, you call the shots :-)

Thanks a lot,

Pavel.


More information about the Alsa-devel mailing list