]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Added snd_pcm_build_linear_format
authorAbramo Bagnara <abramo@alsa-project.org>
Sat, 25 Dec 1999 15:22:21 +0000 (15:22 +0000)
committerAbramo Bagnara <abramo@alsa-project.org>
Sat, 25 Dec 1999 15:22:21 +0000 (15:22 +0000)
include/pcm.h
src/pcm/pcm_misc.c

index be487eb688857813c1d39b25448f70b6cdf92682..32566e0b5a526beee321be7540bdb2ff1f4bf823 100644 (file)
@@ -56,6 +56,7 @@ int snd_pcm_format_linear(int format);
 int snd_pcm_format_little_endian(int format);
 int snd_pcm_format_big_endian(int format);
 int snd_pcm_format_width(int format);          /* in bits */
+int snd_pcm_build_linear_format(int width, int unsignd, int big_endian);
 ssize_t snd_pcm_format_size(int format, size_t samples);
 const char *snd_pcm_get_format_name(int format);
 
index 30a903d355bb6c82085c46ad748c3cd210f0e948..f4cf49ada0f86f5cfd1f219585630e813e81e270 100644 (file)
@@ -104,9 +104,9 @@ int snd_pcm_format_big_endian(int format)
        int val;
 
        val = snd_pcm_format_little_endian(format);
-       if (val >= 0)
-               val ^= 1;
-       return val;
+       if (val < 0)
+               return val;
+       return !val;
 }
 
 int snd_pcm_format_width(int format)
@@ -227,3 +227,43 @@ const char *snd_pcm_get_format_name(int format)
                return "Unknown";
        return formats[format];
 }
+
+static int linear_formats[4][2][2] = {
+       SND_PCM_SFMT_S8,
+       SND_PCM_SFMT_U8,
+       SND_PCM_SFMT_S8,
+       SND_PCM_SFMT_U8,
+       SND_PCM_SFMT_S16_LE,
+       SND_PCM_SFMT_S16_BE,
+       SND_PCM_SFMT_U16_LE,
+       SND_PCM_SFMT_U16_BE,
+       SND_PCM_SFMT_S24_LE,
+       SND_PCM_SFMT_S24_BE,
+       SND_PCM_SFMT_U24_LE,
+       SND_PCM_SFMT_U24_BE,
+       SND_PCM_SFMT_S32_LE,
+       SND_PCM_SFMT_S32_BE,
+       SND_PCM_SFMT_U32_LE,
+       SND_PCM_SFMT_U32_BE
+};
+
+int snd_pcm_build_linear_format(int width, int unsignd, int big_endian)
+{
+       switch (width) {
+       case 8:
+               width = 0;
+               break;
+       case 16:
+               width = 1;
+               break;
+       case 24:
+               width = 2;
+               break;
+       case 32:
+               width = 3;
+               break;
+       default:
+               return -1;
+       }
+       return linear_formats[width][!!unsignd][!!big_endian];
+}