From: Takashi Iwai <tiwai@suse.de>
To: Giuliano Pochini <pochini@shiny.it>
Cc: alsa-devel@lists.sourceforge.net
Subject: Re: Click after draining
Date: Mon, 18 Oct 2004 13:14:58 +0200 [thread overview]
Message-ID: <s5h7jpojn0t.wl@alsa2.suse.de> (raw)
In-Reply-To: <20041016213113.1744f887.pochini@shiny.it>
At Sat, 16 Oct 2004 21:31:13 +0200,
Giuliano Pochini wrote:
>
> On Fri, 08 Oct 2004 18:07:53 +0200
> Takashi Iwai <tiwai@suse.de> wrote:
>
> > > ALSA seems not putting silence properly unless silence_size > 0.
> > > How about the attached patch?
> > > (it's an untested and quick fix, as usual :)
> >
> > And broken, as usual :)
> > The corrected on is below.
>
> The patch doesn't fix the problem.
>
> With your patch snd_pcm_do_drain_init() does:
>
> if (! runtime->silence_size) {
> /* fill silence until the priod end */
> snd_pcm_uframes_t appl_ptr = runtime->control->appl_ptr;
> snd_pcm_uframes_t delta = appl_ptr % runtime->period_size;
> if (delta > 0)
> snd_pcm_lib_fill_silence(substream,
> appl_ptr % runtime->buffer_size,
> runtime->period_size - delta);
> }
>
> In my case delta is always 0. It seems ALSA aligns appl_ptr to the offset of
> the next period without silencing the current one.
If so, it has to be in alsa-lib. Not a bug of ALSA driver.
> I could not find where.
> Anyway, calling _fill_silence() with length=runtime->period_size - delta is
> wrong IMHO because not all periods have have the same size. The last one can
> be smaller and in that case it will overflow.
The period size is always same even for the last period, AFAIK.
> Also, I don't think filling with silence until the end of the period is
> enough. ALSA stops the card some time it gets the interrupt, thus it should
> silence also the subsequent period, or its beginning part.
I thought of that, too, but concluded that it's a questionary
behavior.
Usually, it's not needed if the interrupt is taken fast enough at the
moment the last period is processed. The click noise comes from the
garbage data in the last period. Also, the app can specify
silence_size if it needs this behavior explicitly.
However, there can be a case that the irq isn't handled fast enough,
or the DMA and the interrupt isn't synchronized well (e.g. using a
timer interrupt because of lack of DMA interrupt). In such a case,
auto-silencing would be needed for the proper work...
Takashi
-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
next prev parent reply other threads:[~2004-10-18 11:14 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-21 20:13 Click after draining Giuliano Pochini
2004-10-07 18:58 ` Giuliano Pochini
2004-10-08 15:34 ` Takashi Iwai
2004-10-08 16:07 ` Takashi Iwai
2004-10-08 20:26 ` Giuliano Pochini
2004-10-16 19:31 ` Giuliano Pochini
2004-10-18 11:14 ` Takashi Iwai [this message]
2004-10-18 14:56 ` Giuliano Pochini
2004-10-18 15:10 ` Takashi Iwai
2004-10-18 15:34 ` Giuliano Pochini
2004-10-19 11:03 ` Takashi Iwai
2004-10-19 15:09 ` Giuliano Pochini
2004-10-19 15:39 ` Takashi Iwai
2004-10-20 8:35 ` Giuliano Pochini
2004-10-20 9:38 ` Takashi Iwai
2004-11-01 19:29 ` Giuliano Pochini
2004-11-09 9:29 ` Takashi Iwai
2004-11-09 10:00 ` Giuliano Pochini
-- strict thread matches above, loose matches on Subject: below --
2007-01-05 22:48 Andrew Johnson
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=s5h7jpojn0t.wl@alsa2.suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@lists.sourceforge.net \
--cc=pochini@shiny.it \
/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.