static bool parse_channel_count(const char *src, bool mask, uint8_t *channels_r, const char **endptr_r, GError **error_r) { unsigned long value; char *endptr; if (mask && *src == '*') { *channels_r = 0; *endptr_r = src + 1; return true; } value = strtoul(src, &endptr, 10); if (endptr == src) { g_set_error(error_r, audio_parser_quark(), 0, "Failed to parse the channel count"); return false; } else if (!audio_check_channel_count(value, error_r)) return false; *channels_r = value; *endptr_r = endptr; return true; }
bool audio_format_init_checked(struct audio_format *af, unsigned long sample_rate, enum sample_format sample_format, unsigned channels, GError **error_r) { if (audio_check_sample_rate(sample_rate, error_r) && audio_check_sample_format(sample_format, error_r) && audio_check_channel_count(channels, error_r)) { audio_format_init(af, sample_rate, sample_format, channels); assert(audio_format_valid(af)); return true; } else return false; }