X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh_common.c;h=f57ca89fb4b4afc8d7387269d97c0dd1630fddd5;hp=a1ea3c72ef49c2d5e538fe2a59a47670b164b238;hb=39bb1a102b14e3f230a659290622b2d1b1658b44;hpb=a6e79f02b6eab623425686f8f3cab5bc942e77d4 diff --git a/afh_common.c b/afh_common.c index a1ea3c72..f57ca89f 100644 --- a/afh_common.c +++ b/afh_common.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2007 Andre Noll + * Copyright (C) 1997-2008 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -75,6 +75,9 @@ static inline int next_audio_format(int format) /** Iterate over each supported audio format. */ #define FOR_EACH_AUDIO_FORMAT(i) for (i = 0; afl[i].name; i = next_audio_format(i)) +/** + * Call the init function of each supported audio format handler. + */ void afh_init(void) { int i; @@ -116,7 +119,7 @@ int guess_audio_format(const char *name) return i; } } - return -E_BAD_AUDIO_FILE_SUFFIX; + return -1; } /** @@ -140,7 +143,11 @@ int guess_audio_format(const char *name) int compute_afhi(const char *path, char *data, size_t size, struct afh_info *afhi) { - int ret, i, format = guess_audio_format(path); + int ret, i, format; + + afhi->header_offset = 0; + afhi->header_len = 0; + format = guess_audio_format(path); if (format >= 0) { ret = afl[format].get_file_info(data, size, afhi); @@ -153,7 +160,7 @@ int compute_afhi(const char *path, char *data, size_t size, ret = afl[i].get_file_info(data, size, afhi); if (ret >= 0) return i; - PARA_WARNING_LOG("%s\n", PARA_STRERROR(-ret)); + PARA_WARNING_LOG("%s\n", para_strerror(-ret)); } return -E_AUDIO_FORMAT; } @@ -173,3 +180,33 @@ const char *audio_format_name(int i) return i >= 0? afl[i].name : "(none)"; } + +void afh_get_chunk(long unsigned chunk_num, struct afh_info *afhi, + void *map, const char **buf, size_t *len) +{ + size_t pos = afhi->chunk_table[chunk_num]; + *buf = map + pos; + *len = afhi->chunk_table[chunk_num + 1] - pos; +} + +/** + * Get the header of an audio file. + * + * \param afhi The audio file handler data describing the file. + * \param map The data of the audio file. + * \param buf The length of the header is stored here. + * \param len Points to a buffer containing the header on return. + * + * This function sets \a buf to \p NULL and \a len to zero if \a map or \a + * afhi is \p NULL, or if the current audio format does not need special + * header treamtment. + */ +void afh_get_header(struct afh_info *afhi, void *map, const char **buf, size_t *len) +{ + if (!map || !afhi || ! afhi->header_len) { + *buf = NULL; + *len = 0; + } + *len = afhi->header_len; + *buf = map + afhi->header_offset; +}