Application of rules to parameters of PCM substream is done in a call of snd_pcm_hw_refine(), while the function includes much codes and is not enough friendly to readers.
This commit splits the codes to a separated function so that readers can get it easily. I leave desicion into compilers to merge the function into its callee.
Signed-off-by: Takashi Sakamoto o-takashi@sakamocchi.jp --- sound/core/pcm_native.c | 62 +++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 22 deletions(-)
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index b828e94..78afdf1 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -349,35 +349,19 @@ static int constrain_interval_params(struct snd_pcm_hw_constraints *constrs, return 0; }
-int snd_pcm_hw_refine(struct snd_pcm_substream *substream, - struct snd_pcm_hw_params *params) +static int constrain_params_by_rules(struct snd_pcm_hw_constraints *constrs, + struct snd_pcm_hw_params *params) { unsigned int k; - struct snd_pcm_hardware *hw; - struct snd_mask *m = NULL; - struct snd_interval *i = NULL; - struct snd_pcm_hw_constraints *constrs = &substream->runtime->hw_constraints; unsigned int rstamps[constrs->rules_num]; unsigned int vstamps[SNDRV_PCM_HW_PARAM_LAST_INTERVAL + 1]; unsigned int stamp = 2; int changed, again;
- params->info = 0; - params->fifo_size = 0; - if (params->rmask & (1 << SNDRV_PCM_HW_PARAM_SAMPLE_BITS)) - params->msbits = 0; - if (params->rmask & (1 << SNDRV_PCM_HW_PARAM_RATE)) { - params->rate_num = 0; - params->rate_den = 0; - } - - changed = constrain_mask_params(constrs, params); - if (changed < 0) - return changed; - - changed = constrain_interval_params(constrs, params); - if (changed < 0) - return changed; +#ifdef RULES_DEBUG + struct snd_mask *m = NULL; + struct snd_interval *i = NULL; +#endif
for (k = 0; k < constrs->rules_num; k++) rstamps[k] = 0; @@ -445,6 +429,40 @@ int snd_pcm_hw_refine(struct snd_pcm_substream *substream, stamp++; } } while (again); + + return 0; +} + +int snd_pcm_hw_refine(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) +{ + struct snd_pcm_hardware *hw; + struct snd_mask *m = NULL; + struct snd_interval *i = NULL; + struct snd_pcm_hw_constraints *constrs = &substream->runtime->hw_constraints; + int changed; + + params->info = 0; + params->fifo_size = 0; + if (params->rmask & (1 << SNDRV_PCM_HW_PARAM_SAMPLE_BITS)) + params->msbits = 0; + if (params->rmask & (1 << SNDRV_PCM_HW_PARAM_RATE)) { + params->rate_num = 0; + params->rate_den = 0; + } + + changed = constrain_mask_params(constrs, params); + if (changed < 0) + return changed; + + changed = constrain_interval_params(constrs, params); + if (changed < 0) + return changed; + + changed = constrain_params_by_rules(constrs, params); + if (changed < 0) + return changed; + if (!params->msbits) { i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS); if (snd_interval_single(i))