At Tue, 28 Oct 2003 14:30:33 +0100 (CET), Jaroslav wrote: > > Yes, several assumptions were made and the SPACE ioctls were a bit broken. > I've put a fix to our CVS (also included to this e-mail). Hopefully, it > won't break another OSS applications. > > Jaroslav > > Index: pcm_oss.c > =================================================================== > RCS file: /cvsroot/alsa/alsa-kernel/core/oss/pcm_oss.c,v > retrieving revision 1.53 > diff -u -r1.53 pcm_oss.c > --- pcm_oss.c 30 Sep 2003 09:28:26 -0000 1.53 > +++ pcm_oss.c 28 Oct 2003 13:26:12 -0000 > @@ -125,8 +125,8 @@ > if (runtime->period_size == runtime->oss.period_bytes) > return frames; > if (runtime->period_size < runtime->oss.period_bytes) > - return frames * (runtime->oss.period_bytes / runtime->period_size); > - return frames / (runtime->period_size / runtime->oss.period_bytes); > + return (frames * runtime->period_size) / runtime->oss.period_bytes; > + return (frames * runtime->oss.period_bytes) / runtime->period_size; > }
oh yeah, this is... > static int snd_pcm_oss_format_from(int format) > @@ -451,7 +451,7 @@ > sw_params->tstamp_mode = SNDRV_PCM_TSTAMP_NONE; > sw_params->period_step = 1; > sw_params->sleep_min = 0; > - sw_params->avail_min = runtime->period_size; > + sw_params->avail_min = 1; > sw_params->xfer_align = 1; > if (atomic_read(&runtime->mmap_count) || > (substream->oss.setup && substream->oss.setup->nosilence)) { > @@ -470,7 +470,6 @@ > snd_printd("SW_PARAMS failed: %i\n", err); > goto failure; > } > - runtime->control->avail_min = runtime->period_size; > > runtime->oss.periods = params_periods(sparams); > oss_period_size = snd_pcm_plug_client_size(substream, > params_period_size(sparams)); > @@ -883,7 +882,7 @@ > if (tmp <= 0) > return xfer > 0 ? (snd_pcm_sframes_t)xfer : > tmp; > runtime->oss.bytes += tmp; > - runtime->oss.buffer_used = runtime->oss.period_bytes; > + runtime->oss.buffer_used = tmp; > } > tmp = bytes; > if ((size_t) tmp > runtime->oss.buffer_used) > @@ -1425,6 +1424,7 @@ i think the read size should be changed, too. tmp = snd_pcm_oss_read2(substream, runtime->oss.buffer, runtime->oss.period_bytes, 1); also, the line below if (copy_to_user(buf, runtime->oss.buffer + (runtime->oss.period_bytes - runtime->oss.buffer_used), tmp)) the offset calculation is broken if you use buffer_used = tmp. we'll need another field like my patch to calculate the current offset. Takashi ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/ _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel