- fixed the infinite loop for probing the rate.

This commit is contained in:
Takashi Iwai 2003-02-12 12:23:00 +00:00
parent b5316c86cc
commit 5ff623fc99

View file

@ -966,14 +966,19 @@ int snd_pcm_hw_param_refine_multiple(snd_pcm_t *pcm,
const snd_interval_t *it = hw_param_interval_c(src, var); const snd_interval_t *it = hw_param_interval_c(src, var);
const snd_interval_t *st = hw_param_interval_c(params, var); const snd_interval_t *st = hw_param_interval_c(params, var);
if (snd_interval_single(it)) { if (snd_interval_single(it)) {
unsigned int best = snd_interval_min(it), cur; unsigned int best = snd_interval_min(it), cur, prev;
for (cur = best; ; cur += best) { cur = best;
for (;;) {
if (st->max < cur || (st->max == cur && st->openmax)) if (st->max < cur || (st->max == cur && st->openmax))
break; break;
if (it->min > cur || (it->min == cur && st->openmin)) if (it->min <= cur && ! (it->min == cur && st->openmin)) {
continue; if (! snd_pcm_hw_param_set(pcm, params, SND_TRY, var, cur, 0))
if (snd_pcm_hw_param_set(pcm, params, SND_TRY, var, cur, 0) == 0) return; /* ok */
return 0; /* ok */ }
prev = cur;
cur += best;
if (cur <= prev)
break;
} }
} }
return snd_pcm_hw_param_refine_near(pcm, params, var, src); return snd_pcm_hw_param_refine_near(pcm, params, var, src);