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(-) (limited to 'include') 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-70-g09d2 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(-) (limited to 'include') 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-70-g09d2 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(-) (limited to 'include') 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-70-g09d2 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(-) (limited to 'include') 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-70-g09d2 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(-) (limited to 'include') 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-70-g09d2 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(+) (limited to 'include') 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-70-g09d2 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(+) (limited to 'include') 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-70-g09d2 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(+) (limited to 'include') 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-70-g09d2 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(-) (limited to 'include') 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-70-g09d2 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(-) (limited to 'include') 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-70-g09d2 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(-) (limited to 'include') 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-70-g09d2