All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: "Alexander E. Patrakov" <patrakov@gmail.com>,
	ALSA Development Mailing List <alsa-devel@alsa-project.org>,
	Takashi Iwai <tiwai@suse.de>,
	David Henningsson <david.henningsson@canonical.com>,
	Takashi Sakamoto <o-takashi@sakamocchi.jp>
Subject: Re: Master Plan on rewinding
Date: Mon, 08 Sep 2014 09:34:07 +0200	[thread overview]
Message-ID: <540D5BEF.6080708@metafoo.de> (raw)
In-Reply-To: <540C76E0.9050808@gmail.com>

On 09/07/2014 05:16 PM, Alexander E. Patrakov wrote:
[...]
> 2. PulseAudio blindly assumes that it can rewind up to hwbuf_frames -
> (snd_pcm_avail() + rewind_safeguard) frames. The rewind safeguard is needed
> due to reasons that I don't completely understand, but one of them is
> imprecise reporting of the hardware pointer, and another one is that the
> hardware transfers several bytes at a time, and the bytes we need to
> overwrite may be already cached by the hardware.
>

Also at the time you will process the result form snd_pcm_avail() will be 
more than what was reported as the audio DMA keeps going in the background.

[...]
> For the allegedly existing cards where the pointer granularity is always the
> same as the period size, Raymond's method will not work. However, I don't
> know any concrete example of such card (I didn't look at snd-firewire in
> detail, though). And in any case, my opinion is that this "pointer
> granularity = period size" limitation on such cards can be treated as a
> driver bug that needs to be fixed (by someone who knows the driver, not by
> me). On cards where pointer updates happen only on interrupts, the driver
> should not configure the card in such a way that one period visible to the
> userspace corresponds to one interrupt. Instead, it should always configure
> the card for the minimum possible period size, and report only part of the
> period interrupts to period_elapsed(). I.e.: userspace asked for 2 periods
> 64 ms each, but let's configure the card for, say, 64 periods 2 ms each, and
> use the "extra" interrupts only for updating the pointer.
>

There are quite a few ASoC drivers that do have this restriction. For some 
of the drivers the restriction comes from the hardware itself for others it 
is while the hardware in theory supports it nobody bothered so far to 
implement this.

I do not agree that this should be treated as a driver bug and that those 
drivers should increase the interrupt rate. Mainly because this is policy 
and the interrupt rate is configured by the application by setting the 
period size and the driver should not have to guess what kind of latency 
requirements the application has. If the application has lower latency 
requirements it needs to set a smaller period size. Unnecessarily increasing 
the interrupt rate has for example has a impact on power consumption which 
is something you'd like to keep low on battery powered devices.

We should though expose the granularity with which the pointer is updated to 
userspace so it can make educated decisions on how to configure the period size.

- Lars

  parent reply	other threads:[~2014-09-08  7:34 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-07 15:16 Master Plan on rewinding Alexander E. Patrakov
2014-09-07 18:38 ` Tanu Kaskinen
2014-09-07 19:05   ` Alexander E. Patrakov
2014-09-07 20:51 ` Clemens Ladisch
2014-09-08  3:06   ` Raymond Yau
2014-09-08  7:31   ` Alexander E. Patrakov
2014-09-09  8:43     ` Clemens Ladisch
2014-09-09  8:55       ` Alexander E. Patrakov
2014-09-09  9:08         ` David Henningsson
2014-09-09  9:31           ` Alexander E. Patrakov
2014-09-21  2:02             ` Raymond Yau
2014-09-22 13:20               ` Lars-Peter Clausen
2014-09-22 13:36                 ` Alexander E. Patrakov
2014-09-22 13:44                   ` Lars-Peter Clausen
2014-09-23  8:29                   ` Raymond Yau
2014-09-23 10:22                     ` Alexander E. Patrakov
2014-09-09 13:45         ` Clemens Ladisch
2014-09-09 15:55           ` Alexander E. Patrakov
2014-09-09 16:09             ` Takashi Iwai
2014-09-07 23:12 ` David Henningsson
2014-09-09 19:56   ` Pierre-Louis Bossart
2014-09-10  5:38     ` Alexander E. Patrakov
2014-09-08  7:34 ` Lars-Peter Clausen [this message]
2014-09-08  7:59 ` David Henningsson
2014-09-08  8:46   ` Alexander E. Patrakov
2014-09-08  9:26     ` David Henningsson
2014-09-08 10:21       ` Alexander E. Patrakov
2014-09-09  8:43         ` Clemens Ladisch
2014-09-11  3:49 ` Raymond Yau
2014-09-11  4:19   ` A. C. Censi
2014-09-13  9:15     ` Raymond Yau
2014-09-11  5:28   ` Alexander E. Patrakov
2014-09-11  6:21     ` Raymond Yau
2014-09-13  8:57     ` Raymond Yau
2014-09-13 10:43       ` Alexander E. Patrakov
2014-09-13 11:33         ` Raymond Yau
2014-09-13 11:36           ` Alexander E. Patrakov
2014-09-13 18:35 ` Alexander E. Patrakov
2014-09-14 11:37   ` Raymond Yau
2014-09-14 12:07     ` Alexander E. Patrakov
2014-09-15  2:43       ` Raymond Yau
2014-09-15  9:19       ` Takashi Iwai
2014-09-15  9:58         ` Alexander E. Patrakov
2014-09-15 10:08           ` Takashi Iwai
2014-09-15 17:01             ` Pierre-Louis Bossart
2014-09-15 17:14               ` Alexander E. Patrakov
2014-09-15 18:08                 ` Takashi Iwai
2014-09-18  1:15                   ` Raymond Yau
2014-09-21  9:22                     ` Alexander E. Patrakov
2014-09-21  9:53                     ` Clemens Ladisch
2014-09-21 10:56                       ` Alexander E. Patrakov
2014-09-22  3:27                       ` 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=540D5BEF.6080708@metafoo.de \
    --to=lars@metafoo.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=david.henningsson@canonical.com \
    --cc=o-takashi@sakamocchi.jp \
    --cc=patrakov@gmail.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 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.