X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh_common.c;h=0b0d84beb04b2e558c44b8985861d0734561865a;hp=bab4d41577952f257ef8c828f9c89c8886a7d2e5;hb=54fda72783697f2258faa95d642224c47454b11b;hpb=e5de57de1b8bf1df96c152fc92f5a49f75d6d96c diff --git a/afh_common.c b/afh_common.c index bab4d415..0b0d84be 100644 --- a/afh_common.c +++ b/afh_common.c @@ -80,24 +80,40 @@ static struct audio_format_handler afl[] = { .init = opus_afh_init, #endif }, - { - .name = NULL, - } }; +/** This includes audio formats not compiled in. */ +#define NUM_AUDIO_FORMATS (ARRAY_SIZE(afl)) + +/** + * Get the name of the given audio format. + * + * \param i The audio format number. + * + * \return This returns a pointer to statically allocated memory so it + * must not be freed by the caller. + */ +const char *audio_format_name(int i) +{ + if (i < 0 || i >= NUM_AUDIO_FORMATS) + return "???"; + return afl[i].name; +} + static inline int next_audio_format(int format) { for (;;) { - if (!afl[format].name) - return format; format++; + if (format >= NUM_AUDIO_FORMATS) + return format; if (afl[format].init) return format; } } /** Iterate over each supported audio format. */ -#define FOR_EACH_AUDIO_FORMAT(i) for (i = 0; afl[i].name; i = next_audio_format(i)) +#define FOR_EACH_AUDIO_FORMAT(i) \ + for (i = 0; i < NUM_AUDIO_FORMATS; i = next_audio_format(i)) /** * Call the init function of each supported audio format handler. @@ -160,21 +176,6 @@ int guess_audio_format(const char *name) return -E_AUDIO_FORMAT; } -/** - * Get the name of the given audio format. - * - * \param i The audio format number. - * - * \return This returns a pointer to statically allocated memory so it - * must not be freed by the caller. - */ -const char *audio_format_name(int i) -{ - if (i < 0 || i >= ARRAY_SIZE(afl) - 1) - return "???"; - return afl[i].name; -} - static int get_file_info(int format, const char *path, char *data, size_t size, int fd, struct afh_info *afhi) { @@ -313,7 +314,7 @@ __must_check int afh_get_chunk(long unsigned chunk_num, struct afh_info *afhi, if (ret < 0) return ret; } - ret = afl[audio_format_id].get_chunk(chunk_num, *afh_context, + ret = afh->get_chunk(chunk_num, *afh_context, buf, len); if (ret < 0) { afh->close(*afh_context);