All of lore.kernel.org
 help / color / mirror / Atom feed
From: Giuliano Pochini <pochini@shiny.it>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@lists.sourceforge.net
Subject: Re: Click after draining
Date: Wed, 20 Oct 2004 10:35:34 +0200 (CEST)	[thread overview]
Message-ID: <XFMail.20041020103534.pochini@shiny.it> (raw)
In-Reply-To: <s5hekjuiuom.wl@alsa2.suse.de>


On 19-Oct-2004 Takashi Iwai wrote:

>> >> >> > The period size is always same even for the last period, AFAIK.
>> >> >>
>> >> >> Only if the driver explicitly asks for it by calling
>> >> >> snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS).
>> >> >
>> >> > No, this means that buffer_size = N * period_size, where N is
>> >> > integer.  Without this constraint, N doesn't have to be an integer.
>> >>
>> >> Yes, exactly. If N isn't integer, the buffer is formed by
>> >> bufsize\persize periods (== the integer part of N) plus one
>> >> short period which is bufsize%persize long.
>> >
>> > The period size is constant regardless of N because it simply defines
>> > the interval of interrupts.  When N isn't integer (say, 2.5), the
>> > transfer point moves like:
>> >
>> >       0, 1, 2, 0.5, 1.5, 0, 1, ...
>> >
>> > That is, when the point is at 2, the transfer is split to two parts
>> > (2-2.5 and 0-0.5).
>>
>> Currently my driver uses a short period.
>
> Well, then this is not a supported feature.  period_size must be
> constant in the current implementation.

Ok, I'll add that constraint. I'm not sure if using that
DSP feature is worth the effort because those extra features
do not come for free. The driver has to do more work in the
irq handler and it has to send send one more command to the
DSP, which may be pretty slow on old 20-bits cards. I'll
evaluate it later. I would like to get the driver included
in alsa-driver asap, before starting to add support for the
new "3G" cards.


>> Anyway, _fill_silence() can still overflow.
>
> In your case, yes.  But it's exceptional.

No, it also happens with you example when
period_offs+period_len > buffer_size:

N=3.5:

first round:
0000000011111111222222223333

2nd:
3333444444445555555566666666
....

fill_silence(per=3, period_len) overflows.


> Usually, the DMA is stopped in the interrupt handler which processes
> the last period.  That is, the resolution of control is in the
> interrupt interval (= period_size).  This means that the whole period
> data is transferred even if only the short data has been written to
> the buffer.

Yes, I know, but the part from the last frame written by the app
and the end of the period is not silenced *and* appl_ptr is moved
to the end of the period before the call to drain_init(). I'm
still looking for the cause. Sorry for my slowness, but I don't
have a lot of time right now :(


--
Giuliano.


-------------------------------------------------------
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

  reply	other threads:[~2004-10-20  8:35 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
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 [this message]
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=XFMail.20041020103534.pochini@shiny.it \
    --to=pochini@shiny.it \
    --cc=alsa-devel@lists.sourceforge.net \
    --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.