From 5b9db5b8889498581a9d719400b1279a3babb444 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 15:57:09 -0800 Subject: Added const specifier to params functions Funtions changed are: - pcm_params_get_mask - pcm_params_get_min - pcm_params_get_max --- include/tinyalsa/pcm.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index 3d9dfaa..1f02e9d 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -223,11 +223,11 @@ struct pcm_params *pcm_params_get(unsigned int card, unsigned int device, void pcm_params_free(struct pcm_params *pcm_params); -struct pcm_mask *pcm_params_get_mask(struct pcm_params *pcm_params, enum pcm_param param); +const struct pcm_mask *pcm_params_get_mask(const struct pcm_params *pcm_params, enum pcm_param param); -unsigned int pcm_params_get_min(struct pcm_params *pcm_params, enum pcm_param param); +unsigned int pcm_params_get_min(const struct pcm_params *pcm_params, enum pcm_param param); -unsigned int pcm_params_get_max(struct pcm_params *pcm_params, enum pcm_param param); +unsigned int pcm_params_get_max(const struct pcm_params *pcm_params, enum pcm_param param); struct pcm; -- cgit v1.2.3 From 2f387d2aa149118bec4c436056fc06d7c2f427c4 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 15:58:16 -0800 Subject: Added const specifier in several functions Functions changed are: - pcm_params_get_mask - pcm_params_get_min - pcm_params_get_max - param_get_mask - param_get_min - param_get_max --- src/pcm.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/pcm.c b/src/pcm.c index 1ce1a54..73debb4 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -64,6 +64,11 @@ static inline int param_is_interval(int p) (p <= SNDRV_PCM_HW_PARAM_LAST_INTERVAL); } +static inline const struct snd_interval *param_get_interval(const struct snd_pcm_hw_params *p, int n) +{ + return &(p->intervals[n - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL]); +} + static inline struct snd_interval *param_to_interval(struct snd_pcm_hw_params *p, int n) { return &(p->intervals[n - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL]); @@ -94,19 +99,19 @@ static void param_set_min(struct snd_pcm_hw_params *p, int n, unsigned int val) } } -static unsigned int param_get_min(struct snd_pcm_hw_params *p, int n) +static unsigned int param_get_min(const struct snd_pcm_hw_params *p, int n) { if (param_is_interval(n)) { - struct snd_interval *i = param_to_interval(p, n); + const struct snd_interval *i = param_get_interval(p, n); return i->min; } return 0; } -static unsigned int param_get_max(struct snd_pcm_hw_params *p, int n) +static unsigned int param_get_max(const struct snd_pcm_hw_params *p, int n) { if (param_is_interval(n)) { - struct snd_interval *i = param_to_interval(p, n); + const struct snd_interval *i = param_get_interval(p, n); return i->max; } return 0; @@ -696,7 +701,7 @@ static int pcm_param_to_alsa(enum pcm_param param) * Otherwise, the mask associated with @p param is returned. * @ingroup libtinyalsa-pcm */ -struct pcm_mask *pcm_params_get_mask(struct pcm_params *pcm_params, +const struct pcm_mask *pcm_params_get_mask(const struct pcm_params *pcm_params, enum pcm_param param) { int p; @@ -710,7 +715,7 @@ struct pcm_mask *pcm_params_get_mask(struct pcm_params *pcm_params, return NULL; } - return (struct pcm_mask *)param_to_mask(params, p); + return (const struct pcm_mask *)param_to_mask(params, p); } /** Get the minimum of a specified PCM parameter. @@ -719,7 +724,7 @@ struct pcm_mask *pcm_params_get_mask(struct pcm_params *pcm_params, * @returns On success, the parameter minimum. * On failure, zero. */ -unsigned int pcm_params_get_min(struct pcm_params *pcm_params, +unsigned int pcm_params_get_min(const struct pcm_params *pcm_params, enum pcm_param param) { struct snd_pcm_hw_params *params = (struct snd_pcm_hw_params *)pcm_params; @@ -741,10 +746,10 @@ unsigned int pcm_params_get_min(struct pcm_params *pcm_params, * @returns On success, the parameter maximum. * On failure, zero. */ -unsigned int pcm_params_get_max(struct pcm_params *pcm_params, +unsigned int pcm_params_get_max(const struct pcm_params *pcm_params, enum pcm_param param) { - struct snd_pcm_hw_params *params = (struct snd_pcm_hw_params *)pcm_params; + const struct snd_pcm_hw_params *params = (const struct snd_pcm_hw_params *)pcm_params; int p; if (!params) -- cgit v1.2.3 From 319a84845148f562f21d309b294d8ed1b7d86262 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 15:59:17 -0800 Subject: Added const specifier to mask The changed was brought on by to early commits to the PCM API. --- utils/tinypcminfo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/tinypcminfo.c b/utils/tinypcminfo.c index 5b8db1f..0dd381d 100644 --- a/utils/tinypcminfo.c +++ b/utils/tinypcminfo.c @@ -129,7 +129,7 @@ int main(int argc, char **argv) for (i = 0; i < 2; i++) { struct pcm_params *params; - struct pcm_mask *m; + const struct pcm_mask *m; unsigned int min; unsigned int max; -- cgit v1.2.3 From ba285cfbf416af5fbda1040e3c3ce74165e3e11c Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 16:06:29 -0800 Subject: Added const specifier in pcm_open The const specifier was added to the struct pcm_config argument. --- include/tinyalsa/pcm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index 1f02e9d..c2c67bb 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -234,7 +234,7 @@ struct pcm; struct pcm *pcm_open(unsigned int card, unsigned int device, unsigned int flags, - struct pcm_config *config); + const struct pcm_config *config); int pcm_close(struct pcm *pcm); -- cgit v1.2.3 From 94803b005511f8baf3281ec4e922be99f62b4186 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 16:07:14 -0800 Subject: Added const specifier in pcm_open Added const specifier to the struct pcm_config argument. Changed the way default values of the config structure are set and accessed. They're accessed through the pointer from the argument list and set through the pointer in the pcm structure. --- src/pcm.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/pcm.c b/src/pcm.c index 73debb4..29c69a7 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -808,7 +808,7 @@ int pcm_close(struct pcm *pcm) * @ingroup libtinyalsa-pcm */ struct pcm *pcm_open(unsigned int card, unsigned int device, - unsigned int flags, struct pcm_config *config) + unsigned int flags, const struct pcm_config *config) { struct pcm *pcm; struct snd_pcm_info info; @@ -823,14 +823,14 @@ struct pcm *pcm_open(unsigned int card, unsigned int device, if (config == NULL) { config = &pcm->config; - config->channels = 2; - config->rate = 48000; - config->period_size = 1024; - config->period_count = 4; - config->format = PCM_FORMAT_S16_LE; - config->start_threshold = config->period_count * config->period_size; - config->stop_threshold = config->period_count * config->period_size; - config->silence_threshold = 0; + pcm->config.channels = 2; + pcm->config.rate = 48000; + pcm->config.period_size = 1024; + pcm->config.period_count = 4; + pcm->config.format = PCM_FORMAT_S16_LE; + pcm->config.start_threshold = config->period_count * config->period_size; + pcm->config.stop_threshold = config->period_count * config->period_size; + pcm->config.silence_threshold = 0; } else { pcm->config = *config; } @@ -890,8 +890,8 @@ struct pcm *pcm_open(unsigned int card, unsigned int device, } /* get our refined hw_params */ - config->period_size = param_get_int(¶ms, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); - config->period_count = param_get_int(¶ms, SNDRV_PCM_HW_PARAM_PERIODS); + pcm->config.period_size = param_get_int(¶ms, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); + pcm->config.period_count = param_get_int(¶ms, SNDRV_PCM_HW_PARAM_PERIODS); pcm->buffer_size = config->period_count * config->period_size; if (flags & PCM_MMAP) { -- cgit v1.2.3 From 15d58481e7633281e4d13fdabd12e1cec2605752 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 17:46:29 -0800 Subject: added const specifier in function, pcm_is_ready --- include/tinyalsa/pcm.h | 2 +- src/pcm.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index c2c67bb..caa4d1f 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -238,7 +238,7 @@ struct pcm *pcm_open(unsigned int card, int pcm_close(struct pcm *pcm); -int pcm_is_ready(struct pcm *pcm); +int pcm_is_ready(const struct pcm *pcm); int pcm_get_file_descriptor(struct pcm *pcm); diff --git a/src/pcm.c b/src/pcm.c index 29c69a7..c32e8ab 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -979,7 +979,7 @@ fail_close: * Otherwise, the function returns one. * @ingroup libtinyalsa-pcm */ -int pcm_is_ready(struct pcm *pcm) +int pcm_is_ready(const struct pcm *pcm) { return pcm->fd >= 0; } -- cgit v1.2.3 From 147d7adec6ff293be328d6da2eb0d8d2419e9b34 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 17:50:31 -0800 Subject: Added const specifier in several functions pcm_get_file_descriptor pcm_get_error pcm_get_buffer_size pcm_frames_to_bytes pcm_bytes_to_frames pcm_get_subdevice --- include/tinyalsa/pcm.h | 12 ++++++------ src/pcm.c | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index caa4d1f..a6c95ce 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -240,21 +240,21 @@ int pcm_close(struct pcm *pcm); int pcm_is_ready(const struct pcm *pcm); -int pcm_get_file_descriptor(struct pcm *pcm); +int pcm_get_file_descriptor(const struct pcm *pcm); -const char *pcm_get_error(struct pcm *pcm); +const char *pcm_get_error(const struct pcm *pcm); unsigned int pcm_format_to_bits(enum pcm_format format); -unsigned int pcm_get_buffer_size(struct pcm *pcm); +unsigned int pcm_get_buffer_size(const struct pcm *pcm); -unsigned int pcm_frames_to_bytes(struct pcm *pcm, unsigned int frames); +unsigned int pcm_frames_to_bytes(const struct pcm *pcm, unsigned int frames); -unsigned int pcm_bytes_to_frames(struct pcm *pcm, unsigned int bytes); +unsigned int pcm_bytes_to_frames(const struct pcm *pcm, unsigned int bytes); int pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail, struct timespec *tstamp); -unsigned int pcm_get_subdevice(struct pcm *pcm); +unsigned int pcm_get_subdevice(const struct pcm *pcm); int pcm_write(struct pcm *pcm, const void *data, unsigned int count); diff --git a/src/pcm.c b/src/pcm.c index c32e8ab..540fd72 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -199,7 +199,7 @@ struct pcm { * @return The buffer size of the PCM. * @ingroup libtinyalsa-pcm */ -unsigned int pcm_get_buffer_size(struct pcm *pcm) +unsigned int pcm_get_buffer_size(const struct pcm *pcm) { return pcm->buffer_size; } @@ -210,7 +210,7 @@ unsigned int pcm_get_buffer_size(struct pcm *pcm) * @return The file descriptor of the PCM. * @ingroup libtinyalsa-pcm */ -int pcm_get_file_descriptor(struct pcm *pcm) +int pcm_get_file_descriptor(const struct pcm *pcm) { return pcm->fd; } @@ -221,7 +221,7 @@ int pcm_get_file_descriptor(struct pcm *pcm) * @return The error message of the last error that occured. * @ingroup libtinyalsa-pcm */ -const char* pcm_get_error(struct pcm *pcm) +const char* pcm_get_error(const struct pcm *pcm) { return pcm->error; } @@ -229,7 +229,7 @@ const char* pcm_get_error(struct pcm *pcm) /** Gets the subdevice on which the pcm has been opened. * @param pcm A PCM handle. * @return The subdevice on which the pcm has been opened */ -unsigned int pcm_get_subdevice(struct pcm *pcm) +unsigned int pcm_get_subdevice(const struct pcm *pcm) { return pcm->subdevice; } @@ -311,7 +311,7 @@ unsigned int pcm_format_to_bits(enum pcm_format format) * @return The number of frames that may fit into @p bytes * @ingroup libtinyalsa-pcm */ -unsigned int pcm_bytes_to_frames(struct pcm *pcm, unsigned int bytes) +unsigned int pcm_bytes_to_frames(const struct pcm *pcm, unsigned int bytes) { return bytes / (pcm->config.channels * (pcm_format_to_bits(pcm->config.format) >> 3)); @@ -323,7 +323,7 @@ unsigned int pcm_bytes_to_frames(struct pcm *pcm, unsigned int bytes) * @return The bytes occupied by @p frames. * @ingroup libtinyalsa-pcm */ -unsigned int pcm_frames_to_bytes(struct pcm *pcm, unsigned int frames) +unsigned int pcm_frames_to_bytes(const struct pcm *pcm, unsigned int frames) { return frames * pcm->config.channels * (pcm_format_to_bits(pcm->config.format) >> 3); -- cgit v1.2.3 From cac43a208d0297a55876c5926eefc1c2ab195067 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 18:11:24 -0800 Subject: Added const specifier for several mixer functions Functions changed are: - mixer_get_name - mixer_get_num_ctls - mixer_ctl_get_id - mixer_ctl_get_name - mixer_ctl_get_type - mixer_ctl_get_type_string - mixer_ctl_get_num_values - mixer_ctl_get_num_enums - mixer_ctl_get_enum_string - mixer_ctl_get_percent - mixer_ctl_get_value - mixer_ctl_get_array - mixer_ctl_get_range_min - mixer_ctl_get_range_max --- include/tinyalsa/mixer.h | 26 +++++++++++++------------- src/mixer.c | 30 +++++++++++++++--------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/include/tinyalsa/mixer.h b/include/tinyalsa/mixer.h index 4de6133..fb862f3 100644 --- a/include/tinyalsa/mixer.h +++ b/include/tinyalsa/mixer.h @@ -69,9 +69,9 @@ struct mixer *mixer_open(unsigned int card); void mixer_close(struct mixer *mixer); -const char *mixer_get_name(struct mixer *mixer); +const char *mixer_get_name(const struct mixer *mixer); -unsigned int mixer_get_num_ctls(struct mixer *mixer); +unsigned int mixer_get_num_ctls(const struct mixer *mixer); struct mixer_ctl *mixer_get_ctl(struct mixer *mixer, unsigned int id); @@ -81,17 +81,17 @@ struct mixer_ctl *mixer_get_ctl_by_name_and_index(struct mixer *mixer, const char *name, unsigned int index); -unsigned int mixer_ctl_get_id(struct mixer_ctl *ctl); +unsigned int mixer_ctl_get_id(const struct mixer_ctl *ctl); -const char *mixer_ctl_get_name(struct mixer_ctl *ctl); +const char *mixer_ctl_get_name(const struct mixer_ctl *ctl); -enum mixer_ctl_type mixer_ctl_get_type(struct mixer_ctl *ctl); +enum mixer_ctl_type mixer_ctl_get_type(const struct mixer_ctl *ctl); -const char *mixer_ctl_get_type_string(struct mixer_ctl *ctl); +const char *mixer_ctl_get_type_string(const struct mixer_ctl *ctl); -unsigned int mixer_ctl_get_num_values(struct mixer_ctl *ctl); +unsigned int mixer_ctl_get_num_values(const struct mixer_ctl *ctl); -unsigned int mixer_ctl_get_num_enums(struct mixer_ctl *ctl); +unsigned int mixer_ctl_get_num_enums(const struct mixer_ctl *ctl); const char *mixer_ctl_get_enum_string(struct mixer_ctl *ctl, unsigned int enum_id); @@ -102,13 +102,13 @@ const char *mixer_ctl_get_enum_string(struct mixer_ctl *ctl, unsigned int enum_i void mixer_ctl_update(struct mixer_ctl *ctl); /* Set and get mixer controls */ -int mixer_ctl_get_percent(struct mixer_ctl *ctl, unsigned int id); +int mixer_ctl_get_percent(const struct mixer_ctl *ctl, unsigned int id); int mixer_ctl_set_percent(struct mixer_ctl *ctl, unsigned int id, int percent); -int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id); +int mixer_ctl_get_value(const struct mixer_ctl *ctl, unsigned int id); -int mixer_ctl_get_array(struct mixer_ctl *ctl, void *array, size_t count); +int mixer_ctl_get_array(const struct mixer_ctl *ctl, void *array, size_t count); int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value); @@ -117,9 +117,9 @@ int mixer_ctl_set_array(struct mixer_ctl *ctl, const void *array, size_t count); int mixer_ctl_set_enum_by_string(struct mixer_ctl *ctl, const char *string); /* Determe range of integer mixer controls */ -int mixer_ctl_get_range_min(struct mixer_ctl *ctl); +int mixer_ctl_get_range_min(const struct mixer_ctl *ctl); -int mixer_ctl_get_range_max(struct mixer_ctl *ctl); +int mixer_ctl_get_range_max(const struct mixer_ctl *ctl); #if defined(__cplusplus) } /* extern "C" */ diff --git a/src/mixer.c b/src/mixer.c index 0fe9c99..5fed4a8 100644 --- a/src/mixer.c +++ b/src/mixer.c @@ -176,7 +176,7 @@ fail: * @returns The name of the mixer's card. * @ingroup libtinyalsa-mixer */ -const char *mixer_get_name(struct mixer *mixer) +const char *mixer_get_name(const struct mixer *mixer) { return (const char *)mixer->card_info.name; } @@ -186,7 +186,7 @@ const char *mixer_get_name(struct mixer *mixer) * @returns The number of mixer controls for the given mixer. * @ingroup libtinyalsa-mixer */ -unsigned int mixer_get_num_ctls(struct mixer *mixer) +unsigned int mixer_get_num_ctls(const struct mixer *mixer) { if (!mixer) return 0; @@ -263,7 +263,7 @@ void mixer_ctl_update(struct mixer_ctl *ctl) * On error, UINT_MAX is returned instead. * @ingroup libtinyalsa-mixer */ -unsigned int mixer_ctl_get_id(struct mixer_ctl *ctl) +unsigned int mixer_ctl_get_id(const struct mixer_ctl *ctl) { if (!ctl) return UINT_MAX; @@ -280,7 +280,7 @@ unsigned int mixer_ctl_get_id(struct mixer_ctl *ctl) * On error, NULL. * @ingroup libtinyalsa-mixer */ -const char *mixer_ctl_get_name(struct mixer_ctl *ctl) +const char *mixer_ctl_get_name(const struct mixer_ctl *ctl) { if (!ctl) return NULL; @@ -294,7 +294,7 @@ const char *mixer_ctl_get_name(struct mixer_ctl *ctl) * On failure, it returns @ref MIXER_CTL_TYPE_UNKNOWN * @ingroup libtinyalsa-mixer */ -enum mixer_ctl_type mixer_ctl_get_type(struct mixer_ctl *ctl) +enum mixer_ctl_type mixer_ctl_get_type(const struct mixer_ctl *ctl) { if (!ctl) return MIXER_CTL_TYPE_UNKNOWN; @@ -315,7 +315,7 @@ enum mixer_ctl_type mixer_ctl_get_type(struct mixer_ctl *ctl) * @returns On success, a string describing type of mixer control. * @ingroup libtinyalsa-mixer */ -const char *mixer_ctl_get_type_string(struct mixer_ctl *ctl) +const char *mixer_ctl_get_type_string(const struct mixer_ctl *ctl) { if (!ctl) return ""; @@ -336,7 +336,7 @@ const char *mixer_ctl_get_type_string(struct mixer_ctl *ctl) * @returns The number of values in the mixer control * @ingroup libtinyalsa-mixer */ -unsigned int mixer_ctl_get_num_values(struct mixer_ctl *ctl) +unsigned int mixer_ctl_get_num_values(const struct mixer_ctl *ctl) { if (!ctl) return 0; @@ -344,7 +344,7 @@ unsigned int mixer_ctl_get_num_values(struct mixer_ctl *ctl) return ctl->info.count; } -static int percent_to_int(struct snd_ctl_elem_info *ei, int percent) +static int percent_to_int(const struct snd_ctl_elem_info *ei, int percent) { if ((percent > 100) || (percent < 0)) { return -EINVAL; @@ -355,7 +355,7 @@ static int percent_to_int(struct snd_ctl_elem_info *ei, int percent) return ei->value.integer.min + (range * percent) / 100; } -static int int_to_percent(struct snd_ctl_elem_info *ei, int value) +static int int_to_percent(const struct snd_ctl_elem_info *ei, int value) { int range = (ei->value.integer.max - ei->value.integer.min); @@ -372,7 +372,7 @@ static int int_to_percent(struct snd_ctl_elem_info *ei, int value) * On failure, -EINVAL is returned. * @ingroup libtinyalsa-mixer */ -int mixer_ctl_get_percent(struct mixer_ctl *ctl, unsigned int id) +int mixer_ctl_get_percent(const struct mixer_ctl *ctl, unsigned int id) { if (!ctl || (ctl->info.type != SNDRV_CTL_ELEM_TYPE_INTEGER)) return -EINVAL; @@ -403,7 +403,7 @@ int mixer_ctl_set_percent(struct mixer_ctl *ctl, unsigned int id, int percent) * On failure, -EINVAL is returned. * @ingroup libtinyalsa-mixer */ -int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id) +int mixer_ctl_get_value(const struct mixer_ctl *ctl, unsigned int id) { struct snd_ctl_elem_value ev; int ret; @@ -449,7 +449,7 @@ int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id) * On failure, non-zero. * @ingroup libtinyalsa-mixer */ -int mixer_ctl_get_array(struct mixer_ctl *ctl, void *array, size_t count) +int mixer_ctl_get_array(const struct mixer_ctl *ctl, void *array, size_t count) { struct snd_ctl_elem_value ev; int ret = 0; @@ -634,7 +634,7 @@ int mixer_ctl_set_array(struct mixer_ctl *ctl, const void *array, size_t count) * On failure, -EINVAL. * @ingroup libtinyalsa-mixer */ -int mixer_ctl_get_range_min(struct mixer_ctl *ctl) +int mixer_ctl_get_range_min(const struct mixer_ctl *ctl) { if (!ctl || (ctl->info.type != SNDRV_CTL_ELEM_TYPE_INTEGER)) return -EINVAL; @@ -650,7 +650,7 @@ int mixer_ctl_get_range_min(struct mixer_ctl *ctl) * On failure, -EINVAL. * @ingroup libtinyalsa-mixer */ -int mixer_ctl_get_range_max(struct mixer_ctl *ctl) +int mixer_ctl_get_range_max(const struct mixer_ctl *ctl) { if (!ctl || (ctl->info.type != SNDRV_CTL_ELEM_TYPE_INTEGER)) return -EINVAL; @@ -663,7 +663,7 @@ int mixer_ctl_get_range_max(struct mixer_ctl *ctl) * @returns The number of enumerated items in the control. * @ingroup libtinyalsa-mixer */ -unsigned int mixer_ctl_get_num_enums(struct mixer_ctl *ctl) +unsigned int mixer_ctl_get_num_enums(const struct mixer_ctl *ctl) { if (!ctl) return 0; -- cgit v1.2.3 From a94295b6cf85fceb6b06db42b27c88131f1a18b0 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 18:23:16 -0800 Subject: Added mixer_get_ctl_const This function was added to make available a mixer control accessor in a function that does not modify its value. --- include/tinyalsa/mixer.h | 2 ++ src/mixer.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/tinyalsa/mixer.h b/include/tinyalsa/mixer.h index fb862f3..a54b5c1 100644 --- a/include/tinyalsa/mixer.h +++ b/include/tinyalsa/mixer.h @@ -73,6 +73,8 @@ const char *mixer_get_name(const struct mixer *mixer); unsigned int mixer_get_num_ctls(const struct mixer *mixer); +const struct mixer_ctl *mixer_get_ctl_const(const struct mixer *mixer, unsigned int id); + struct mixer_ctl *mixer_get_ctl(struct mixer *mixer, unsigned int id); struct mixer_ctl *mixer_get_ctl_by_name(struct mixer *mixer, const char *name); diff --git a/src/mixer.c b/src/mixer.c index 5fed4a8..4bb1756 100644 --- a/src/mixer.c +++ b/src/mixer.c @@ -195,6 +195,22 @@ unsigned int mixer_get_num_ctls(const struct mixer *mixer) } /** Gets a mixer control handle, by the mixer control's id. + * For non-const access, see @ref mixer_get_ctl + * @param mixer An initialized mixer handle. + * @param id The control's id in the given mixer. + * @returns A handle to the mixer control. + * @ingroup libtinyalsa-mixer + */ +const struct mixer_ctl *mixer_get_ctl_const(const struct mixer *mixer, unsigned int id) +{ + if (mixer && (id < mixer->count)) + return mixer->ctl + id; + + return NULL; +} + +/** Gets a mixer control handle, by the mixer control's id. + * For const access, see @ref mixer_get_ctl_const * @param mixer An initialized mixer handle. * @param id The control's id in the given mixer. * @returns A handle to the mixer control. -- cgit v1.2.3 From 94c7c83c01a1d00a5e36cc77bc1b71a8ebdcd1e9 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 18:35:24 -0800 Subject: Added function, mixer_get_num_ctls_by_name This function is used to get the number of mixer controls by a given name. It was added for use with mixer_get_ctl_by_name_and_index so that client code can expect the last valid index to pass. --- include/tinyalsa/mixer.h | 2 ++ src/mixer.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/tinyalsa/mixer.h b/include/tinyalsa/mixer.h index a54b5c1..f743f6e 100644 --- a/include/tinyalsa/mixer.h +++ b/include/tinyalsa/mixer.h @@ -73,6 +73,8 @@ const char *mixer_get_name(const struct mixer *mixer); unsigned int mixer_get_num_ctls(const struct mixer *mixer); +unsigned int mixer_get_num_ctls_by_name(const struct mixer *mixer, const char *name); + const struct mixer_ctl *mixer_get_ctl_const(const struct mixer *mixer, unsigned int id); struct mixer_ctl *mixer_get_ctl(struct mixer *mixer, unsigned int id); diff --git a/src/mixer.c b/src/mixer.c index 4bb1756..9e661c5 100644 --- a/src/mixer.c +++ b/src/mixer.c @@ -194,6 +194,30 @@ unsigned int mixer_get_num_ctls(const struct mixer *mixer) return mixer->count; } +/** Gets the number of mixer controls, that go by a specified name, for a given mixer. + * @param mixer An initialized mixer handle. + * @param name The name of the mixer control + * @returns The number of mixer controls, specified by @p name, for the given mixer. + * @ingroup libtinyalsa-mixer + */ +unsigned int mixer_get_num_ctls_by_name(const struct mixer *mixer, const char *name) +{ + unsigned int n; + unsigned int count = 0; + struct mixer_ctl *ctl; + + if (!mixer) + return 0; + + ctl = mixer->ctl; + + for (n = 0; n < mixer->count; n++) + if (!strcmp(name, (char*) ctl[n].info.id.name)) + count++; + + return count; +} + /** Gets a mixer control handle, by the mixer control's id. * For non-const access, see @ref mixer_get_ctl * @param mixer An initialized mixer handle. -- cgit v1.2.3 From 77979a8855015803c80a3bc99712ed9b72f96020 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 20:04:04 -0800 Subject: Added format related getters for PCM Added functions: - pcm_get_channels - pcm_get_rate - pcm_get_format These were added since they're required for iterating samples and frames. --- include/tinyalsa/pcm.h | 6 ++++++ src/pcm.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index a6c95ce..41d3fb4 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -240,6 +240,12 @@ int pcm_close(struct pcm *pcm); int pcm_is_ready(const struct pcm *pcm); +unsigned int pcm_get_channels(const struct pcm *pcm); + +unsigned int pcm_get_rate(const struct pcm *pcm); + +enum pcm_format pcm_get_format(const struct pcm *pcm); + int pcm_get_file_descriptor(const struct pcm *pcm); const char *pcm_get_error(const struct pcm *pcm); diff --git a/src/pcm.c b/src/pcm.c index 540fd72..41f072c 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -204,6 +204,37 @@ unsigned int pcm_get_buffer_size(const struct pcm *pcm) return pcm->buffer_size; } +/** Gets the channel count of the PCM. + * @param pcm A PCM handle. + * @return The channel count of the PCM. + * @ingroup libtinyalsa-pcm + */ +unsigned int pcm_get_channels(const struct pcm *pcm) +{ + return pcm->config.channels; +} + +/** Gets the rate of the PCM. + * The rate is given in frames per second. + * @param pcm A PCM handle. + * @return The rate of the PCM. + * @ingroup libtinyalsa-pcm + */ +unsigned int pcm_get_rate(const struct pcm *pcm) +{ + return pcm->config.rate; +} + +/** Gets the format of the PCM. + * @param pcm A PCM handle. + * @return The format of the PCM. + * @ingroup libtinyalsa-pcm + */ +enum pcm_format pcm_get_format(const struct pcm *pcm) +{ + return pcm->config.format; +} + /** Gets the file descriptor of the PCM. * Useful for extending functionality of the PCM when needed. * @param pcm A PCM handle. -- cgit v1.2.3 From f9834eef249ff55ddb084b64a553ec4912d3709d Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 20:25:41 -0800 Subject: Added pcm_readi and pcm_writei functions Added these functions to replace pcm_read and pcm_write, which don't return the number of frames actually transferred. On GCC-like compilers, pcm_read and pcm_write have been marked as deprecated On doxygen documentation, they have been marked as deprecated as well. --- include/tinyalsa/pcm.h | 14 ++++++++++++++ src/pcm.c | 52 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index 41d3fb4..f24dedb 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -262,10 +262,24 @@ int pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail, struct timespec *ts unsigned int pcm_get_subdevice(const struct pcm *pcm); +int pcm_writei(struct pcm *pcm, const void *data, unsigned int count); + +int pcm_readi(struct pcm *pcm, void *data, unsigned int count); + +#ifdef __GNUC__ + +int pcm_write(struct pcm *pcm, const void *data, unsigned int count) __attribute((deprecated)); + +int pcm_read(struct pcm *pcm, void *data, unsigned int count) __attribute((deprecated)); + +#else + int pcm_write(struct pcm *pcm, const void *data, unsigned int count); int pcm_read(struct pcm *pcm, void *data, unsigned int count); +#endif + int pcm_mmap_write(struct pcm *pcm, const void *data, unsigned int count); int pcm_mmap_read(struct pcm *pcm, void *data, unsigned int count); diff --git a/src/pcm.c b/src/pcm.c index 41f072c..2279137 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -523,10 +523,10 @@ int pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail, * @param pcm A PCM handle. * @param data The audio sample array * @param count The number of bytes occupied by the sample array. - * @return On success, this function returns zero; otherwise, a negative number. + * @return On success, this function returns the number of frames written; otherwise, a negative number. * @ingroup libtinyalsa-pcm */ -int pcm_write(struct pcm *pcm, const void *data, unsigned int count) +int pcm_writei(struct pcm *pcm, const void *data, unsigned int count) { struct snd_xferi x; @@ -561,7 +561,7 @@ int pcm_write(struct pcm *pcm, const void *data, unsigned int count) } return oops(pcm, errno, "cannot write stream data"); } - return 0; + return x.result; } } @@ -572,10 +572,10 @@ int pcm_write(struct pcm *pcm, const void *data, unsigned int count) * @param pcm A PCM handle. * @param data The audio sample array * @param count The number of bytes occupied by the sample array. - * @return On success, this function returns zero; otherwise, a negative number. + * @return On success, this function returns the number of frames written; otherwise, a negative number. * @ingroup libtinyalsa-pcm */ -int pcm_read(struct pcm *pcm, void *data, unsigned int count) +int pcm_readi(struct pcm *pcm, void *data, unsigned int count) { struct snd_xferi x; @@ -603,8 +603,48 @@ int pcm_read(struct pcm *pcm, void *data, unsigned int count) } return oops(pcm, errno, "cannot read stream data"); } - return 0; + return x.result; + } +} + +/** Writes audio samples to PCM. + * If the PCM has not been started, it is started in this function. + * This function is only valid for PCMs opened with the @ref PCM_OUT flag. + * This function is not valid for PCMs opened with the @ref PCM_MMAP flag. + * @param pcm A PCM handle. + * @param data The audio sample array + * @param count The number of bytes occupied by the sample array. + * @return On success, this function returns zero; otherwise, a negative number. + * @deprecated + * @ingroup libtinyalsa-pcm + */ +int pcm_write(struct pcm *pcm, const void *data, unsigned int count) +{ + int ret = pcm_writei(pcm, data, count); + if (ret < 0){ + return ret; + } + return 0; +} + +/** Reads audio samples from PCM. + * If the PCM has not been started, it is started in this function. + * This function is only valid for PCMs opened with the @ref PCM_IN flag. + * This function is not valid for PCMs opened with the @ref PCM_MMAP flag. + * @param pcm A PCM handle. + * @param data The audio sample array + * @param count The number of bytes occupied by the sample array. + * @return On success, this function returns zero; otherwise, a negative number. + * @deprecated + * @ingroup libtinyalsa-pcm + */ +int pcm_read(struct pcm *pcm, void *data, unsigned int count) +{ + int ret = pcm_readi(pcm, data, count); + if (ret < 0) { + return ret; } + return 0; } static struct pcm bad_pcm = { -- cgit v1.2.3 From e0781f13a774d872b24435511e5199ec2186c769 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 20:27:41 -0800 Subject: Replaced old calls to pcm_read and pcm_write The newer pcm_readi and pcm_writei functions are now being used. --- utils/tinycap.c | 2 +- utils/tinyplay.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/tinycap.c b/utils/tinycap.c index 503b118..05c7180 100644 --- a/utils/tinycap.c +++ b/utils/tinycap.c @@ -244,7 +244,7 @@ unsigned int capture_sample(FILE *file, unsigned int card, unsigned int device, pcm_format_to_bits(format)); } - while (capturing && !pcm_read(pcm, buffer, size)) { + while (capturing && (pcm_readi(pcm, buffer, size) < 0)) { if (capture_time > 0 && ((bytes_read + size) > pcm_frames_to_bytes(pcm, capture_time * rate))) { size = pcm_frames_to_bytes(pcm, capture_time * rate) - bytes_read; diff --git a/utils/tinyplay.c b/utils/tinyplay.c index db1b611..d0c1e36 100644 --- a/utils/tinyplay.c +++ b/utils/tinyplay.c @@ -409,7 +409,7 @@ int play_sample(struct ctx *ctx) do { num_read = fread(buffer, 1, size, ctx->file); if (num_read > 0) { - if (pcm_write(ctx->pcm, buffer, num_read)) { + if (pcm_writei(ctx->pcm, buffer, num_read) < 0) { fprintf(stderr, "error playing sample\n"); break; } -- cgit v1.2.3 From d7b140a5d99a7283bb78e48286bdaefaae398bba Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 20:43:28 -0800 Subject: Using frame counts in pcm_readi and pcm_writei pcm_readi and pcm_writei now use a frame count to specify the buffer length instead of using a byte count. --- include/tinyalsa/pcm.h | 4 ++-- src/pcm.c | 18 ++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index f24dedb..1d84eed 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -262,9 +262,9 @@ int pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail, struct timespec *ts unsigned int pcm_get_subdevice(const struct pcm *pcm); -int pcm_writei(struct pcm *pcm, const void *data, unsigned int count); +int pcm_writei(struct pcm *pcm, const void *data, unsigned int frame_count); -int pcm_readi(struct pcm *pcm, void *data, unsigned int count); +int pcm_readi(struct pcm *pcm, void *data, unsigned int frame_count); #ifdef __GNUC__ diff --git a/src/pcm.c b/src/pcm.c index 2279137..c3c6a1e 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -522,11 +522,11 @@ int pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail, * This function is not valid for PCMs opened with the @ref PCM_MMAP flag. * @param pcm A PCM handle. * @param data The audio sample array - * @param count The number of bytes occupied by the sample array. + * @param frame_count The number of frames occupied by the sample array. * @return On success, this function returns the number of frames written; otherwise, a negative number. * @ingroup libtinyalsa-pcm */ -int pcm_writei(struct pcm *pcm, const void *data, unsigned int count) +int pcm_writei(struct pcm *pcm, const void *data, unsigned int frame_count) { struct snd_xferi x; @@ -534,8 +534,7 @@ int pcm_writei(struct pcm *pcm, const void *data, unsigned int count) return -EINVAL; x.buf = (void*)data; - x.frames = count / (pcm->config.channels * - pcm_format_to_bits(pcm->config.format) / 8); + x.frames = frame_count; x.result = 0; for (;;) { if (!pcm->running) { @@ -571,11 +570,11 @@ int pcm_writei(struct pcm *pcm, const void *data, unsigned int count) * This function is not valid for PCMs opened with the @ref PCM_MMAP flag. * @param pcm A PCM handle. * @param data The audio sample array - * @param count The number of bytes occupied by the sample array. + * @param count The number of frames occupied by the sample array. * @return On success, this function returns the number of frames written; otherwise, a negative number. * @ingroup libtinyalsa-pcm */ -int pcm_readi(struct pcm *pcm, void *data, unsigned int count) +int pcm_readi(struct pcm *pcm, void *data, unsigned int frame_count) { struct snd_xferi x; @@ -583,8 +582,7 @@ int pcm_readi(struct pcm *pcm, void *data, unsigned int count) return -EINVAL; x.buf = data; - x.frames = count / (pcm->config.channels * - pcm_format_to_bits(pcm->config.format) / 8); + x.frames = frame_count; x.result = 0; for (;;) { if (!pcm->running) { @@ -620,7 +618,7 @@ int pcm_readi(struct pcm *pcm, void *data, unsigned int count) */ int pcm_write(struct pcm *pcm, const void *data, unsigned int count) { - int ret = pcm_writei(pcm, data, count); + int ret = pcm_writei(pcm, data, pcm_bytes_to_frames(pcm, count)); if (ret < 0){ return ret; } @@ -640,7 +638,7 @@ int pcm_write(struct pcm *pcm, const void *data, unsigned int count) */ int pcm_read(struct pcm *pcm, void *data, unsigned int count) { - int ret = pcm_readi(pcm, data, count); + int ret = pcm_readi(pcm, data, pcm_bytes_to_frames(pcm, count)); if (ret < 0) { return ret; } -- cgit v1.2.3 From ead42d87ffe4003851a9eac6385bccccb771ebb1 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 21:20:06 -0800 Subject: bumped minor version --- include/tinyalsa/version.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/tinyalsa/version.h b/include/tinyalsa/version.h index b92e030..5d71840 100644 --- a/include/tinyalsa/version.h +++ b/include/tinyalsa/version.h @@ -31,13 +31,13 @@ #define TINYALSA_VERSION_MAJOR 1 -#define TINYALSA_VERSION_MINOR 0 +#define TINYALSA_VERSION_MINOR 1 -#define TINYALSA_VERSION_PATCH 3 +#define TINYALSA_VERSION_PATCH 0 -#define TINYALSA_VERSION 0x010003UL +#define TINYALSA_VERSION 0x010100UL -#define TINYALSA_VERSION_STRING "1.0.3" +#define TINYALSA_VERSION_STRING "1.1.0" #endif /* TINYALSA_VERSION_H */ -- cgit v1.2.3 From d1c98e4754d4f13b01f2807a3b91eb6f7a4f58db Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 21:21:49 -0800 Subject: renamed parameter in doc --- src/pcm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pcm.c b/src/pcm.c index c3c6a1e..f879fe7 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -570,7 +570,7 @@ int pcm_writei(struct pcm *pcm, const void *data, unsigned int frame_count) * This function is not valid for PCMs opened with the @ref PCM_MMAP flag. * @param pcm A PCM handle. * @param data The audio sample array - * @param count The number of frames occupied by the sample array. + * @param frame_count The number of frames occupied by the sample array. * @return On success, this function returns the number of frames written; otherwise, a negative number. * @ingroup libtinyalsa-pcm */ -- cgit v1.2.3 From 313c1d17f2593e1eead11bc4efd0b704c32855a3 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 21:22:03 -0800 Subject: bumped version --- doxygen/Doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile index 6a3a2d2..1c18b30 100644 --- a/doxygen/Doxyfile +++ b/doxygen/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "TinyALSA" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.0.0 +PROJECT_NUMBER = 1.1.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a -- cgit v1.2.3 From 9df0309a78c85f354f96a01c2f192c6281057a05 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 21:28:32 -0800 Subject: added soversion with minor and patch number --- src/Makefile | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Makefile b/src/Makefile index da19c54..cde8267 100644 --- a/src/Makefile +++ b/src/Makefile @@ -19,7 +19,7 @@ VPATH = ../include/tinyalsa OBJECTS = mixer.o pcm.o .PHONY: all -all: libtinyalsa.a libtinyalsa.so.1 +all: libtinyalsa.a libtinyalsa.so pcm.o: pcm.c pcm.h @@ -28,19 +28,28 @@ mixer.o: mixer.c mixer.h libtinyalsa.a: $(OBJECTS) $(AR) $(ARFLAGS) $@ $^ -libtinyalsa.so.1: $(OBJECTS) - $(LD) $(LDFLAGS) -shared $^ -o $@ +libtinyalsa.so: libtinyalsa.so.1 + ln -sf $< $@ + +libtinyalsa.so.1: libtinyalsa.so.1.1.0 + ln -sf $< $@ + +libtinyalsa.so.1.1.0: $(OBJECTS) + $(LD) $(LDFLAGS) -shared -Wl,-soname,libtinyalsa.so.1 $^ -o $@ .PHONY: clean clean: rm -f libtinyalsa.a + rm -f libtinyalsa.so rm -f libtinyalsa.so.1 + rm -f libtinyalsa.so.1.1.0 rm -f $(OBJECTS) .PHONY: install install: libtinyalsa.a libtinyalsa.so.1 install -d $(DESTDIR)$(LIBDIR)/ - ln -sf libtinyalsa.so.1 $(DESTDIR)$(LIBDIR)/libtinyalsa.so install libtinyalsa.a $(DESTDIR)$(LIBDIR)/ - install libtinyalsa.so.1 $(DESTDIR)$(LIBDIR)/ + install libtinyalsa.so.1.1.0 $(DESTDIR)$(LIBDIR)/ + ln -sf libtinyalsa.so.1.1.0 $(DESTDIR)$(LIBDIR)/libtinyalsa.so.1 + ln -sf libtinyalsa.so.1 $(DESTDIR)$(LIBDIR)/libtinyalsa.so -- cgit v1.2.3 From 6860acb720fcc5d67639b72aa349b16e1fc6acc6 Mon Sep 17 00:00:00 2001 From: Taylor Holberton Date: Thu, 1 Dec 2016 21:38:59 -0800 Subject: added changelog for version 1.1.0 --- debian/changelog | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/debian/changelog b/debian/changelog index 851ac70..8a47e9a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,17 @@ +tinyalsa (1.1.0) xenial; urgency=medium + + * Finished most of the PCM and mixer API documentation + * Added const specifiers where necessary + * Added pcm_readi() and pcm_writei() + * Deprecated pcm_read() and pcm_write() + * Added mixer_get_num_ctls_by_name() + * Added pcm_get_channels(), pcm_get_rate() and pcm_get_format() + * Made libtinyalsa.so.x a symbol link, using libtinyalsa.so.x.y.z as library name + * Added long option names in tinyplay + * Using amixer-style interface for tinymix + + -- Taylor Holberton Thu, 01 Dec 2016 21:38:12 -0800 + tinyalsa (1.0.2) xenial; urgency=medium * Removed install of libtinyalsa.so in package libtinyalsa -- cgit v1.2.3