changeset 3187:360e92f3211d

alsa-ng: Apparently 24bit values are padded to 32bit, so we need to tell ALSA that. The FMT_*24_* constants are misleading.
author William Pitcock <nenolod@atheme.org>
date Fri, 19 Jun 2009 08:38:14 -0500
parents 2e988f44b85d
children 68bb898b8ae0
files src/alsa-ng/alsa-util.c
diffstat 1 files changed, 17 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/alsa-ng/alsa-util.c	Fri Jun 19 08:23:51 2009 -0500
+++ b/src/alsa-ng/alsa-util.c	Fri Jun 19 08:38:14 2009 -0500
@@ -21,12 +21,23 @@
 
 static alsaplug_format_mapping_t alsaplug_format_conv_tbl[] = {
     {FMT_FLOAT,  SND_PCM_FORMAT_FLOAT},
-    {FMT_S24_LE, SND_PCM_FORMAT_S24_LE},
-    {FMT_S24_BE, SND_PCM_FORMAT_S24_BE},
-    {FMT_S24_NE, SND_PCM_FORMAT_S24},
-    {FMT_U24_LE, SND_PCM_FORMAT_U24_LE},
-    {FMT_U24_BE, SND_PCM_FORMAT_U24_BE},
-    {FMT_U24_NE, SND_PCM_FORMAT_U24},
+    {FMT_S32_LE, SND_PCM_FORMAT_S32_LE},
+    {FMT_S32_BE, SND_PCM_FORMAT_S32_BE},
+    {FMT_S32_NE, SND_PCM_FORMAT_S32},
+    {FMT_S24_LE, SND_PCM_FORMAT_S24_3LE},
+    {FMT_S24_BE, SND_PCM_FORMAT_S24_3BE},
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    {FMT_S24_NE, SND_PCM_FORMAT_S24_3LE},
+#else
+    {FMT_S24_NE, SND_PCM_FORMAT_S24_3BE},
+#endif
+    {FMT_U24_LE, SND_PCM_FORMAT_U24_3LE},
+    {FMT_U24_BE, SND_PCM_FORMAT_U24_3BE},
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    {FMT_U24_NE, SND_PCM_FORMAT_U24_3LE},
+#else
+    {FMT_U24_NE, SND_PCM_FORMAT_U24_3BE},
+#endif
     {FMT_S16_LE, SND_PCM_FORMAT_S16_LE},
     {FMT_S16_BE, SND_PCM_FORMAT_S16_BE},
     {FMT_S16_NE, SND_PCM_FORMAT_S16},