[alsa-devel] Is snd_pcm_hw_constraint_mask64 really needed ?

Takashi Sakamoto o-takashi at sakamocchi.jp
Sun Mar 12 02:24:09 CET 2017


Hi,

On Mar 10 2017 01:23, Chemsi Mehdi wrote:
> I am working with an alsa codec driver  where the driver is calling
> err = snd_pcm_hw_constraint_mask64(substream->runtime,
> SNDRV_PCM_HW_PARAM_FORMAT, formats);
> my driver is already setting format before that so I wonder why this
> function is called?
> Looks like it is  needed to add audio constraints to substreams at
> open/startup time, but why ?
> what can be the issue if I do not call it ?

It's for user space applications.

In protocol of ALSA PCM interface between kernel/userspace, parameters 
of PCM substream are decided via interaction between drivers and 
applications. Typically, applications keep memory object in user space 
for 'struct snd_pcm_hw_params' and set their preferable parameters to 
it, then call ioctl(2) system call for it with SNDRV_PCM_IOCTL_HW_PARAMS 
or SNDRV_PCM_IOCTL_HW_REFINE. In kernel mode, the memory object is 
copied to kernel space and handled by ALSA PCM core. The constrains and 
rules registered by drivers are applied to it, then the result is copied 
to user space. Finally, applications can get available parameters of PCM 
substream.

Without this interaction, even if your driver can handle your devices 
correctly, applications cannot use them with proper parameters of PCM 
substream; e.g. wrong PCM samples per frame, wrong sampling rate, and so on.


Regards

# I'm another Takashi.

Takashi Sakamoto


More information about the Alsa-devel mailing list