X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh_common.c;h=feee4c8d3dc14b492a65271daa5cffd9a90e93a5;hp=a726254aa29aab7f9b72937900c6999f89a751f7;hb=78882bd94652b156e55e6385a33cd5126c439651;hpb=c73d23911d78ed10179c12ef8f79a3fcf3bbcdaf diff --git a/afh_common.c b/afh_common.c index a726254a..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. */ @@ -119,7 +119,7 @@ int guess_audio_format(const char *name) return i; } } - return -E_BAD_AUDIO_FILE_SUFFIX; + return -1; } /** @@ -143,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); @@ -176,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; +}