From: Adam Tla/lka <atlka@pg.gda.pl>
To: Paul Davis <paul@linuxaudiosystems.com>
Cc: alsa-devel@alsa-project.org
Subject: Re: Re: [Alsa-user] AD1985 full-duplex(?)
Date: Thu, 9 Sep 2004 15:28:50 +0200 [thread overview]
Message-ID: <20040909132850.GF4584@sunrise.pg.gda.pl> (raw)
In-Reply-To: <200409091259.i89CxpQM019899@localhost.localdomain>
On Thu, Sep 09, 2004 at 08:59:51AM -0400, Paul Davis wrote:
> if you don't "push pointers forward", there is no way for ALSA to
> determine whether there has been an xrun. ALSA can automatically track
> the h/w pointer (most of the time), but if it doesn't know how much
> data the application has written (and where), it cannot compare the
> two values to check for xruns.
I am talking only about mmapped ring buffer mode and it's working model
from apps point off view. Internally ALSA lib could do anything.
> the problem with this approach is that it doesn't take into account
> several possibilities:
>
> a) there is no actual mmap-able buffer; ALSA may be providing
> this via emulation (for certain hardware or certain kinds
> of virtual devices), and therefore needs to know how much
> data you actually wrote.
lib could push its internal pointers through callback functions
so even in case of virtual mmap buffer there should be no problem.
> b) the accessible region of the buffer may not be contiguous.
that's too bad - if I have to modify prevoiusly written part how to do
that? Ring buffer should be one part of mem. That's the idea.
> c) the h/w pointer may have already wrapped around to the
> start of the buffer because of scheduling delays - your code
> will fail miserably in this case.
In my example hw_ptr means virtual write position which is incremented
by device while playing samples so it is equal to transmitted frames
count from begin of playing. So it wraps after buffer_boundary samples
which is big enough to detect this case. But buffer_boundary is
calculated this way so hw_ptr % buffer_size always gives us hw position
in ring buffer.
> d) the "previously written" data may not be physically
> accessible - there are a few audio interfaces that
> are not bus masters, and require the CPU to transfer
> data to them. the "old" part of the buffer will
> never be resent.
In this case mmaped mode should be emulated.
> The simplicity of the OSS approach is appealing, very appealing. But
> it fails to handle some very important situations, and thats why
> ALSA's mmap API is a bit more complex.
So I ask about good working examples of apps using mmapped mode.
Normal music player can use just write and select to play music
because it can decode enough samples ahead. In case of games
you have small timeslice between an event in game and moment of time
when it should be heard. And we have many sound sources mixed
in realtime.
Regards
--
Adam Tla/lka mailto:atlka@pg.gda.pl ^v^ ^v^ ^v^
System & Network Administration Group ~~~~~~
Computer Center, Gdansk University of Technology, Poland
PGP public key: finger atlka@sunrise.pg.gda.pl
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=5047&alloc_id=10808&op=click
next prev parent reply other threads:[~2004-09-09 13:29 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-31 8:52 Re: [Alsa-user] AD1985 full-duplex(?) Peter Zubaj
2004-08-31 9:39 ` Jaroslav Kysela
2004-09-06 20:45 ` Adam Tla/lka
2004-09-07 9:05 ` Jaroslav Kysela
2004-09-07 10:34 ` Adam Tla/lka
2004-09-07 13:23 ` Paul Davis
2004-09-07 13:40 ` Jaroslav Kysela
2004-09-08 17:15 ` Adam Tla/lka
[not found] ` <20040909122253.GE4584@sunrise.pg.gda.pl>
[not found] ` <Pine.LNX.4.58.0409091728420.4150@server.perex-int.cz>
2004-09-10 6:46 ` Adam Tla/lka
2004-09-09 5:52 ` Adam Tla/lka
2004-09-09 12:59 ` Paul Davis
2004-09-09 13:28 ` Adam Tla/lka [this message]
2004-09-09 15:14 ` Jaroslav Kysela
2004-09-10 7:16 ` Adam Tla/lka
2004-09-10 11:44 ` Paul Davis
2004-09-10 19:04 ` Adam Tla/lka
2004-09-13 13:05 ` Paul Davis
2004-09-13 17:24 ` Adam Tla/lka
2004-09-26 22:21 ` Adam Tlałka
2004-09-27 3:00 ` Paul Davis
2004-09-27 6:38 ` Adam Tlałka
2004-09-27 12:43 ` Jaroslav Kysela
2004-09-28 5:11 ` Adam Tlałka
2004-09-28 14:47 ` Paul Davis
2004-09-29 5:51 ` Adam Tlałka
2004-09-27 20:14 ` Paul Davis
2004-09-28 6:10 ` Adam Tlałka
[not found] <200409281113.i8SBDo5U021462@localhost.localdomain>
2004-09-28 13:22 ` Adam Tlałka
2004-09-28 14:48 ` Jaroslav Kysela
2004-09-28 14:57 ` Paul Davis
2004-09-28 15:21 ` Takashi Iwai
2004-09-29 6:15 ` Adam Tlałka
[not found] <Pine.HPX.4.33n.0408181538550.24798-100000@studcom.urz.uni-halle.de>
[not found] ` <1092842830.13603.3.camel@localhost.localdomain>
[not found] ` <20040818181350.2b38e875@mango.fruits.de>
2004-08-18 17:37 ` Jaroslav Kysela
2004-08-18 18:15 ` Florian Schmidt
2004-08-19 8:58 ` Jaroslav Kysela
2004-08-19 9:46 ` Takashi Iwai
2004-08-19 10:28 ` Jaroslav Kysela
2004-08-23 11:36 ` Adam Tlałka
2004-08-23 11:54 ` Jaroslav Kysela
2004-08-23 12:34 ` Adam Tlałka
2004-08-23 14:39 ` Jaroslav Kysela
2004-08-24 6:01 ` Adam Tla/lka
2004-08-23 15:30 ` Takashi Iwai
2004-08-28 19:10 ` Adam Tlałka
2004-08-29 9:54 ` Jaroslav Kysela
2004-08-29 18:35 ` Adam Tlałka
2004-08-31 8:09 ` Jaroslav Kysela
2004-08-19 9:48 ` Florian Schmidt
2004-08-20 10:58 ` Jaroslav Kysela
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=20040909132850.GF4584@sunrise.pg.gda.pl \
--to=atlka@pg.gda.pl \
--cc=alsa-devel@alsa-project.org \
--cc=paul@linuxaudiosystems.com \
/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.