diff mbox

[RESEND,3/5] ALSA: pcm: Add snd_pcm_rate_range_to_bits()

Message ID 1452489739-25720-1-git-send-email-mengdong.lin@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

mengdong.lin@linux.intel.com Jan. 11, 2016, 5:22 a.m. UTC
From: Mengdong Lin <mengdong.lin@linux.intel.com>

This helper function can convert a given sample rate range to
SNDRV_PCM_RATE_xxx bits.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>

Comments

Takashi Iwai Jan. 11, 2016, 8:55 a.m. UTC | #1
On Mon, 11 Jan 2016 06:22:19 +0100,
mengdong.lin@linux.intel.com wrote:
> 
> From: Mengdong Lin <mengdong.lin@linux.intel.com>
> 
> This helper function can convert a given sample rate range to
> SNDRV_PCM_RATE_xxx bits.
> 
> Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>

This function has an implicit assumption: the rates in the given range
have only the pre-defined rates like 44100 or 16000.

In anyway, feel free to take my ack:
  Acked-by: Takashi Iwai <tiwai@suse.de>


Takashi

> 
> diff --git a/include/sound/pcm.h b/include/sound/pcm.h
> index b0be092..af1fb37 100644
> --- a/include/sound/pcm.h
> +++ b/include/sound/pcm.h
> @@ -1093,6 +1093,8 @@ unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate);
>  unsigned int snd_pcm_rate_bit_to_rate(unsigned int rate_bit);
>  unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a,
>  					 unsigned int rates_b);
> +unsigned int snd_pcm_rate_range_to_bits(unsigned int rate_min,
> +					unsigned int rate_max);
>  
>  /**
>   * snd_pcm_set_runtime_buffer - Set the PCM runtime buffer
> diff --git a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c
> index ebe8444..0b98f51 100644
> --- a/sound/core/pcm_misc.c
> +++ b/sound/core/pcm_misc.c
> @@ -565,3 +565,30 @@ unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a,
>  	return rates_a & rates_b;
>  }
>  EXPORT_SYMBOL_GPL(snd_pcm_rate_mask_intersect);
> +
> +/**
> + * snd_pcm_rate_range_to_bits - converts rate range to SNDRV_PCM_RATE_xxx bit
> + * @rate_min: the minimum sample rate
> + * @rate_max: the maximum sample rate
> + *
> + * Return: The SNDRV_PCM_RATE_xxx flag that corresponds to the given rate range,
> + * or SNDRV_PCM_RATE_KNOT for an unknown range.
> + */
> +unsigned int snd_pcm_rate_range_to_bits(unsigned int rate_min,
> +	unsigned int rate_max)
> +{
> +	unsigned int rates = 0;
> +	int i;
> +
> +	for (i = 0; i < snd_pcm_known_rates.count; i++) {
> +		if (snd_pcm_known_rates.list[i] >= rate_min
> +			&& snd_pcm_known_rates.list[i] <= rate_max)
> +			rates |= 1 << i;
> +	}
> +
> +	if (!rates)
> +		rates = SNDRV_PCM_RATE_KNOT;
> +
> +	return rates;
> +}
> +EXPORT_SYMBOL_GPL(snd_pcm_rate_range_to_bits);
> -- 
> 2.5.0
>
diff mbox

Patch

diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index b0be092..af1fb37 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -1093,6 +1093,8 @@  unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate);
 unsigned int snd_pcm_rate_bit_to_rate(unsigned int rate_bit);
 unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a,
 					 unsigned int rates_b);
+unsigned int snd_pcm_rate_range_to_bits(unsigned int rate_min,
+					unsigned int rate_max);
 
 /**
  * snd_pcm_set_runtime_buffer - Set the PCM runtime buffer
diff --git a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c
index ebe8444..0b98f51 100644
--- a/sound/core/pcm_misc.c
+++ b/sound/core/pcm_misc.c
@@ -565,3 +565,30 @@  unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a,
 	return rates_a & rates_b;
 }
 EXPORT_SYMBOL_GPL(snd_pcm_rate_mask_intersect);
+
+/**
+ * snd_pcm_rate_range_to_bits - converts rate range to SNDRV_PCM_RATE_xxx bit
+ * @rate_min: the minimum sample rate
+ * @rate_max: the maximum sample rate
+ *
+ * Return: The SNDRV_PCM_RATE_xxx flag that corresponds to the given rate range,
+ * or SNDRV_PCM_RATE_KNOT for an unknown range.
+ */
+unsigned int snd_pcm_rate_range_to_bits(unsigned int rate_min,
+	unsigned int rate_max)
+{
+	unsigned int rates = 0;
+	int i;
+
+	for (i = 0; i < snd_pcm_known_rates.count; i++) {
+		if (snd_pcm_known_rates.list[i] >= rate_min
+			&& snd_pcm_known_rates.list[i] <= rate_max)
+			rates |= 1 << i;
+	}
+
+	if (!rates)
+		rates = SNDRV_PCM_RATE_KNOT;
+
+	return rates;
+}
+EXPORT_SYMBOL_GPL(snd_pcm_rate_range_to_bits);