summaryrefslogtreecommitdiffstats
path: root/polyp/sample.c
diff options
context:
space:
mode:
Diffstat (limited to 'polyp/sample.c')
-rw-r--r--polyp/sample.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/polyp/sample.c b/polyp/sample.c
index 65ae8ff3..8c30386b 100644
--- a/polyp/sample.c
+++ b/polyp/sample.c
@@ -26,6 +26,7 @@
#include <stdio.h>
#include <assert.h>
#include <math.h>
+#include <string.h>
#include "sample.h"
@@ -68,10 +69,10 @@ pa_usec_t pa_bytes_to_usec(uint64_t length, const struct pa_sample_spec *spec) {
int pa_sample_spec_valid(const struct pa_sample_spec *spec) {
assert(spec);
- if (!spec->rate || !spec->channels)
+ if (spec->rate <= 0 || spec->channels <= 0)
return 0;
- if (spec->format >= PA_SAMPLE_MAX)
+ if (spec->format >= PA_SAMPLE_MAX || spec->format < 0)
return 0;
return 1;
@@ -134,3 +135,27 @@ void pa_bytes_snprint(char *s, size_t l, unsigned v) {
else
snprintf(s, l, "%u B", (unsigned) v);
}
+
+enum pa_sample_format pa_parse_sample_format(const char *format) {
+
+ if (strcmp(format, "s16le") == 0)
+ return PA_SAMPLE_S16LE;
+ else if (strcmp(format, "s16be") == 0)
+ return PA_SAMPLE_S16BE;
+ else if (strcmp(format, "s16ne") == 0 || strcmp(format, "s16") == 0 || strcmp(format, "16") == 0)
+ return PA_SAMPLE_S16NE;
+ else if (strcmp(format, "u8") == 0 || strcmp(format, "8") == 0)
+ return PA_SAMPLE_U8;
+ else if (strcmp(format, "float32") == 0 || strcmp(format, "float32ne") == 0)
+ return PA_SAMPLE_FLOAT32;
+ else if (strcmp(format, "float32le") == 0)
+ return PA_SAMPLE_FLOAT32LE;
+ else if (strcmp(format, "float32be") == 0)
+ return PA_SAMPLE_FLOAT32BE;
+ else if (strcmp(format, "ulaw") == 0)
+ return PA_SAMPLE_ULAW;
+ else if (strcmp(format, "alaw") == 0)
+ return PA_SAMPLE_ALAW;
+
+ return -1;
+}