From f33284e85e57857199b873ff4e6b4e1eeeb71162 Mon Sep 17 00:00:00 2001 From: Cezary Rojewski Date: Fri, 4 Aug 2023 10:07:19 +0200 Subject: [PATCH] pcm: Introduce snd_pcm_subformat_value() Allow userspace applications to select subformats easily just like in snd_pcm_format_t case - by string conversion. Closes: https://github.com/alsa-project/alsa-lib/pull/342 Signed-off-by: Cezary Rojewski Signed-off-by: Jaroslav Kysela --- include/pcm.h | 3 +++ src/pcm/pcm.c | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/pcm.h b/include/pcm.h index e7853313..f18620be 100644 --- a/include/pcm.h +++ b/include/pcm.h @@ -282,6 +282,8 @@ typedef enum _snd_pcm_format { /** PCM sample subformat */ typedef enum _snd_pcm_subformat { + /** Unknown */ + SND_PCM_SUBFORMAT_UNKNOWN = -1, /** Standard */ SND_PCM_SUBFORMAT_STD = 0, SND_PCM_SUBFORMAT_LAST = SND_PCM_SUBFORMAT_STD @@ -1092,6 +1094,7 @@ const char *snd_pcm_format_name(const snd_pcm_format_t format); const char *snd_pcm_format_description(const snd_pcm_format_t format); const char *snd_pcm_subformat_name(const snd_pcm_subformat_t subformat); const char *snd_pcm_subformat_description(const snd_pcm_subformat_t subformat); +snd_pcm_subformat_t snd_pcm_subformat_value(const char* name); snd_pcm_format_t snd_pcm_format_value(const char* name); const char *snd_pcm_tstamp_mode_name(const snd_pcm_tstamp_t mode); const char *snd_pcm_state_name(const snd_pcm_state_t state); diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index ad9e8956..8aae5afd 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -2197,6 +2197,30 @@ const char *snd_pcm_subformat_description(const snd_pcm_subformat_t subformat) return snd_pcm_subformat_descriptions[subformat]; } +/** + * \brief get PCM sample subformat from name + * \param name PCM sample subformat name (case insensitive) + * \return PCM sample subformat + */ +snd_pcm_subformat_t snd_pcm_subformat_value(const char* name) +{ + snd_pcm_subformat_t subformat; + + for (subformat = 0; subformat <= SND_PCM_SUBFORMAT_LAST; subformat++) { + if (snd_pcm_subformat_names[subformat] && + !strcasecmp(name, snd_pcm_subformat_names[subformat])) + return subformat; + } + + for (subformat = 0; subformat <= SND_PCM_SUBFORMAT_LAST; subformat++) { + if (snd_pcm_subformat_descriptions[subformat] && + !strcasecmp(name, snd_pcm_subformat_descriptions[subformat])) + return subformat; + } + + return SND_PCM_SUBFORMAT_UNKNOWN; +} + /** * \brief (DEPRECATED) get name of PCM start mode setting * \param mode PCM start mode -- 2.47.1