[alsa-devel] [PATCH 2/8] ALSA: pcm: add a helper function to constrain interval-type parameters
Takashi Sakamoto
o-takashi at sakamocchi.jp
Thu Jun 8 01:10:20 CEST 2017
Application of constraints to interval-type parameters for 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 at sakamocchi.jp>
---
sound/core/pcm_native.c | 56 ++++++++++++++++++++++++++++++++-----------------
1 file changed, 37 insertions(+), 19 deletions(-)
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index b3e8aab3915e..049b943c9e7b 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -287,6 +287,40 @@ static int constrain_mask_params(struct snd_pcm_substream *substream,
return 0;
}
+static int constrain_interval_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params)
+{
+ struct snd_pcm_hw_constraints *constrs =
+ &substream->runtime->hw_constraints;
+ struct snd_interval *i;
+ unsigned int k;
+ int changed;
+
+ struct snd_interval __maybe_unused old_interval;
+
+ for (k = SNDRV_PCM_HW_PARAM_FIRST_INTERVAL; k <= SNDRV_PCM_HW_PARAM_LAST_INTERVAL; k++) {
+ i = hw_param_interval(params, k);
+ if (snd_interval_empty(i))
+ return -EINVAL;
+ if (!(params->rmask & (1 << k)))
+ continue;
+
+ if (trace_hw_interval_param_enabled())
+ old_interval = *i;
+
+ changed = snd_interval_refine(i, constrs_interval(constrs, k));
+
+ trace_hw_interval_param(substream, k, 0, &old_interval, i);
+
+ if (changed)
+ params->cmask |= 1 << k;
+ if (changed < 0)
+ return changed;
+ }
+
+ return 0;
+}
+
int snd_pcm_hw_refine(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params)
{
@@ -317,25 +351,9 @@ int snd_pcm_hw_refine(struct snd_pcm_substream *substream,
if (err < 0)
return err;
- for (k = SNDRV_PCM_HW_PARAM_FIRST_INTERVAL; k <= SNDRV_PCM_HW_PARAM_LAST_INTERVAL; k++) {
- i = hw_param_interval(params, k);
- if (snd_interval_empty(i))
- return -EINVAL;
- if (!(params->rmask & (1 << k)))
- continue;
-
- if (trace_hw_interval_param_enabled())
- old_interval = *i;
-
- changed = snd_interval_refine(i, constrs_interval(constrs, k));
-
- trace_hw_interval_param(substream, k, 0, &old_interval, i);
-
- if (changed)
- params->cmask |= 1 << k;
- if (changed < 0)
- return changed;
- }
+ err = constrain_interval_params(substream, params);
+ if (err < 0)
+ return err;
for (k = 0; k < constrs->rules_num; k++)
rstamps[k] = 0;
--
2.11.0
More information about the Alsa-devel
mailing list