On Thu, 21 Feb 2002, Kai Vehmanen wrote:

> On Thu, 21 Feb 2002, Abramo Bagnara wrote:
>
> >>> if (avail > pcm->buffer_size)
> >> Yes, this condition is faulty. It should be 'avail >= pcm->stop_threshold'.
> > - if avail > buffer_size this means either played garbage (playback) or
> > overwritten samples (capture). The return of an error is perfectly
> > sensible (also because the value returned would not have any sensible
> > meaning).
>
> Hmm, the mmap semantics of stop_threshold should be similar to the
> read()/write() API.

I fully agree here.

> The functions in alsa-kernel/core/pcm_lib.c seem to take care that
> read/write don't access outside the buffer area. On the other hand it is
> possible to process more bytes than buffer_size with one call.
>
> Similarly the short pcm mmap example in the ALSA API documentation
> (alsa-lib/src/pcm/pcm.c), can also handle situations where avail_update()
> reports more frames than buffer_size (as can happen after Jaroslav today's
> changes). It always processes period_size at a time.
>
> It's also true that without the change, stop_threshold didn't work
> properly with mmap access.
>
> Yes another pov is that Jaroslav changes might cause trouble to some
> applications (at least jackd will require patching as it sets
> stop_threshold to UINT_MAX - not a big thing in this case). Hmm, could
> this cahnge result in accessing illegal memory areas in some
> situations...?

I don't think. There is only a little complicated case when mmap_emulation
is active over read()/write() operations. There is a call to snd_pcm_read_mmap()
function with size >= buffer_size, but there is already a condition to
transfer contiguous memory areas, so everything should be ok (the stream
should forward itself to corrent appl_ptr).

> > - the insertion of SND_PCM_IOCTL_XRUN is a nonsense, as the application
> > has explicitly asked to not stop the stream when xrun happens.
>
> It's only called if stop_threshold is set to buffer_size or lower (-> app
> _has_ asked to stop if xrun occurs).

Yes.

> > As a side note (and as a broken record :-( ), I'd like you don't change
> > the API without peer review. I hope you fully undertstand why...
>
> I agree. Although as we are using CVS, changes are easy to take back.
> Official API is defined by the released versions. And of course in this
> case the API change didn't break compatibility...

I don't see any error as Abramo mentioned.

                                                Jaroslav

-----
Jaroslav Kysela <[EMAIL PROTECTED]>
Linux Kernel Sound Maintainer
ALSA Project  http://www.alsa-project.org
SuSE Linux    http://www.suse.com



_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to