History

ALSA: pcm: clarify and fix default msbits value for all formats

Return used most significant bits from sample bit-width rather than the whole physical sample word size. The starting bit offset is defined in the format itself. The behaviour is not changed for 32-bit formats like S32_LE. But with this change - msbits value 24 instead 32 is returned for 24-bit formats like S24_LE etc. Also, commit 2112aa034907 ("ALSA: pcm: Introduce MSBITS subformat interface") compares sample bit-width not physical sample bit-width to reset MSBITS_MAX bit from the subformat bitmask. Probably no applications are using msbits value for other than S32_LE/U32_LE formats, because no drivers are reducing msbits value for other formats (with the msb offset) at the moment. For sanity, increase PCM protocol version, letting the user space to detect the changed behaviour.

Jaroslav Kysela committed 2 years ago

Commit 85df6b51 parent 67c3d772 files · +7 −2Browse files

Showing the changes to include/uapi (1 of 2 files). Show all

Unified · Split

include/uapi/sound/asound.h+2−2
@@ -142,7 +142,7 @@ struct snd_hwdep_dsp_image { · 141 unmodified lines
142142 * *
143143 *****************************************************************************/
144144
145−#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 16)
145+#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 17)
146146
147147 typedef unsigned long snd_pcm_uframes_t;
148148 typedef signed long snd_pcm_sframes_t;
@@ -416,7 +416,7 @@ struct snd_pcm_hw_params { · 267 unmodified lines
416416 unsigned int rmask; /* W: requested masks */
417417 unsigned int cmask; /* R: changed masks */
418418 unsigned int info; /* R: Info flags for returned setup */
419− unsigned int msbits; /* R: used most significant bits */
419+ unsigned int msbits; /* R: used most significant bits (in sample bit-width) */
420420 unsigned int rate_num; /* R: rate numerator */
421421 unsigned int rate_den; /* R: rate denominator */
422422 snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */