提交 0d4e3999 编写于 作者: T Takashi Sakamoto 提交者: Takashi Iwai

ALSA: pcm: use goto statement instead of while statement to reduce indentation

In a process to calculate parameters of PCM substream, application of all
rules is iterated several times till parameter dependencies are satisfied.
In current implementation, two loops are used for the design, however this
brings two-level indentation and decline readability.

This commit attempts to reduce the indentation by using goto statement,
instead of outer while loop.
Signed-off-by: NTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 9cc07f55
...@@ -337,54 +337,56 @@ static int constrain_params_by_rules(struct snd_pcm_substream *substream, ...@@ -337,54 +337,56 @@ static int constrain_params_by_rules(struct snd_pcm_substream *substream,
rstamps[k] = 0; rstamps[k] = 0;
for (k = 0; k <= SNDRV_PCM_HW_PARAM_LAST_INTERVAL; k++) for (k = 0; k <= SNDRV_PCM_HW_PARAM_LAST_INTERVAL; k++)
vstamps[k] = (params->rmask & (1 << k)) ? 1 : 0; vstamps[k] = (params->rmask & (1 << k)) ? 1 : 0;
do { retry:
again = 0; again = 0;
for (k = 0; k < constrs->rules_num; k++) { for (k = 0; k < constrs->rules_num; k++) {
struct snd_pcm_hw_rule *r = &constrs->rules[k]; struct snd_pcm_hw_rule *r = &constrs->rules[k];
unsigned int d; unsigned int d;
int doit = 0; int doit = 0;
if (r->cond && !(r->cond & params->flags)) if (r->cond && !(r->cond & params->flags))
continue; continue;
for (d = 0; r->deps[d] >= 0; d++) { for (d = 0; r->deps[d] >= 0; d++) {
if (vstamps[r->deps[d]] > rstamps[k]) { if (vstamps[r->deps[d]] > rstamps[k]) {
doit = 1; doit = 1;
break; break;
}
} }
if (!doit) }
continue; if (!doit)
continue;
if (trace_hw_mask_param_enabled()) { if (trace_hw_mask_param_enabled()) {
if (hw_is_mask(r->var)) if (hw_is_mask(r->var))
old_mask = *hw_param_mask(params, r->var); old_mask = *hw_param_mask(params, r->var);
} }
if (trace_hw_interval_param_enabled()) { if (trace_hw_interval_param_enabled()) {
if (hw_is_interval(r->var)) if (hw_is_interval(r->var))
old_interval = *hw_param_interval(params, r->var); old_interval = *hw_param_interval(params, r->var);
} }
changed = r->func(params, r); changed = r->func(params, r);
if (hw_is_mask(r->var)) { if (hw_is_mask(r->var)) {
trace_hw_mask_param(substream, r->var, k + 1, trace_hw_mask_param(substream, r->var, k + 1,
&old_mask, hw_param_mask(params, r->var)); &old_mask, hw_param_mask(params, r->var));
} }
if (hw_is_interval(r->var)) { if (hw_is_interval(r->var)) {
trace_hw_interval_param(substream, r->var, k + 1, trace_hw_interval_param(substream, r->var, k + 1,
&old_interval, hw_param_interval(params, r->var)); &old_interval, hw_param_interval(params, r->var));
} }
rstamps[k] = stamp; rstamps[k] = stamp;
if (changed && r->var >= 0) { if (changed && r->var >= 0) {
params->cmask |= (1 << r->var); params->cmask |= (1 << r->var);
vstamps[r->var] = stamp; vstamps[r->var] = stamp;
again = 1; again = 1;
}
if (changed < 0)
return changed;
stamp++;
} }
} while (again); if (changed < 0)
return changed;
stamp++;
}
if (again)
goto retry;
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册