From 5ff623fc990210e4bb5dc04447f9e95ad83e5195 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Wed, 12 Feb 2003 12:23:00 +0000 Subject: [PATCH] - fixed the infinite loop for probing the rate. --- src/pcm/pcm_params.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c index 8d4d255b..dd09162a 100644 --- a/src/pcm/pcm_params.c +++ b/src/pcm/pcm_params.c @@ -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 *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); -- 2.47.1