ALSA: pcm: add tracepoints for final selection process of hardware parameters
Results of ioctl(2) with SNDRV_PCM_IOCTL_HW_REFINE and SNDRV_PCM_IOCTL_HW_PARAMS are different, because the latter has single value for several parameters; e.g. channels of PCM substream. Selection of the single value is done independently of application of constraints. It's helpful for developers to trace the selection process. This commit adds tracepoints to snd_pcm_hw_params_choose() for the purpose. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
60f96aaecb
commit
7b8a54aff3
|
@ -598,16 +598,38 @@ static int snd_pcm_hw_params_choose(struct snd_pcm_substream *pcm,
|
|||
-1
|
||||
};
|
||||
const int *v;
|
||||
struct snd_mask old_mask;
|
||||
struct snd_interval old_interval;
|
||||
int err;
|
||||
|
||||
for (v = vars; *v != -1; v++) {
|
||||
/* Keep old parameter to trace. */
|
||||
if (trace_hw_mask_param_enabled()) {
|
||||
if (hw_is_mask(*v))
|
||||
old_mask = *hw_param_mask(params, *v);
|
||||
}
|
||||
if (trace_hw_interval_param_enabled()) {
|
||||
if (hw_is_interval(*v))
|
||||
old_interval = *hw_param_interval(params, *v);
|
||||
}
|
||||
if (*v != SNDRV_PCM_HW_PARAM_BUFFER_SIZE)
|
||||
err = snd_pcm_hw_param_first(pcm, params, *v, NULL);
|
||||
else
|
||||
err = snd_pcm_hw_param_last(pcm, params, *v, NULL);
|
||||
if (snd_BUG_ON(err < 0))
|
||||
return err;
|
||||
|
||||
/* Trace the parameter. */
|
||||
if (hw_is_mask(*v)) {
|
||||
trace_hw_mask_param(pcm, *v, 0, &old_mask,
|
||||
hw_param_mask(params, *v));
|
||||
}
|
||||
if (hw_is_interval(*v)) {
|
||||
trace_hw_interval_param(pcm, *v, 0, &old_interval,
|
||||
hw_param_interval(params, *v));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue