Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: Raymond Yau <superquad.vortex2@gmail.com>
Cc: ALSA Development Mailing List <alsa-devel@alsa-project.org>,
	Takashi Iwai <tiwai@suse.de>,
	clemens@ladisch.de, Tanu Kaskinen <tanu.kaskinen@linux.intel.com>,
	Arun Raghavan <arun@accosted.net>,
	David Henningsson <david.henningsson@canonical.com>
Subject: Re: PulseAudio and SNDRV_PCM_INFO_BATCH
Date: Mon, 15 Jun 2015 14:01:46 +0200	[thread overview]
Message-ID: <557EBEAA.70004@metafoo.de> (raw)
In-Reply-To: <CAN8cciYApKja0e0U7Uy2YG2ySemfhvKfLGUueGyFx5ajjyqKBA@mail.gmail.com>

On 06/15/2015 01:39 PM, Raymond Yau wrote:
>>>
>>> Hi folks,
>>> I'd like to bring this one up again, since we are currently in the
>>> sub-optimal position of forcing ~100 ms latency on USB devices. The
>>> original thread is here --
>>>
> http://mailman.alsa-project.org/pipermail/alsa-devel/2013-December/069666.html
>>>
>>> I see two flags that are possibly of consequence here:
>>> SNDRV_PCM_INFO_BATCH and SNDRV_PCM_INFO_BLOCK_TRANSFER. I'm not sure
>>> what these mean -- the documentation mentions "double buffering" for
>>> the batch flag, and just that the block transfer means "block
>>> transfer". :-)
>>>
>>> We've spoken about batch meaning either transfers in period size
>>> chunks, or some fixed chunk size. It seems that it would make more
>>> sense for it to mean the former, and block transfer to mean the
>>> latter.
>>>
>>> So I guess the first thing that would be nice to have is a clear
>>> meaning of these two flags. With this done, we could potentially get
>>> to the API to report the transfer size from the driver.
>>
>>
>> Yeah, the meaning of those flags is somewhat fuzzy and may have changed
> over time as well. Here is my understanding of the flags, might not
> necessarily be 100% correct.
>>
>> SNDRV_PCM_INFO_BLOCK_TRANSFER means that the data is copied from the user
> accessible buffer in blocks of one period. Typically these kinds of devices
> have some dedicated audio memory that is not accessible via normal memory
> access and a DMA is setup to copy data from main memory to the dedicated
> memory. This DMA transfers the data from the main memory to the dedicated
> memory in chunks of period size. But otherwise the controller might still
> be capable of reporting a accurate pointer position down to the
> sample/frame level.
>>
>> So SNDRV_PCM_INFO_BLOCK_TRANSFER is mainly important for rewind handling
> and devices with that flag set might need additional headroom since the
> data up to one period after the pointer position has already been copied to
> the dedicated memory and hence can no longer be overwritten.
>>
>> SNDRV_PCM_INFO_BATCH on the other hand has become to mean that the device
> is only capable of reporting the audio pointer with a coarse granularity.
> Typically this means a period sized granularity, but there are some other
> cases as well.
>>
>
> DSP_CAP_REALTIME bit tells if the device/operating system supports precise
> reporting of output pointer position using SNDCTL_DSP_GETxPTR. Precise
> means that accuracy of the reported playback pointer (time) is around few
> samples. Without this capability the playback/recording position is
> reported using precision of one fragment.
>
> DSP_CAP_BATCH bit means that the device has some kind of local storage for
> recording and/or playback. For this reason the information reported by
> SNDCTL_DSP_GETxPTR is very inaccurate.
>
> Are those alsa cap have the similar meaning of those oss cap ?

I would say historically SNDRV_PCM_INFO_BATCH had the same meaning as 
DSP_CAP_BATCH, but it has also come to have the inverse meaning to 
DSP_CAP_REALTIME. By default applications can assume that the pointer is 
accurate down to a few samples, but if SNDRV_PCM_INFO_BATCH is set it is 
less accurate and can be everything up to period size precession.

SNDRV_PCM_INFO_BLOCK_TRANSFER is different from all of them though.

  reply	other threads:[~2015-06-15 12:02 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-12 12:29 PulseAudio and SNDRV_PCM_INFO_BATCH Arun Raghavan
2015-06-12 12:32 ` Arun Raghavan
2015-06-12 13:43   ` Alexander E. Patrakov
2015-06-12 13:57     ` Alexander E. Patrakov
2015-06-17  3:04     ` Raymond Yau
2015-06-17  3:38       ` Alexander E. Patrakov
2015-06-15  3:42   ` Raymond Yau
2015-06-15  8:03 ` Lars-Peter Clausen
2015-06-15 11:39   ` Raymond Yau
2015-06-15 12:01     ` Lars-Peter Clausen [this message]
2015-06-15 13:34       ` Raymond Yau
2015-06-15 14:16         ` Lars-Peter Clausen
2015-06-16  2:33           ` Raymond Yau
2015-06-17  8:27             ` Lars-Peter Clausen
2015-06-17  9:19               ` Takashi Iwai
2015-06-17 15:09                 ` David Henningsson
2015-06-17 16:48                   ` Alexander E. Patrakov
2015-06-18  3:15                     ` Raymond Yau
2015-06-19 11:19                       ` Alexander E. Patrakov
2015-06-19  1:17                   ` Raymond Yau
2015-06-19 11:32                   ` Takashi Iwai
2015-06-20  3:24                     ` Raymond Yau
2015-06-20  6:17                     ` Raymond Yau
2015-06-22  2:35           ` Raymond Yau
2015-06-22  6:43             ` Lars-Peter Clausen
2015-06-22  7:49               ` Raymond Yau
2015-06-22  9:41               ` Clemens Ladisch
2015-06-22 11:54                 ` Raymond Yau
2015-06-22 12:10                   ` Alexander E. Patrakov
2015-06-22 12:34                     ` Raymond Yau
2015-06-22 12:49                       ` Alexander E. Patrakov
2015-06-22 15:50                         ` Raymond Yau
2015-06-22 16:28                           ` Alexander E. Patrakov
2015-06-24  5:51                             ` Raymond Yau
2015-06-22 22:52                     ` Takashi Sakamoto
2015-06-27 15:28   ` Alexander E. Patrakov
2015-06-27 17:15     ` Clemens Ladisch
2015-06-27 17:58       ` Alexander E. Patrakov
2015-06-28  2:09         ` 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=557EBEAA.70004@metafoo.de \
    --to=lars@metafoo.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=arun@accosted.net \
    --cc=clemens@ladisch.de \
    --cc=david.henningsson@canonical.com \
    --cc=superquad.vortex2@gmail.com \
    --cc=tanu.kaskinen@linux.intel.com \
    --cc=tiwai@suse.de \
    /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