]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: Add MSBITS subformat options
authorCezary Rojewski <cezary.rojewski@intel.com>
Fri, 4 Aug 2023 08:13:40 +0000 (10:13 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 8 Dec 2023 19:03:46 +0000 (20:03 +0100)
Improve granularity of format selection for S32/U32 formats by adding
masks representing 20, 24 and 32 most significant bits.

Closes: https://github.com/alsa-project/alsa-lib/pull/342
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
include/pcm.h
include/sound/uapi/asound.h
src/pcm/pcm.c
src/pcm/pcm_params.c

index f18620bed63101db07f5698410ae33f70e4455fb..102ff8127d052a46eea737e2f779dc9b6ca0dd3d 100644 (file)
@@ -286,7 +286,13 @@ typedef enum _snd_pcm_subformat {
        SND_PCM_SUBFORMAT_UNKNOWN = -1,
        /** Standard */
        SND_PCM_SUBFORMAT_STD = 0,
-       SND_PCM_SUBFORMAT_LAST = SND_PCM_SUBFORMAT_STD
+       /** Maximum bits based on PCM format */
+       SND_PCM_SUBFORMAT_MSBITS_MAX = 1,
+       /** 20 most significant bits */
+       SND_PCM_SUBFORMAT_MSBITS_20 = 2,
+       /** 24 most significant bits */
+       SND_PCM_SUBFORMAT_MSBITS_24 = 3,
+       SND_PCM_SUBFORMAT_LAST = SND_PCM_SUBFORMAT_MSBITS_24
 } snd_pcm_subformat_t;
 
 /** PCM state */
index 32095ef79cab1dc8ad140aba7857fdcf36069e57..f3b2b94ddfd6dd176b76fc10d1f9cc6b01a217bf 100644 (file)
@@ -274,7 +274,10 @@ typedef int __bitwise snd_pcm_format_t;
 
 typedef int __bitwise snd_pcm_subformat_t;
 #define        SNDRV_PCM_SUBFORMAT_STD         ((snd_pcm_subformat_t) 0)
-#define        SNDRV_PCM_SUBFORMAT_LAST        SNDRV_PCM_SUBFORMAT_STD
+#define        SNDRV_PCM_SUBFORMAT_MSBITS_MAX  ((snd_pcm_subformat_t) 1)
+#define        SNDRV_PCM_SUBFORMAT_MSBITS_20   ((snd_pcm_subformat_t) 2)
+#define        SNDRV_PCM_SUBFORMAT_MSBITS_24   ((snd_pcm_subformat_t) 3)
+#define        SNDRV_PCM_SUBFORMAT_LAST        SNDRV_PCM_SUBFORMAT_MSBITS_24
 
 #define SNDRV_PCM_INFO_MMAP            0x00000001      /* hardware supports mmap */
 #define SNDRV_PCM_INFO_MMAP_VALID      0x00000002      /* period data are valid during transfer */
index 8aae5afd525686118bb178ff99b6b8bc1261dd41..4bb5c759930e49de6df7cee8407b3b2e0ddf84ae 100644 (file)
@@ -2070,10 +2070,16 @@ static const char *const snd_pcm_type_names[] = {
 
 static const char *const snd_pcm_subformat_names[] = {
        SUBFORMAT(STD), 
+       SUBFORMAT(MSBITS_MAX),
+       SUBFORMAT(MSBITS_20),
+       SUBFORMAT(MSBITS_24),
 };
 
 static const char *const snd_pcm_subformat_descriptions[] = {
        SUBFORMATD(STD, "Standard"), 
+       SUBFORMATD(MSBITS_MAX, "Maximum based on PCM format"),
+       SUBFORMATD(MSBITS_20, "20 most significant bits"),
+       SUBFORMATD(MSBITS_24, "24 most significant bits"),
 };
 
 static const char *const snd_pcm_start_mode_names[] = {
index 26c701328bfd42ee1e107151e8f0a934cb2eb660..c2f7863436c0563ea7e9755a9bc0794bb95a2bbe 100644 (file)
@@ -2008,7 +2008,10 @@ static const snd_mask_t refine_masks[SND_PCM_HW_PARAM_LAST_MASK - SND_PCM_HW_PAR
        },
        [SND_PCM_HW_PARAM_SUBFORMAT - SND_PCM_HW_PARAM_FIRST_MASK] = {
                .bits = {
-                       PCM_BIT(SNDRV_PCM_SUBFORMAT_STD)
+                       PCM_BIT(SNDRV_PCM_SUBFORMAT_STD) |
+                       PCM_BIT(SNDRV_PCM_SUBFORMAT_MSBITS_MAX) |
+                       PCM_BIT(SNDRV_PCM_SUBFORMAT_MSBITS_20) |
+                       PCM_BIT(SNDRV_PCM_SUBFORMAT_MSBITS_24),
                },
        },
 };