audio_format: added validation functions
In addition to audio_format_valid(), provide functions which validate only one attribute of an audio_format. These functions are reused by audio_format_parse().
This commit is contained in:
parent
5090cf6484
commit
3bc4224bfd
@ -40,15 +40,46 @@ static inline bool audio_format_defined(const struct audio_format *af)
|
|||||||
return af->sample_rate != 0;
|
return af->sample_rate != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the sample rate is valid.
|
||||||
|
*
|
||||||
|
* @param sample_rate the sample rate in Hz
|
||||||
|
*/
|
||||||
|
static inline bool
|
||||||
|
audio_valid_sample_rate(unsigned sample_rate)
|
||||||
|
{
|
||||||
|
return sample_rate > 0 && sample_rate < (1 << 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the sample format is valid.
|
||||||
|
*
|
||||||
|
* @param bits the number of significant bits per sample
|
||||||
|
*/
|
||||||
|
static inline bool
|
||||||
|
audio_valid_sample_format(unsigned bits)
|
||||||
|
{
|
||||||
|
return bits == 16 || bits == 24 || bits == 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the number of channels is valid.
|
||||||
|
*/
|
||||||
|
static inline bool
|
||||||
|
audio_valid_channel_count(unsigned channels)
|
||||||
|
{
|
||||||
|
return channels == 1 || channels == 2;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns false if the format is not valid for playback with MPD.
|
* Returns false if the format is not valid for playback with MPD.
|
||||||
* This function performs some basic validity checks.
|
* This function performs some basic validity checks.
|
||||||
*/
|
*/
|
||||||
static inline bool audio_format_valid(const struct audio_format *af)
|
static inline bool audio_format_valid(const struct audio_format *af)
|
||||||
{
|
{
|
||||||
return af->sample_rate > 0 &&
|
return audio_valid_sample_rate(af->sample_rate) &&
|
||||||
(af->bits == 8 || af->bits == 16 || af->bits == 24) &&
|
audio_valid_sample_format(af->bits) &&
|
||||||
af->channels >= 1;
|
audio_valid_channel_count(af->channels);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool audio_format_equals(const struct audio_format *a,
|
static inline bool audio_format_equals(const struct audio_format *a,
|
||||||
|
@ -54,7 +54,7 @@ audio_format_parse(struct audio_format *dest, const char *src, GError **error)
|
|||||||
g_set_error(error, audio_parser_quark(), 0,
|
g_set_error(error, audio_parser_quark(), 0,
|
||||||
"Sample format missing");
|
"Sample format missing");
|
||||||
return false;
|
return false;
|
||||||
} else if (value <= 0 || value > G_MAXINT32) {
|
} else if (!audio_valid_sample_rate(value)) {
|
||||||
g_set_error(error, audio_parser_quark(), 0,
|
g_set_error(error, audio_parser_quark(), 0,
|
||||||
"Invalid sample rate: %lu", value);
|
"Invalid sample rate: %lu", value);
|
||||||
return false;
|
return false;
|
||||||
@ -74,7 +74,7 @@ audio_format_parse(struct audio_format *dest, const char *src, GError **error)
|
|||||||
g_set_error(error, audio_parser_quark(), 0,
|
g_set_error(error, audio_parser_quark(), 0,
|
||||||
"Channel count missing");
|
"Channel count missing");
|
||||||
return false;
|
return false;
|
||||||
} else if (value != 16 && value != 24 && value != 8) {
|
} else if (!audio_valid_sample_format(value)) {
|
||||||
g_set_error(error, audio_parser_quark(), 0,
|
g_set_error(error, audio_parser_quark(), 0,
|
||||||
"Invalid sample format: %lu", value);
|
"Invalid sample format: %lu", value);
|
||||||
return false;
|
return false;
|
||||||
@ -86,7 +86,7 @@ audio_format_parse(struct audio_format *dest, const char *src, GError **error)
|
|||||||
|
|
||||||
src = endptr + 1;
|
src = endptr + 1;
|
||||||
value = strtoul(src, &endptr, 10);
|
value = strtoul(src, &endptr, 10);
|
||||||
if (*endptr != 0 || (value != 1 && value != 2)) {
|
if (*endptr != 0 || !audio_valid_channel_count(value)) {
|
||||||
g_set_error(error, audio_parser_quark(), 0,
|
g_set_error(error, audio_parser_quark(), 0,
|
||||||
"Invalid channel count: %s", src);
|
"Invalid channel count: %s", src);
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user