mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 06:31:52 +00:00
ALSA: pcm: add a helper function to constrain mask-type parameters
Application of constraints to mask-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@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
55799c5ab9
commit
561e1cadb4
@ -253,30 +253,15 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream)
|
||||
return true;
|
||||
}
|
||||
|
||||
int snd_pcm_hw_refine(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
static int constrain_mask_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_pcm_hw_constraints *constrs =
|
||||
&substream->runtime->hw_constraints;
|
||||
struct snd_mask *m;
|
||||
unsigned int k;
|
||||
struct snd_pcm_hardware *hw;
|
||||
struct snd_interval *i = NULL;
|
||||
struct snd_mask *m = 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;
|
||||
|
||||
struct snd_mask __maybe_unused old_mask;
|
||||
struct snd_interval __maybe_unused old_interval;
|
||||
|
||||
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;
|
||||
}
|
||||
struct snd_mask old_mask;
|
||||
int changed;
|
||||
|
||||
for (k = SNDRV_PCM_HW_PARAM_FIRST_MASK; k <= SNDRV_PCM_HW_PARAM_LAST_MASK; k++) {
|
||||
m = hw_param_mask(params, k);
|
||||
@ -298,6 +283,39 @@ int snd_pcm_hw_refine(struct snd_pcm_substream *substream,
|
||||
return changed;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int snd_pcm_hw_refine(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
unsigned int k;
|
||||
struct snd_pcm_hardware *hw;
|
||||
struct snd_interval *i = NULL;
|
||||
struct snd_mask *m = 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;
|
||||
int err;
|
||||
|
||||
struct snd_mask __maybe_unused old_mask;
|
||||
struct snd_interval __maybe_unused old_interval;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
err = constrain_mask_params(substream, params);
|
||||
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))
|
||||
|
Loading…
Reference in New Issue
Block a user