audio_parser: moved code to separate functions
This commit is contained in:
parent
2c05430002
commit
a5c4566fa1
|
@ -36,27 +36,17 @@ audio_parser_quark(void)
|
||||||
return g_quark_from_static_string("audio_parser");
|
return g_quark_from_static_string("audio_parser");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
static bool
|
||||||
audio_format_parse(struct audio_format *dest, const char *src,
|
parse_sample_rate(const char *src, uint32_t *sample_rate_r,
|
||||||
GError **error_r)
|
const char **endptr_r, GError **error_r)
|
||||||
{
|
{
|
||||||
char *endptr;
|
|
||||||
unsigned long value;
|
unsigned long value;
|
||||||
uint32_t rate;
|
char *endptr;
|
||||||
uint8_t bits, channels;
|
|
||||||
|
|
||||||
audio_format_clear(dest);
|
|
||||||
|
|
||||||
/* parse sample rate */
|
|
||||||
|
|
||||||
value = strtoul(src, &endptr, 10);
|
value = strtoul(src, &endptr, 10);
|
||||||
if (endptr == src) {
|
if (endptr == src) {
|
||||||
g_set_error(error_r, audio_parser_quark(), 0,
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
"Sample rate missing");
|
"Failed to parse the sample rate");
|
||||||
return false;
|
|
||||||
} else if (*endptr != ':') {
|
|
||||||
g_set_error(error_r, audio_parser_quark(), 0,
|
|
||||||
"Sample format missing");
|
|
||||||
return false;
|
return false;
|
||||||
} else if (!audio_valid_sample_rate(value)) {
|
} else if (!audio_valid_sample_rate(value)) {
|
||||||
g_set_error(error_r, audio_parser_quark(), 0,
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
|
@ -64,19 +54,22 @@ audio_format_parse(struct audio_format *dest, const char *src,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
rate = value;
|
*sample_rate_r = value;
|
||||||
|
*endptr_r = endptr;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* parse sample format */
|
static bool
|
||||||
|
parse_sample_format(const char *src, uint8_t *bits_r,
|
||||||
|
const char **endptr_r, GError **error_r)
|
||||||
|
{
|
||||||
|
unsigned long value;
|
||||||
|
char *endptr;
|
||||||
|
|
||||||
src = endptr + 1;
|
|
||||||
value = strtoul(src, &endptr, 10);
|
value = strtoul(src, &endptr, 10);
|
||||||
if (endptr == src) {
|
if (endptr == src) {
|
||||||
g_set_error(error_r, audio_parser_quark(), 0,
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
"Sample format missing");
|
"Failed to parse the sample format");
|
||||||
return false;
|
|
||||||
} else if (*endptr != ':') {
|
|
||||||
g_set_error(error_r, audio_parser_quark(), 0,
|
|
||||||
"Channel count missing");
|
|
||||||
return false;
|
return false;
|
||||||
} else if (!audio_valid_sample_format(value)) {
|
} else if (!audio_valid_sample_format(value)) {
|
||||||
g_set_error(error_r, audio_parser_quark(), 0,
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
|
@ -84,19 +77,75 @@ audio_format_parse(struct audio_format *dest, const char *src,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bits = value;
|
*bits_r = value;
|
||||||
|
*endptr_r = endptr;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* parse channel count */
|
static bool
|
||||||
|
parse_channel_count(const char *src, uint8_t *channels_r,
|
||||||
|
const char **endptr_r, GError **error_r)
|
||||||
|
{
|
||||||
|
unsigned long value;
|
||||||
|
char *endptr;
|
||||||
|
|
||||||
src = endptr + 1;
|
|
||||||
value = strtoul(src, &endptr, 10);
|
value = strtoul(src, &endptr, 10);
|
||||||
if (*endptr != 0 || !audio_valid_channel_count(value)) {
|
if (endptr == src) {
|
||||||
g_set_error(error_r, audio_parser_quark(), 0,
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
"Invalid channel count: %s", src);
|
"Failed to parse the channel count");
|
||||||
|
return false;
|
||||||
|
} else if (!audio_valid_channel_count(value)) {
|
||||||
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
|
"Invalid channel count: %lu", value);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
channels = value;
|
*channels_r = value;
|
||||||
|
*endptr_r = endptr;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
audio_format_parse(struct audio_format *dest, const char *src,
|
||||||
|
GError **error_r)
|
||||||
|
{
|
||||||
|
uint32_t rate;
|
||||||
|
uint8_t bits, channels;
|
||||||
|
|
||||||
|
audio_format_clear(dest);
|
||||||
|
|
||||||
|
/* parse sample rate */
|
||||||
|
|
||||||
|
if (!parse_sample_rate(src, &rate, &src, error_r))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (*src++ != ':') {
|
||||||
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
|
"Sample format missing");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* parse sample format */
|
||||||
|
|
||||||
|
if (!parse_sample_format(src, &bits, &src, error_r))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (*src++ != ':') {
|
||||||
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
|
"Channel count missing");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* parse channel count */
|
||||||
|
|
||||||
|
if (!parse_channel_count(src, &channels, &src, error_r))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (*src != 0) {
|
||||||
|
g_set_error(error_r, audio_parser_quark(), 0,
|
||||||
|
"Extra data after channel count: %s", src);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
audio_format_init(dest, rate, bits, channels);
|
audio_format_init(dest, rate, bits, channels);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue