Add pcm_params_set_min/max and update comments
authorPaul McLean <pmclean@google.com>
Fri, 21 Mar 2014 22:27:34 +0000 (15:27 -0700)
committerGlenn Kasten <gkasten@google.com>
Mon, 31 Mar 2014 20:20:20 +0000 (20:20 +0000)
Change-Id: I40040a7e94689dcf6bf9d0bf0d182f66b151d530

include/tinyalsa/asoundlib.h
pcm.c

index 03e3c13cfd572f324e92ff406343ed74d64be2c1..392e4970c52f91719c9873d3561078f1f13f2ed7 100644 (file)
@@ -70,11 +70,11 @@ struct pcm;
 
 /* Bit formats */
 enum pcm_format {
-    PCM_FORMAT_S16_LE = 0,
-    PCM_FORMAT_S32_LE,
-    PCM_FORMAT_S8,
-    PCM_FORMAT_S24_LE,
-    PCM_FORMAT_S24_3LE,
+    PCM_FORMAT_S16_LE = 0,  /* 16-bit signed */
+    PCM_FORMAT_S32_LE,      /* 32-bit signed */
+    PCM_FORMAT_S8,          /* 8-bit signed */
+    PCM_FORMAT_S24_LE,      /* 24-bits in 4-bytes */
+    PCM_FORMAT_S24_3LE,     /* 24-bits in 3-bytes */
 
     PCM_FORMAT_MAX,
 };
@@ -161,8 +161,12 @@ struct pcm_mask *pcm_params_get_mask(struct pcm_params *pcm_params,
         enum pcm_param param);
 unsigned int pcm_params_get_min(struct pcm_params *pcm_params,
                                 enum pcm_param param);
+void pcm_params_set_min(struct pcm_params *pcm_params,
+                                enum pcm_param param, unsigned int val);
 unsigned int pcm_params_get_max(struct pcm_params *pcm_params,
                                 enum pcm_param param);
+void pcm_params_set_max(struct pcm_params *pcm_params,
+                                enum pcm_param param, unsigned int val);
 
 /* Set and get config */
 int pcm_get_config(struct pcm *pcm, struct pcm_config *config);
diff --git a/pcm.c b/pcm.c
index 7c05a87e7039cb2543a40aec4a66083692e7776b..662e8a1d96390ef8161b692ef21fbeaf5c086fc9 100644 (file)
--- a/pcm.c
+++ b/pcm.c
@@ -102,6 +102,14 @@ static unsigned int param_get_min(struct snd_pcm_hw_params *p, int n)
     return 0;
 }
 
+static void param_set_max(struct snd_pcm_hw_params *p, int n, unsigned int val)
+{
+    if (param_is_interval(n)) {
+        struct snd_interval *i = param_to_interval(p, n);
+        i->max = val;
+    }
+}
+
 static unsigned int param_get_max(struct snd_pcm_hw_params *p, int n)
 {
     if (param_is_interval(n)) {
@@ -595,6 +603,22 @@ unsigned int pcm_params_get_min(struct pcm_params *pcm_params,
     return param_get_min(params, p);
 }
 
+void pcm_params_set_min(struct pcm_params *pcm_params,
+                                enum pcm_param param, unsigned int val)
+{
+    struct snd_pcm_hw_params *params = (struct snd_pcm_hw_params *)pcm_params;
+    int p;
+
+    if (!params)
+        return;
+
+    p = pcm_param_to_alsa(param);
+    if (p < 0)
+        return;
+
+    param_set_min(params, p, val);
+}
+
 unsigned int pcm_params_get_max(struct pcm_params *pcm_params,
                                 enum pcm_param param)
 {
@@ -611,6 +635,22 @@ unsigned int pcm_params_get_max(struct pcm_params *pcm_params,
     return param_get_max(params, p);
 }
 
+void pcm_params_set_max(struct pcm_params *pcm_params,
+                                enum pcm_param param, unsigned int val)
+{
+    struct snd_pcm_hw_params *params = (struct snd_pcm_hw_params *)pcm_params;
+    int p;
+
+    if (!params)
+        return;
+
+    p = pcm_param_to_alsa(param);
+    if (p < 0)
+        return;
+
+    param_set_max(params, p, val);
+}
+
 int pcm_close(struct pcm *pcm)
 {
     if (pcm == &bad_pcm)
@@ -679,7 +719,6 @@ struct pcm *pcm_open(unsigned int card, unsigned int device,
     param_set_int(&params, SNDRV_PCM_HW_PARAM_RATE, config->rate);
 
     if (flags & PCM_NOIRQ) {
-
         if (!(flags & PCM_MMAP)) {
             oops(pcm, -EINVAL, "noirq only currently supported with mmap().");
             goto fail;
@@ -691,10 +730,10 @@ struct pcm *pcm_open(unsigned int card, unsigned int device,
 
     if (flags & PCM_MMAP)
         param_set_mask(&params, SNDRV_PCM_HW_PARAM_ACCESS,
-                   SNDRV_PCM_ACCESS_MMAP_INTERLEAVED);
+                       SNDRV_PCM_ACCESS_MMAP_INTERLEAVED);
     else
         param_set_mask(&params, SNDRV_PCM_HW_PARAM_ACCESS,
-                   SNDRV_PCM_ACCESS_RW_INTERLEAVED);
+                       SNDRV_PCM_ACCESS_RW_INTERLEAVED);
 
     if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, &params)) {
         oops(pcm, errno, "cannot set hw params");
@@ -716,7 +755,6 @@ struct pcm *pcm_open(unsigned int card, unsigned int device,
         }
     }
 
-
     memset(&sparams, 0, sizeof(sparams));
     sparams.tstamp_mode = SNDRV_PCM_TSTAMP_ENABLE;
     sparams.period_step = 1;
@@ -756,7 +794,7 @@ struct pcm *pcm_open(unsigned int card, unsigned int device,
     pcm->boundary = sparams.boundary = pcm->buffer_size;
 
     while (pcm->boundary * 2 <= INT_MAX - pcm->buffer_size)
-               pcm->boundary *= 2;
+        pcm->boundary *= 2;
 
     if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_SW_PARAMS, &sparams)) {
         oops(pcm, errno, "cannot set sw params");