[alsa-devel] floating point exception triggered by speaker-test on pc-speaker
Takashi Iwai
tiwai at suse.de
Wed Nov 26 14:37:14 CET 2008
At Sun, 23 Nov 2008 14:30:24 +0500,
Alexander E. Patrakov wrote:
>
> Hello,
>
> I have hit a strange bug. To reproduce:
>
> 1. Build snd-pcsp.ko.
>
> 2. alsamixer -c pcsp, set the base frequency to 37286 Hz
>
> 3. $ speaker-test -r 22050 -P 4 -D plughw:pcsp
>
> speaker-test 1.0.18
>
> Playback device is plughw:pcsp
> Stream parameters are 22050Hz, S16_LE, 1 channels
> Using 16 octaves of pink noise
> Rate set to 22050Hz (requested 22050Hz)
> Buffer size range from 37 to 38756
> Period size range from 18 to 19379
> Using max buffer size 38756
> Periods = 4
> was set period_size = 0
> was set buffer_size = 38756
> 0 - Front Left
> Floating point exception
>
> I.e., as you see, period size somehow became 0. While debugging this with printfs, I
> noticed that the interval for periods in snd_pcm_hw_param_set_near() starts with 4,
> but doesn't include it (i.e., is open).
>
> Also, I found that snd_interval_refine_first() and snd_interval_refine_last(), when
> given an open interval, refine it to something like (n n+1). This is obviously
> wrong, as there are no integer points in this interval. Changing i->max++ and
> i->min-- there to adjust the value by 2 did eliminate the floating point exception,
> but replaced it with "Unable to set nperiods 4 for playback: Invalid argument". So
> there must be something else also wrong, but I can't pinpoint it and give you a
> ready-made patch :(
Thanks for reporting. The problem is that speaker-test examines the
parameters before calling snd_pcm_hw_params(). After calling, these
are set properly (even with pcsp driver :)
The fix is committed now.
Takashi
More information about the Alsa-devel
mailing list