]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: add new 32-bit DSD sample format
authorJurgen Kramer <gtmkramer@xs4all.nl>
Wed, 10 Sep 2014 07:00:28 +0000 (09:00 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 10 Sep 2014 07:10:50 +0000 (09:10 +0200)
Add the new DSD_U32_LE sample format to alsa-lib.

NB include/pcm.h and include/sound/asound.h are updated so a new sync with the
kernel headers is not needed

Signed-off-by: Jurgen Kramer <gtmkramer@xs4all.nl>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/pcm.h
include/sound/asound.h
src/pcm/pcm.c
src/pcm/pcm_misc.c

index 11e9f0dfba13b1196289e5afb398b09eb3836aa0..db88ad5ee41ae22b031075960b78ab55cad5778c 100644 (file)
@@ -211,7 +211,9 @@ typedef enum _snd_pcm_format {
        SND_PCM_FORMAT_DSD_U8,
        /* Direct Stream Digital (DSD) in 2-byte samples (x16) */
        SND_PCM_FORMAT_DSD_U16_LE,
-       SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U16_LE,
+       /* Direct Stream Digital (DSD) in 4-byte samples (x32) */
+       SND_PCM_FORMAT_DSD_U32_LE,
+       SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U32_LE,
 
 #if __BYTE_ORDER == __LITTLE_ENDIAN
        /** Signed 16 bit CPU endian */
index 32168f7ffce3ce03fe19bb8f187cfb6321710976..6ee586728df97a0fc335a3c314e0828ac970023f 100644 (file)
@@ -219,7 +219,8 @@ typedef int __bitwise snd_pcm_format_t;
 #define        SNDRV_PCM_FORMAT_G723_40_1B     ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */
 #define        SNDRV_PCM_FORMAT_DSD_U8         ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
 #define        SNDRV_PCM_FORMAT_DSD_U16_LE     ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
-#define        SNDRV_PCM_FORMAT_LAST           SNDRV_PCM_FORMAT_DSD_U16_LE
+#define        SNDRV_PCM_FORMAT_DSD_U32_LE     ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
+#define        SNDRV_PCM_FORMAT_LAST           SNDRV_PCM_FORMAT_DSD_U32_LE
 
 #ifdef SNDRV_LITTLE_ENDIAN
 #define        SNDRV_PCM_FORMAT_S16            SNDRV_PCM_FORMAT_S16_LE
index 1399a5b2e671530424d35d9a6bdd32ff00f190e8..2e2433829016c5ff4866aa511ac3dd513d544cc2 100644 (file)
@@ -1565,6 +1565,7 @@ static const char *const snd_pcm_format_names[] = {
        FORMAT(G723_40_1B),
        FORMAT(DSD_U8),
        FORMAT(DSD_U16_LE),
+       FORMAT(DSD_U32_LE),
 };
 
 static const char *const snd_pcm_format_aliases[SND_PCM_FORMAT_LAST+1] = {
@@ -1624,6 +1625,7 @@ static const char *const snd_pcm_format_descriptions[] = {
        FORMATD(G723_40_1B, "G.723 (ADPCM) 40 kbit/s, 1 sample in 1 byte"),
        FORMATD(DSD_U8,  "Direct Stream Digital, 1-byte (x8), oldest bit in MSB"),
        FORMATD(DSD_U16_LE, "Direct Stream Digital, 2-byte (x16), little endian, oldest bits in MSB"),
+       FORMATD(DSD_U32_LE, "Direct Stream Digital, 4-byte (x32), little endian, oldest bits in MSB"),
 };
 
 static const char *const snd_pcm_type_names[] = {
index 46fc7719978efb05e438cc15649f9ce0bd7c530f..92721796aa1ff51b4d5d287eacd490567279beae 100644 (file)
@@ -64,6 +64,7 @@ int snd_pcm_format_signed(snd_pcm_format_t format)
        case SNDRV_PCM_FORMAT_U18_3BE:
        case SNDRV_PCM_FORMAT_DSD_U8:
        case SNDRV_PCM_FORMAT_DSD_U16_LE:
+       case SNDRV_PCM_FORMAT_DSD_U32_LE:
                return 0;
        default:
                return -EINVAL;
@@ -154,6 +155,7 @@ int snd_pcm_format_little_endian(snd_pcm_format_t format)
        case SNDRV_PCM_FORMAT_U18_3BE:
        case SNDRV_PCM_FORMAT_DSD_U8:
        case SNDRV_PCM_FORMAT_DSD_U16_LE:
+       case SNDRV_PCM_FORMAT_DSD_U32_LE:
                return 0;
        default:
                return -EINVAL;
@@ -232,6 +234,7 @@ int snd_pcm_format_width(snd_pcm_format_t format)
        case SNDRV_PCM_FORMAT_U32_BE:
        case SNDRV_PCM_FORMAT_FLOAT_LE:
        case SNDRV_PCM_FORMAT_FLOAT_BE:
+       case SNDRV_PCM_FORMAT_DSD_U32_LE:
                return 32;
        case SNDRV_PCM_FORMAT_FLOAT64_LE:
        case SNDRV_PCM_FORMAT_FLOAT64_BE:
@@ -292,6 +295,7 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format)
        case SNDRV_PCM_FORMAT_FLOAT_BE:
        case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
        case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
+       case SNDRV_PCM_FORMAT_DSD_U32_LE:
                return 32;
        case SNDRV_PCM_FORMAT_FLOAT64_LE:
        case SNDRV_PCM_FORMAT_FLOAT64_BE:
@@ -348,6 +352,7 @@ ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)
        case SNDRV_PCM_FORMAT_U32_BE:
        case SNDRV_PCM_FORMAT_FLOAT_LE:
        case SNDRV_PCM_FORMAT_FLOAT_BE:
+       case SNDRV_PCM_FORMAT_DSD_U32_LE:
                return samples * 4;
        case SNDRV_PCM_FORMAT_FLOAT64_LE:
        case SNDRV_PCM_FORMAT_FLOAT64_BE:
@@ -394,6 +399,7 @@ u_int64_t snd_pcm_format_silence_64(snd_pcm_format_t format)
                return 0x8080808080808080ULL;
        case SNDRV_PCM_FORMAT_DSD_U8:
        case SNDRV_PCM_FORMAT_DSD_U16_LE:
+       case SNDRV_PCM_FORMAT_DSD_U32_LE:
                return 0x6969696969696969ULL;
 #ifdef SNDRV_LITTLE_ENDIAN
        case SNDRV_PCM_FORMAT_U16_LE: