diff options
author | Paul McLean <pmclean@google.com> | 2014-04-01 15:45:24 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-04-01 15:45:24 +0000 |
commit | c6d37224e75b68a70a852fd78f88e38124d1781c (patch) | |
tree | 9f5d8de0c7011f6f02276fd18e78614cc1296d81 | |
parent | 59610d55ac18acd39cff033d21c74745ef2854b3 (diff) | |
parent | b25ece4c48ed459c83320343307d8c827ebe06a4 (diff) | |
download | android_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.h | 14 | ||||
-rw-r--r-- | pcm.c | 48 |
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, @@ -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(¶ms, 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(¶ms, SNDRV_PCM_HW_PARAM_ACCESS, - SNDRV_PCM_ACCESS_MMAP_INTERLEAVED); + SNDRV_PCM_ACCESS_MMAP_INTERLEAVED); else param_set_mask(¶ms, SNDRV_PCM_HW_PARAM_ACCESS, - SNDRV_PCM_ACCESS_RW_INTERLEAVED); + SNDRV_PCM_ACCESS_RW_INTERLEAVED); if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, ¶ms)) { 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"); |