X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh_common.c;h=feee4c8d3dc14b492a65271daa5cffd9a90e93a5;hp=311e0c13046de441f3b01bc470e355fa2670ea5a;hb=78882bd94652b156e55e6385a33cd5126c439651;hpb=b3ee0fa979a74e9d7a1497ec5a3ac8fa7cc7472b diff --git a/afh_common.c b/afh_common.c index 311e0c13..feee4c8d 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; } /** @@ -138,9 +141,13 @@ int guess_audio_format(const char *name) * one is found that can handle the file. */ int compute_afhi(const char *path, char *data, size_t size, - struct audio_format_info *afhi) + 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, 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, char **buf, size_t *len) +{ + if (!map || !afhi || ! afhi->header_len) { + *buf = NULL; + *len = 0; + } + *len = afhi->header_len; + *buf = map + afhi->header_offset; +}