Fixed refinement

This commit is contained in:
Abramo Bagnara 2001-01-21 17:03:53 +00:00
parent 736a9dd719
commit 20b70b6d19
2 changed files with 40 additions and 30 deletions

View file

@ -216,6 +216,7 @@ static int snd_pcm_multi_hw_refine(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
unsigned int k; unsigned int k;
snd_pcm_hw_params_t sparams[multi->slaves_count]; snd_pcm_hw_params_t sparams[multi->slaves_count];
int err; int err;
unsigned int cmask, changed;
err = snd_pcm_multi_hw_refine_cprepare(pcm, params); err = snd_pcm_multi_hw_refine_cprepare(pcm, params);
if (err < 0) if (err < 0)
return err; return err;
@ -226,23 +227,27 @@ static int snd_pcm_multi_hw_refine(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
return err; return err;
} }
} }
/* FIXME: loop begin? */ do {
for (k = 0; k < multi->slaves_count; ++k) { cmask = params->cmask;
err = snd_pcm_multi_hw_refine_schange(pcm, k, params, &sparams[k]); params->cmask = 0;
if (err >= 0) for (k = 0; k < multi->slaves_count; ++k) {
err = snd_pcm_multi_hw_refine_slave(pcm, k, &sparams[k]); err = snd_pcm_multi_hw_refine_schange(pcm, k, params, &sparams[k]);
if (err < 0) { if (err >= 0)
snd_pcm_multi_hw_refine_cchange(pcm, k, params, &sparams[k]); err = snd_pcm_multi_hw_refine_slave(pcm, k, &sparams[k]);
return err; if (err < 0) {
snd_pcm_multi_hw_refine_cchange(pcm, k, params, &sparams[k]);
return err;
}
err = snd_pcm_multi_hw_refine_cchange(pcm, k, params, &sparams[k]);
if (err < 0)
return err;
} }
err = snd_pcm_multi_hw_refine_cchange(pcm, k, params, &sparams[k]); err = snd_pcm_hw_refine_soft(pcm, params);
changed = params->cmask;
params->cmask |= cmask;
if (err < 0) if (err < 0)
return err; return err;
} } while (changed);
err = snd_pcm_hw_refine_soft(pcm, params);
if (err < 0)
return err;
/* FIXME: do we need to loop? */
return 0; return 0;
} }

View file

@ -2002,6 +2002,7 @@ int snd_pcm_hw_refine_slave(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
{ {
snd_pcm_hw_params_t sparams; snd_pcm_hw_params_t sparams;
int err; int err;
unsigned int cmask, changed;
err = cprepare(pcm, params); err = cprepare(pcm, params);
if (err < 0) if (err < 0)
return err; return err;
@ -2010,22 +2011,26 @@ int snd_pcm_hw_refine_slave(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
ERR("Slave PCM not useable"); ERR("Slave PCM not useable");
return err; return err;
} }
/* FIXME: loop begin? */ do {
err = schange(pcm, params, &sparams); cmask = params->cmask;
if (err >= 0) { params->cmask = 0;
err = srefine(pcm, &sparams); err = schange(pcm, params, &sparams);
} if (err >= 0) {
if (err < 0) { err = srefine(pcm, &sparams);
cchange(pcm, params, &sparams); }
return err; if (err < 0) {
} cchange(pcm, params, &sparams);
err = cchange(pcm, params, &sparams); return err;
if (err < 0) }
return err; err = cchange(pcm, params, &sparams);
err = snd_pcm_hw_refine_soft(pcm, params); if (err < 0)
if (err < 0) return err;
return err; err = snd_pcm_hw_refine_soft(pcm, params);
/* FIXME: do we need to loop? */ changed = params->cmask;
params->cmask |= cmask;
if (err < 0)
return err;
} while (changed);
return 0; return 0;
} }