ALSA: pcm: Define G723 3-bit and 5-bit formats
authorBen Collins <bcollins@bluecherry.net>
Fri, 28 May 2010 15:43:45 +0000 (11:43 -0400)
committerTakashi Iwai <tiwai@suse.de>
Mon, 31 May 2010 07:10:03 +0000 (09:10 +0200)
This defines the 24bps and 40bps (8khz sample rate) G.723 codec
formats. They are going to be used once I submit the driver for
an mpeg4/g723 compression card.

I've updated the signed value to -1 as per Takashi's comments
since these are non-linear formats.

Signed-off-by: Ben Collins <bcollins@bluecherry.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/asound.h
include/sound/pcm.h
sound/core/pcm_misc.c

index 9f1eecf99e6b691d6072be6b0f47a3ff7240d5d4..a1803ecea34deb080faa168f9070783eee624f00 100644 (file)
@@ -212,7 +212,11 @@ typedef int __bitwise snd_pcm_format_t;
 #define        SNDRV_PCM_FORMAT_S18_3BE        ((__force snd_pcm_format_t) 41) /* in three bytes */
 #define        SNDRV_PCM_FORMAT_U18_3LE        ((__force snd_pcm_format_t) 42) /* in three bytes */
 #define        SNDRV_PCM_FORMAT_U18_3BE        ((__force snd_pcm_format_t) 43) /* in three bytes */
-#define        SNDRV_PCM_FORMAT_LAST           SNDRV_PCM_FORMAT_U18_3BE
+#define        SNDRV_PCM_FORMAT_G723_24        ((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */
+#define        SNDRV_PCM_FORMAT_G723_24_1B     ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */
+#define        SNDRV_PCM_FORMAT_G723_40        ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */
+#define        SNDRV_PCM_FORMAT_G723_40_1B     ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */
+#define        SNDRV_PCM_FORMAT_LAST           SNDRV_PCM_FORMAT_G723_40_1B
 
 #ifdef SNDRV_LITTLE_ENDIAN
 #define        SNDRV_PCM_FORMAT_S16            SNDRV_PCM_FORMAT_S16_LE
index dd76cdede64dce39cb03cf6fc2bff105315fece3..07fd630db88dab19f1ccbc35e09b90f259843563 100644 (file)
@@ -174,6 +174,10 @@ struct snd_pcm_ops {
 #define SNDRV_PCM_FMTBIT_U18_3LE       (1ULL << SNDRV_PCM_FORMAT_U18_3LE)
 #define SNDRV_PCM_FMTBIT_S18_3BE       (1ULL << SNDRV_PCM_FORMAT_S18_3BE)
 #define SNDRV_PCM_FMTBIT_U18_3BE       (1ULL << SNDRV_PCM_FORMAT_U18_3BE)
+#define SNDRV_PCM_FMTBIT_G723_24       (1ULL << SNDRV_PCM_FORMAT_G723_24)
+#define SNDRV_PCM_FMTBIT_G723_24_1B    (1ULL << SNDRV_PCM_FORMAT_G723_24_1B)
+#define SNDRV_PCM_FMTBIT_G723_40       (1ULL << SNDRV_PCM_FORMAT_G723_40)
+#define SNDRV_PCM_FMTBIT_G723_40_1B    (1ULL << SNDRV_PCM_FORMAT_G723_40_1B)
 
 #ifdef SNDRV_LITTLE_ENDIAN
 #define SNDRV_PCM_FMTBIT_S16           SNDRV_PCM_FMTBIT_S16_LE
index ea2bf82c93730505768c28f00174d6484ac2bcf9..434af3c56d52111c486301b3a7e483ab17806eb8 100644 (file)
@@ -128,6 +128,14 @@ static struct pcm_format_data pcm_formats[SNDRV_PCM_FORMAT_LAST+1] = {
                .width = 4, .phys = 4, .le = -1, .signd = -1,
                .silence = {},
        },
+       [SNDRV_PCM_FORMAT_G723_24] = {
+               .width = 3, .phys = 3, .le = -1, .signd = -1,
+               .silence = {},
+       },
+       [SNDRV_PCM_FORMAT_G723_40] = {
+               .width = 5, .phys = 5, .le = -1, .signd = -1,
+               .silence = {},
+       },
        /* FIXME: the following three formats are not defined properly yet */
        [SNDRV_PCM_FORMAT_MPEG] = {
                .le = -1, .signd = -1,
@@ -186,6 +194,14 @@ static struct pcm_format_data pcm_formats[SNDRV_PCM_FORMAT_LAST+1] = {
                .width = 18, .phys = 24, .le = 0, .signd = 0,
                .silence = { 0x02, 0x00, 0x00 },
        },
+       [SNDRV_PCM_FORMAT_G723_24_1B] = {
+               .width = 3, .phys = 8, .le = -1, .signd = -1,
+               .silence = {},
+       },
+       [SNDRV_PCM_FORMAT_G723_40_1B] = {
+               .width = 5, .phys = 8, .le = -1, .signd = -1,
+               .silence = {},
+       },
 };