All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alexander E. Patrakov" <patrakov@gmail.com>
To: Jaroslav Kysela <perex@perex.cz>, alsa-devel@alsa-project.org
Cc: tiwai@suse.de, clemens@ladisch.de,
	David Henningsson <david.henningsson@canonical.com>
Subject: Re: [PATCH 0/9] Misc fixes related to rewinds
Date: Sun, 14 Sep 2014 01:50:37 +0600	[thread overview]
Message-ID: <5414A00D.3030600@gmail.com> (raw)
In-Reply-To: <54149B7F.6000002@gmail.com>

14.09.2014 01:31, Alexander E. Patrakov wrote:
> 14.09.2014 01:14, Jaroslav Kysela wrote:
>> Date 13.9.2014 20:30, Alexander E. Patrakov wrote:
>>> The idea of the series is to fix the two issues that I found [1] for the
>>
>> I applied all your patches to alsa-lib's repo, but...
>>
>>> hw plugin. snd_pcm_rewindable() sometimes returned negative values that
>>> are actually negative amounts of samples and not error codes. Also, it
>>> bases its calculations on stale hardware position pointer, which is not
>>> what PulseAudio wants (alternatively, we can document the need to call
>>> snd_pcm_avail() before snd_pcm_rewindable(), but I don't like it).
>>
>> The hw sync is expensive and the application might do this sync multiple
>> times when woken up. I think that it must be clear that:
>>
>> 1) only snd_pcm_avail(), snd_pcm_delay(), snd_pcm_avail_delay()
>>     does the real hw sync
>> 2) snd_pcm_avail(), snd_pcm_delay(), snd_pcm_avail_delay(),
>>     snd_pcm_rewindable() and snd_pcm_forwardable() does
>>     hw sync (and change all plugins to respect this)
>>
>> I don't like the situation "be somewhere between because it's good for
>> one purpose"...
>
> I understand the concern. I have specifically not added the call to
> hwsync directly to snd_pcm_rewindable implementation (although it would
> have resulted in a smaller patch), because that would indeed cause
> double-hwsync and the resulting inefficiency. I made sure that all
> plugins either make the hwsync thing themselves or rely on the slave to
> do that for them, but not both. If you find an error and/or spot a case
> of a double-hwsync in a plugin chain, please complain.
>
> One known case of double-hwsync is the following pattern: an application
> calls snd_pcm_rewindable(), thinks about it, and then calls
> snd_pcm_rewind(). Which, due to PATCH 2/9, calls the rewindable callback
> again, resulting in the second hwsync. I don't know which way out is
> best: either ignore, or revert the intention of PATCH 2/9, or revert the
> whole PATCH 8/9 and replace it with a documentation change.

Well, after looking again, I see that the multi plugin became especially 
problematic. Previously, it did not forward hwsync requests to slaves 
other than master_slave. Now it does.

Please revert PATCH 8/9. It needs more discussion.

>
> OTOH, I made a mistake of not adding David Henningsson to the CC list
> during the initial submission. If PulseAudio would need to synchronize
> hardware pointers even after conversion to snd_pcm_rewindable() for some
> other reason, then the need for PATCH 8/9 is not that obvious, and maybe
> it should be reverted and replaced with a documentation fix.
>

-- 
Alexander E. Patrakov

  reply	other threads:[~2014-09-13 19:50 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-13 18:30 [PATCH 0/9] Misc fixes related to rewinds Alexander E. Patrakov
2014-09-13 18:30 ` [PATCH 1/9] dmix: actually rewind when running or being drained Alexander E. Patrakov
2014-09-13 18:30 ` [PATCH 2/9] pcm: express the rewind size limitation logic better Alexander E. Patrakov
2014-09-13 18:30 ` [PATCH 3/9] pcm: handle negative values from snd_pcm_mmap_hw_avail Alexander E. Patrakov
2014-09-13 18:30 ` [PATCH 4/9] pcm, rate: use the snd_pcm_mmap_hw_avail function Alexander E. Patrakov
2014-09-13 18:30 ` [PATCH 5/9] pcm, null: use the snd_pcm_mmap_avail function Alexander E. Patrakov
2014-09-13 18:30 ` [PATCH 6/9] rate: handle negative values from snd_pcm_mmap_playback_hw_avail Alexander E. Patrakov
2014-09-15  8:49   ` Takashi Iwai
2014-09-15 10:03     ` Alexander E. Patrakov
2014-09-15 10:14       ` Takashi Iwai
2014-09-16 15:52         ` Alexander E. Patrakov
2014-09-16 17:26           ` Jaroslav Kysela
2014-09-16 19:18           ` Takashi Iwai
2014-09-13 18:30 ` [PATCH 7/9] dsnoop: rewindable and forwardable logic was swapped Alexander E. Patrakov
2014-09-13 18:30 ` [PATCH 8/9] pcm: rewindable, forwardable: don't return stale data Alexander E. Patrakov
2014-09-14  2:57   ` Raymond Yau
2014-09-13 18:30 ` [PATCH 9/9] pcm, file: don't recurse in the rewindable and forwardable callbacks Alexander E. Patrakov
2014-09-13 19:14 ` [PATCH 0/9] Misc fixes related to rewinds Jaroslav Kysela
2014-09-13 19:31   ` Alexander E. Patrakov
2014-09-13 19:50     ` Alexander E. Patrakov [this message]
2014-09-14 16:34       ` Jaroslav Kysela
2014-09-14  8:53 ` Raymond Yau
2014-09-14 10:11   ` Alexander E. Patrakov
2014-09-14 11:09     ` Alexander E. Patrakov
2014-09-14 11:19       ` Alexander E. Patrakov
2014-09-15  8:55         ` Takashi Iwai

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=5414A00D.3030600@gmail.com \
    --to=patrakov@gmail.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    --cc=david.henningsson@canonical.com \
    --cc=perex@perex.cz \
    --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.