Skip to content

Commit

Permalink
pcm: Introduce snd_pcm_subformat_value()
Browse files Browse the repository at this point in the history
Allow userspace applications to select subformats easily just like in
snd_pcm_format_t case - by string conversion.

Closes: #342
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
  • Loading branch information
crojewsk-intel authored and perexg committed Dec 8, 2023
1 parent ed6b070 commit f33284e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
3 changes: 3 additions & 0 deletions include/pcm.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
24 changes: 24 additions & 0 deletions src/pcm/pcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit f33284e

Please sign in to comment.