X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh_common.c;h=f36c32e20ec6332a24720d9bf106ab9b39d756ba;hp=063ae8f0b104ccab15e9f10f637ec34e7783e785;hb=33692c33f2effa9620064aec44c6196a8d830d05;hpb=9d8fdf8898418711558f70a9630b2444036d8285 diff --git a/afh_common.c b/afh_common.c index 063ae8f0..f36c32e2 100644 --- a/afh_common.c +++ b/afh_common.c @@ -139,6 +139,38 @@ 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) +{ + int ret; + const char *fmt = audio_format_name(format); + + memset(afhi, 0, sizeof(*afhi)); + ret = afl[format].get_file_info(data, size, fd, afhi); + if (ret < 0) { + PARA_WARNING_LOG("%s: %s format not detected: %s\n", + path, fmt, para_strerror(-ret)); + return ret; + } + PARA_NOTICE_LOG("%s: detected %s format\n", path, fmt); + return format; +} + /** * Call get_file_info() to obtain an afhi structure. * @@ -163,31 +195,18 @@ int compute_afhi(const char *path, char *data, size_t size, int fd, { int ret, i, format; - afhi->header_len = 0; - afhi->techinfo = NULL; - afhi->tags.artist = NULL; - afhi->tags.title = NULL; - afhi->tags.year = NULL; - afhi->tags.album = NULL; - afhi->tags.comment = NULL; format = guess_audio_format(path); - if (format >= 0) { - ret = afl[format].get_file_info(data, size, fd, afhi); - if (ret >= 0) { - ret = format; + ret = get_file_info(format, path, data, size, fd, afhi); + if (ret >= 0) goto success; - } } FOR_EACH_AUDIO_FORMAT(i) { if (i == format) /* we already tried this one to no avail */ continue; - ret = afl[i].get_file_info(data, size, fd, afhi); - if (ret >= 0) { - ret = i; + ret = get_file_info(i, path, data, size, fd, afhi); + if (ret >= 0) goto success; - } - PARA_WARNING_LOG("%s\n", para_strerror(-ret)); } return -E_AUDIO_FORMAT; success: @@ -233,21 +252,6 @@ void clear_afhi(struct afh_info *afhi) free(afhi->tags.comment); } -/** - * 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 inline size_t get_chunk_len(long unsigned chunk_num, const struct afh_info *afhi) {