From: "Alexander E. Patrakov" <patrakov@gmail.com>
To: Raymond Yau <superquad.vortex2@gmail.com>
Cc: tiwai@suse.de, alsa-devel@alsa-project.org, clemens@ladisch.de
Subject: Re: [PATCH 0/9] Misc fixes related to rewinds
Date: Sun, 14 Sep 2014 17:19:22 +0600 [thread overview]
Message-ID: <541579BA.3050007@gmail.com> (raw)
In-Reply-To: <5415776B.4040807@gmail.com>
14.09.2014 17:09, Alexander E. Patrakov wrote:
> 14.09.2014 16:11, Alexander E. Patrakov wrote:
>> 14.09.2014 14:53, Raymond Yau wrote:
>>>
>>> >
>>> > Note: this series touches pcm_dmix.c, but does not make it
>>> rewindable. In
>>> > other words, a variant of the test in [2] now produces a tone
>>> instead of
>>> > failing due to snd_pcm_rewind() returning 0. But it should ideally
>>> produce
>>> > silence. Obviously, there is some bug left that I have not pinpointed
>>> yet.
>>> >
>>>
>>> It is better to let dmix not support rewind and force your rewind
>>> program to fail
>>>
>>> You rewind program should not affect the other application playing
>>> through dmix
>>
>> Sorry, you are not an author of a single line in dmix (although you do
>> understand how it works), so I cannot just blindly follow this request.
>> OTOH, I was about to ask the same "should it work" question.
>
> Well, after looking a bit more at this, I think that I know what's wrong
> with dmix. I can probably fix it, but I have tasks with higher priority
> right now.
>
> The real problem is that it tries to do some remixing work in its
> .rewind callback. It shouldn't do this - in fact, the whole callback
> should just move the application pointer. Look - on a hardware device,
> if you disable xrun detection, write something, rewind it, and then let
> it underrun, it will still be played in full. On dmix, it is actively
> attempted to be unmixed.
>
> The real rewind-support work should be done in the mmap_commit callback.
> It should:
>
> 0. Keep a shadow copy of the mmap areas, so that it can look at old
> samples.
>
> 1. Zero out the part of the sum buffer crossed by the hardware pointer
> since the last call (possibly in another client). Zero out the
> corresponding part of the mmap areas (both real and shadow). This should
> probably be done in snd_pcm_dmix_sync_ptr(), but I am not sure. There is
> already a hack based on ARCH_CMPXCHG that purports to do this in
> mix_areas_16().
>
> 2. Unmix the old contents of the mmap areas in mmap_commit callback
> (instead of the rewind callback). Most of the time, it will unmix the
> sequence of zeros.
>
> 3. Mix the new contents of mmap areas.
>
> 4. Update the shadow copy.
Well, scratch that. It obviously does not apply to dshare, where the
problem also exists, although no real work is done in the rewind
callback (correctly), and I still don't know why.
Sorry for the spam.
--
Alexander E. Patrakov
next prev parent reply other threads:[~2014-09-14 11:19 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
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 [this message]
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=541579BA.3050007@gmail.com \
--to=patrakov@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=clemens@ladisch.de \
--cc=superquad.vortex2@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).