X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh_common.c;h=dfbf75132f4e4372eb0b4c95bff8ef25793dc545;hp=063ae8f0b104ccab15e9f10f637ec34e7783e785;hb=1709cc8f8a54429441f8f83c38146e667133c727;hpb=db748cc3c4d60e1ec7fefe2ad58142c2820ae07f diff --git a/afh_common.c b/afh_common.c index 063ae8f0..dfbf7513 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) { @@ -291,8 +295,8 @@ int32_t afh_get_start_chunk(int32_t approx_chunk_num, for (k = PARA_MAX(0, approx_chunk_num); k >= 0; k--) if (get_chunk_len(k, afhi) > 0) - break; - return k; + return k; + return 0; } /**