aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul McLean <pmclean@google.com>2014-04-01 15:45:24 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-04-01 15:45:24 +0000
commitc6d37224e75b68a70a852fd78f88e38124d1781c (patch)
tree9f5d8de0c7011f6f02276fd18e78614cc1296d81
parent59610d55ac18acd39cff033d21c74745ef2854b3 (diff)
parentb25ece4c48ed459c83320343307d8c827ebe06a4 (diff)
downloadandroid_external_tinyalsa-c6d37224e75b68a70a852fd78f88e38124d1781c.tar.gz
android_external_tinyalsa-c6d37224e75b68a70a852fd78f88e38124d1781c.tar.bz2
android_external_tinyalsa-c6d37224e75b68a70a852fd78f88e38124d1781c.zip
Merge "Add pcm_params_set_min/max and update comments"
-rw-r--r--include/tinyalsa/asoundlib.h14
-rw-r--r--pcm.c48
2 files changed, 52 insertions, 10 deletions
diff --git a/include/tinyalsa/asoundlib.h b/include/tinyalsa/asoundlib.h
index 1083dba..de9dde7 100644
--- a/include/tinyalsa/asoundlib.h
+++ b/include/tinyalsa/asoundlib.h
@@ -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);
/* Converts the pcm parameters to a human readable string.
* The string parameter is a caller allocated buffer of size bytes,
diff --git a/pcm.c b/pcm.c
index 5ec68ec..6d85839 100644
--- a/pcm.c
+++ b/pcm.c
@@ -180,6 +180,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)) {
@@ -673,6 +681,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)
{
@@ -689,6 +713,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);
+}
+
static int pcm_mask_test(struct pcm_mask *m, unsigned int index)
{
const unsigned int bitshift = 5; /* for 32 bit integer */
@@ -838,7 +878,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;
@@ -850,10 +889,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");
@@ -875,7 +914,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;
@@ -915,7 +953,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");