mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-01 22:58:49 -04:00
Fixed refinement
This commit is contained in:
parent
736a9dd719
commit
20b70b6d19
2 changed files with 40 additions and 30 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue