All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Revell <rlrevell@joe-job.com>
To: Jaroslav Kysela <perex@suse.cz>
Cc: alsa-devel <alsa-devel@lists.sourceforge.net>, tiwai@suse.cz
Subject: Re: [PATCH] emu10k1: add interval timer support
Date: Thu, 04 Nov 2004 14:13:10 -0500	[thread overview]
Message-ID: <1099595591.1617.55.camel@krustophenia.net> (raw)
In-Reply-To: <Pine.LNX.4.58.0411041759220.4510@pnote.perex-int.cz>

On Thu, 2004-11-04 at 18:05 +0100, Jaroslav Kysela wrote:
> On Wed, 3 Nov 2004, Lee Revell wrote:
> 
> > OK I converted this code to use the ALSA timer API.  This seems to work
> > fine, I can access the timer from userspace.  However there does not
> > seem to be an existing example of a driver that uses the ALSA timer API
> > internally; all the drivers that use the interval timer internally for
> > PCM period interrupts have open coded timer handling.  AFAICT the ALSA
> > timer API should be OK for this purpose as well.  Is this correct?
> 
> Yes, you can use ALSA timers from kernel space as well.
> 

OK.  It looks like the only current example is in the sequencer.  But
this should be good enough.

> > I am going to use the interval timer for multichannel PCM playback.
> > This works by allocating 16 voices, setting loop stop on all of them,
> > then setting the timer.  In the first timer interrupt we clear loop stop
> > on all the voices with one PCI write, then re-arm the timer, and set the
> > PCM running; we now have 16 voices in perfect sync.  Subsequent timer
> > interrupts just call snd_pcm_period_elapsed.
> 
> If timer must be re-armed in the interrupt handler, then you have a 
> problem - time shifting when the timer ack interrupt is delayed. So you 
> must do a time correction.
> 

I was planning to use the emu10k1's wallclock timer for this.

> > The above scheme could also work with an extra voice for timing but
> > would be uglier.  Since the multichannel device does not have to support
> > multiple open, and only 48KHZ playback, the timer seems to be a much
> > cleaner solution.  Regular PCM playback will continue to use the extra
> > voice.
> 
> The only one drawback is the possible delay at stream start (up to one 
> period).

Should not be a problem as this device is intended for use by JACK.

I did notice that alsa-lib/test/timer.c looks like it misses the 
first tick about half the time:

rlrevell@mindpipe:~/cvs$ ~/cvs/alsa-T3/alsa-lib/test/timer class 2, sclass 0, card 0, device 0, subdevice 0
Using timer class 2, slave class 0, card 0, device 0, subdevice 0
Timer info:
  slave = no
  card = 0
  id = 'EMU10K1'
  name = 'EMU10K1 timer'
  average resolution = 20833
Using 960 tick(s)
STATUS:
  resolution = 20833
  lost = 0
  overrun = 0
  queue = 0
TIMER: resolution = 20833ns, ticks = 1920 <--
TIMER: resolution = 20833ns, ticks = 960
TIMER: resolution = 20833ns, ticks = 960

...

Using 960 tick(s)
STATUS:
  resolution = 20833
  lost = 0
  overrun = 0
  queue = 0
TIMER: resolution = 20833ns, ticks = 960 <--
TIMER: resolution = 20833ns, ticks = 960
TIMER: resolution = 20833ns, ticks = 960

The header file mentions that when the emu10k1's timer rate is changed
you must allow 1024 sample periods before the new rate is accurate.  It
looks like SNDRV_TIMER_HW_FIRST is the answer, but this did not have any
effect.

-- 
Lee Revell <rlrevell@joe-job.com>



-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click

      reply	other threads:[~2004-11-04 19:13 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-17  7:19 [PATCH] emu10k1: add interval timer support Lee Revell
2004-09-17  8:59 ` Jaroslav Kysela
2004-09-21 19:36   ` Lee Revell
2004-09-22 10:16     ` Takashi Iwai
2004-09-22 10:17       ` Jaroslav Kysela
2004-09-22 15:01       ` Lee Revell
2004-09-24 13:43         ` Takashi Iwai
2004-09-24 13:56           ` Jaroslav Kysela
2004-09-24 14:53             ` Paul Davis
2004-09-24 15:13               ` Takashi Iwai
2004-09-24 15:26                 ` Paul Davis
2004-09-24 15:33                   ` Takashi Iwai
2004-09-24 21:02                 ` emu10k1 multichannel playback design (was Re: [PATCH] emu10k1: add interval timer support) Lee Revell
2004-09-24 22:32                   ` Paul Davis
2004-09-24 22:57                     ` Lee Revell
2004-09-25  4:05                     ` Lee Revell
2004-09-26  0:55                   ` Lee Revell
2004-09-26  2:51                     ` Lee Revell
2004-09-26  3:10                       ` Lee Revell
2004-09-26  3:15                       ` Paul Davis
2004-09-26  3:19                         ` Lee Revell
2004-09-26  3:50                         ` Lee Revell
2004-09-26  6:50                           ` Lee Revell
2004-09-26 11:38                   ` Jaroslav Kysela
2004-09-27  0:40                     ` Lee Revell
2004-09-27  6:48                       ` Jaroslav Kysela
2004-09-27 14:35                         ` Lee Revell
2004-11-03 19:43   ` [PATCH] emu10k1: add interval timer support Lee Revell
2004-11-03 21:24     ` Lee Revell
2004-11-03 23:08       ` Lee Revell
2004-11-09 14:24       ` Takashi Iwai
2004-11-10  4:32         ` Lee Revell
2004-11-10  9:50           ` Takashi Iwai
2004-11-04 17:05     ` Jaroslav Kysela
2004-11-04 19:13       ` Lee Revell [this message]

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=1099595591.1617.55.camel@krustophenia.net \
    --to=rlrevell@joe-job.com \
    --cc=alsa-devel@lists.sourceforge.net \
    --cc=perex@suse.cz \
    --cc=tiwai@suse.cz \
    /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.