X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh_common.c;h=f57ca89fb4b4afc8d7387269d97c0dd1630fddd5;hp=3fa88f14e7015c42b4c2adadaf1977ccc790f774;hb=06372eab260c4d2cba43bfef0d668744aa6c1216;hpb=c0f9ab7c29b7c79b7d46d8546ce0d3a7ec358c97 diff --git a/afh_common.c b/afh_common.c index 3fa88f14..f57ca89f 100644 --- a/afh_common.c +++ b/afh_common.c @@ -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, 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; +}