ALSA: Add support for wildcard msbits constraints
Currently the msbits constraints requires to specify a specific sample format width for which the constraint should be applied. But often the number of most significant bits is not sample format specific, but rather a absolute limit. E.g. the PCM interface might accept 32-bit and 24-bit samples, but the DAC has a 16-bit resolution and throws away the LSBs. In this case for both 32-bit and 24-bit format msbits should be set to 16. This patch extends snd_pcm_hw_constraint_msbits() so that a wildcard constraint can be setup that is applied for all formats with a sample width larger than the specified msbits. Choosing the wildcard constraint is done by setting the sample width parameter of the function to 0. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
19f52fae5a
commit
8ef9df55a7
1 changed files with 12 additions and 1 deletions
|
@ -1299,8 +1299,14 @@ static int snd_pcm_hw_rule_msbits(struct snd_pcm_hw_params *params,
|
|||
int width = l & 0xffff;
|
||||
unsigned int msbits = l >> 16;
|
||||
struct snd_interval *i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS);
|
||||
if (snd_interval_single(i) && snd_interval_value(i) == width)
|
||||
|
||||
if (!snd_interval_single(i))
|
||||
return 0;
|
||||
|
||||
if ((snd_interval_value(i) == width) ||
|
||||
(width == 0 && snd_interval_value(i) > msbits))
|
||||
params->msbits = min_not_zero(params->msbits, msbits);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1311,6 +1317,11 @@ static int snd_pcm_hw_rule_msbits(struct snd_pcm_hw_params *params,
|
|||
* @width: sample bits width
|
||||
* @msbits: msbits width
|
||||
*
|
||||
* This constraint will set the number of most significant bits (msbits) if a
|
||||
* sample format with the specified width has been select. If width is set to 0
|
||||
* the msbits will be set for any sample format with a width larger than the
|
||||
* specified msbits.
|
||||
*
|
||||
* Return: Zero if successful, or a negative error code on failure.
|
||||
*/
|
||||
int snd_pcm_hw_constraint_msbits(struct snd_pcm_runtime *runtime,
|
||||
|
|
Loading…
Reference in a new issue