summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2018-11-01 03:50:54 +0200
committerJari Vetoniemi <mailroxas@gmail.com>2018-11-01 03:50:54 +0200
commit923e6f40a3b41b1af91940c6f738523320a1b0d2 (patch)
tree23e01cd3df6a9f5b4fdb8fc6211a8ed3018a2840
parent78ba923fc1236a2653f906ad04aca7aba773a40d (diff)
implement snd_pcm_format_value
-rw-r--r--src/pcm.c50
-rw-r--r--src/stubs.h1
2 files changed, 31 insertions, 20 deletions
diff --git a/src/pcm.c b/src/pcm.c
index 0d06c67..1a4ee08 100644
--- a/src/pcm.c
+++ b/src/pcm.c
@@ -460,6 +460,25 @@ snd_pcm_hw_params_get_access(const snd_pcm_hw_params_t *params, snd_pcm_access_t
return 0;
}
+static snd_pcm_format_t SUPPORTED_FORMATS[] = {
+ SND_PCM_FORMAT_U8,
+ SND_PCM_FORMAT_S8,
+ SND_PCM_FORMAT_S16_LE,
+ SND_PCM_FORMAT_S16_BE,
+ SND_PCM_FORMAT_U16_LE,
+ SND_PCM_FORMAT_U16_BE,
+ SND_PCM_FORMAT_S24_LE,
+ SND_PCM_FORMAT_S24_BE,
+ SND_PCM_FORMAT_U24_LE,
+ SND_PCM_FORMAT_U24_BE,
+ SND_PCM_FORMAT_S32_LE,
+ SND_PCM_FORMAT_S32_BE,
+ SND_PCM_FORMAT_U32_LE,
+ SND_PCM_FORMAT_U32_BE,
+ SND_PCM_FORMAT_FLOAT_LE,
+ SND_PCM_FORMAT_FLOAT_BE
+};
+
const char*
snd_pcm_format_name(const snd_pcm_format_t format)
{
@@ -488,6 +507,17 @@ snd_pcm_format_name(const snd_pcm_format_t format)
#undef NAME
}
+snd_pcm_format_t
+snd_pcm_format_value(const char* name)
+{
+ for (uint8_t i = 0; i < ARRAY_SIZE(SUPPORTED_FORMATS); ++i) {
+ const char *needle = snd_pcm_format_name(SUPPORTED_FORMATS[i]);
+ if (name && !strcmp(needle, name))
+ return SUPPORTED_FORMATS[i];
+ }
+ return SND_PCM_FORMAT_UNKNOWN;
+}
+
static bool
pcm_format(const snd_pcm_format_t format, struct sio_par *par, bool *out_needs_conversion)
{
@@ -612,25 +642,7 @@ snd_pcm_hw_params_free(snd_pcm_hw_params_t *obj)
void
snd_pcm_hw_params_get_format_mask(snd_pcm_hw_params_t *params, snd_pcm_format_mask_t *mask)
{
- static snd_pcm_format_t def_fmts[] = {
- SND_PCM_FORMAT_U8,
- SND_PCM_FORMAT_S8,
- SND_PCM_FORMAT_S16_LE,
- SND_PCM_FORMAT_S16_BE,
- SND_PCM_FORMAT_U16_LE,
- SND_PCM_FORMAT_U16_BE,
- SND_PCM_FORMAT_S24_LE,
- SND_PCM_FORMAT_S24_BE,
- SND_PCM_FORMAT_U24_LE,
- SND_PCM_FORMAT_U24_BE,
- SND_PCM_FORMAT_S32_LE,
- SND_PCM_FORMAT_S32_BE,
- SND_PCM_FORMAT_U32_LE,
- SND_PCM_FORMAT_U32_BE,
- SND_PCM_FORMAT_FLOAT_LE,
- SND_PCM_FORMAT_FLOAT_BE
- };
- static snd_pcm_format_mask_t def_mask = { .fmts = def_fmts, .nmemb = ARRAY_SIZE(def_fmts) };
+ static snd_pcm_format_mask_t def_mask = { .fmts = SUPPORTED_FORMATS, .nmemb = ARRAY_SIZE(SUPPORTED_FORMATS) };
if (mask) *mask = def_mask;
}
diff --git a/src/stubs.h b/src/stubs.h
index d92b041..c1a7ead 100644
--- a/src/stubs.h
+++ b/src/stubs.h
@@ -673,7 +673,6 @@ const char *snd_pcm_access_name(const snd_pcm_access_t _access) { WARNX1("stub")
const char *snd_pcm_format_description(const snd_pcm_format_t format) { WARNX1("stub"); return NULL; }
const char *snd_pcm_subformat_name(const snd_pcm_subformat_t subformat) { WARNX1("stub"); return NULL; }
const char *snd_pcm_subformat_description(const snd_pcm_subformat_t subformat) { WARNX1("stub"); return NULL; }
-snd_pcm_format_t snd_pcm_format_value(const char* name) { WARNX1("stub"); return 0; }
const char *snd_pcm_tstamp_mode_name(const snd_pcm_tstamp_t mode) { WARNX1("stub"); return NULL; }
const char *snd_pcm_state_name(const snd_pcm_state_t state) { WARNX1("stub"); return NULL; }
int snd_pcm_dump(snd_pcm_t *pcm, snd_output_t *out) { WARNX1("stub"); return 0; }