mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
utils: Adding a function to get volume from string
The allowed volume formats are dB, % or integer. For example: 10% or 10db or 10.
This commit is contained in:
parent
fe0ba245e5
commit
dd31d65217
2 changed files with 45 additions and 0 deletions
|
|
@ -960,6 +960,48 @@ int pa_parse_boolean(const char *v) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Try to parse a volume string to pa_volume_t. The allowed formats are:
|
||||||
|
* db, % and unsigned integer */
|
||||||
|
int pa_parse_volume(const char *v, pa_volume_t *volume) {
|
||||||
|
int len, ret = -1;
|
||||||
|
uint32_t i;
|
||||||
|
double d;
|
||||||
|
char str[64];
|
||||||
|
|
||||||
|
pa_assert(v);
|
||||||
|
pa_assert(volume);
|
||||||
|
|
||||||
|
len = strlen(v);
|
||||||
|
|
||||||
|
if (len >= 64)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
memcpy(str, v, len + 1);
|
||||||
|
|
||||||
|
if (str[len - 1] == '%') {
|
||||||
|
str[len - 1] = '\0';
|
||||||
|
if (pa_atou(str, &i) == 0) {
|
||||||
|
*volume = PA_CLAMP_VOLUME((uint64_t) PA_VOLUME_NORM * i / 100);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
} else if (len > 2 && (str[len - 1] == 'b' || str[len - 1] == 'B') &&
|
||||||
|
(str[len - 2] == 'd' || str[len - 2] == 'D')) {
|
||||||
|
str[len - 2] = '\0';
|
||||||
|
if (pa_atod(str, &d) == 0) {
|
||||||
|
*volume = pa_sw_volume_from_dB(d);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (pa_atou(v, &i) == 0) {
|
||||||
|
*volume= PA_CLAMP_VOLUME(i);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Split the specified string wherever one of the strings in delimiter
|
/* Split the specified string wherever one of the strings in delimiter
|
||||||
* occurs. Each time it is called returns a newly allocated string
|
* occurs. Each time it is called returns a newly allocated string
|
||||||
* with pa_xmalloc(). The variable state points to, should be
|
* with pa_xmalloc(). The variable state points to, should be
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <pulse/gccmacro.h>
|
#include <pulse/gccmacro.h>
|
||||||
|
#include <pulse/volume.h>
|
||||||
#include <pulsecore/macro.h>
|
#include <pulsecore/macro.h>
|
||||||
#include <pulsecore/socket.h>
|
#include <pulsecore/socket.h>
|
||||||
|
|
||||||
|
|
@ -83,6 +84,8 @@ void pa_reset_priority(void);
|
||||||
|
|
||||||
int pa_parse_boolean(const char *s) PA_GCC_PURE;
|
int pa_parse_boolean(const char *s) PA_GCC_PURE;
|
||||||
|
|
||||||
|
int pa_parse_volume(const char *s, pa_volume_t *volume);
|
||||||
|
|
||||||
static inline const char *pa_yes_no(pa_bool_t b) {
|
static inline const char *pa_yes_no(pa_bool_t b) {
|
||||||
return b ? "yes" : "no";
|
return b ? "yes" : "no";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue