On 17/02/17 17:59, Takashi Iwai wrote:
It becomes too complex by mixing up things in a single loop. Let's take it just simple like:
if (is_string_array(converter)) { snd_config_for_each(i, next, converter) { // like the old way } } else { // handle for the new compound type }
Like this?
else if (snd_config_get_type(converter) == SND_CONFIG_TYPE_COMPOUND) { /* * If the convertor compound is an array of alternatives then the id of * the first element will be "0" (or maybe NULL). Otherwise assume it is * a structure and must have a "name" id to identify the converter type. */ snd_config_iterator_t i, next; i = snd_config_iterator_first(converter); if (i && i != snd_config_iterator_end(converter)) { snd_config_t *n = snd_config_iterator_entry(i); const char *id; snd_config_get_id(n, &id); if (!id || strcmp(id, "0") == 0) { snd_config_for_each(i, next, converter) { n = snd_config_iterator_entry(i); if (snd_config_get_string(n, &type) < 0) break; err = rate_open_func(rate, type, NULL, 0); if (!err) break; }
} else { snd_config_for_each(i, next, converter) { snd_config_t *n = snd_config_iterator_entry(i); const char *id; snd_config_get_id(n, &id); if (strcmp(id, "name") != 0) continue; if (snd_config_get_string(n, &type) < 0) break; err = rate_open_func(rate, type, converter, 0); if (!err) break; } } }