Update to latest tinyalsa for 32_LE support
authorSimon Wilson <simonwilson@google.com>
Thu, 16 Jun 2011 00:20:55 +0000 (17:20 -0700)
committerSimon Wilson <simonwilson@google.com>
Thu, 16 Jun 2011 00:22:14 +0000 (17:22 -0700)
bc03b62 pcm: fix TODOs for 32 bit support

Change-Id: I9f4d83c808a664aed5cefae271e3ad7b5c522c99

pcm.c

diff --git a/pcm.c b/pcm.c
index 1fab6f47214f7939ec732de211de31a23ab579c7..adc04957857de9c2af7283360c519c559872836e 100644 (file)
--- a/pcm.c
+++ b/pcm.c
@@ -165,6 +165,28 @@ static int oops(struct pcm *pcm, int e, const char *fmt, ...)
     return -1;
 }
 
+static unsigned int pcm_format_to_alsa(enum pcm_format format)
+{
+    switch (format) {
+    case PCM_FORMAT_S32_LE:
+        return SNDRV_PCM_FORMAT_S32_LE;
+    default:
+    case PCM_FORMAT_S16_LE:
+        return SNDRV_PCM_FORMAT_S16_LE;
+    };
+}
+
+static unsigned int pcm_format_to_bits(enum pcm_format format)
+{
+    switch (format) {
+    case PCM_FORMAT_S32_LE:
+        return 32;
+    default:
+    case PCM_FORMAT_S16_LE:
+        return 16;
+    };
+}
+
 int pcm_write(struct pcm *pcm, void *data, unsigned int count)
 {
     struct snd_xferi x;
@@ -173,7 +195,8 @@ int pcm_write(struct pcm *pcm, void *data, unsigned int count)
         return -EINVAL;
 
     x.buf = data;
-    x.frames = count / (pcm->config.channels * 2); /* TODO: handle 32bit */
+    x.frames = count / (pcm->config.channels *
+                        pcm_format_to_bits(pcm->config.format) / 8);
 
     for (;;) {
         if (!pcm->running) {
@@ -205,7 +228,8 @@ int pcm_read(struct pcm *pcm, void *data, unsigned int count)
         return -EINVAL;
 
     x.buf = data;
-    x.frames = count / (pcm->config.channels * 2); /* TODO: handle 32bit */
+    x.frames = count / (pcm->config.channels *
+                        pcm_format_to_bits(pcm->config.format) / 8);
 
     for (;;) {
         if (!pcm->running) {
@@ -245,28 +269,6 @@ int pcm_close(struct pcm *pcm)
     return 0;
 }
 
-static unsigned int pcm_format_to_alsa(enum pcm_format format)
-{
-    switch (format) {
-    case PCM_FORMAT_S32_LE:
-        return SNDRV_PCM_FORMAT_S32_LE;
-    default:
-    case PCM_FORMAT_S16_LE:
-        return SNDRV_PCM_FORMAT_S16_LE;
-    };
-}
-
-static unsigned int pcm_format_to_bits(enum pcm_format format)
-{
-    switch (format) {
-    case PCM_FORMAT_S32_LE:
-        return 32;
-    default:
-    case PCM_FORMAT_S16_LE:
-        return 16;
-    };
-}
-
 struct pcm *pcm_open(unsigned int card, unsigned int device,
                      unsigned int flags, struct pcm_config *config)
 {