Index: alsa-lib/src/pcm/pcm_params.c =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-lib/src/pcm/pcm_params.c,v retrieving revision 1.31 diff -u -r1.31 pcm_params.c --- alsa-lib/src/pcm/pcm_params.c 12 Feb 2003 11:37:09 -0000 1.31 +++ alsa-lib/src/pcm/pcm_params.c 12 Feb 2003 11:38:01 -0000 @@ -966,14 +966,19 @@ const snd_interval_t *it = hw_param_interval_c(src, var); const snd_interval_t *st = hw_param_interval_c(params, var); if (snd_interval_single(it)) { - unsigned int best = snd_interval_min(it), cur; - for (cur = best; ; cur += best) { + unsigned int best = snd_interval_min(it), cur, prev; + cur = best; + for (;;) { if (st->max < cur || (st->max == cur && st->openmax)) break; - if (it->min > cur || (it->min == cur && st->openmin)) - continue; - if (snd_pcm_hw_param_set(pcm, params, SND_TRY, var, cur, 0) == 0) - return 0; /* ok */ + if (it->min <= cur && ! (it->min == cur && st->openmin)) { + if (! snd_pcm_hw_param_set(pcm, params, SND_TRY, var, cur, 0)) + return; /* ok */ + } + prev = cur; + cur += best; + if (cur <= prev) + break; } } return snd_pcm_hw_param_refine_near(pcm, params, var, src);