Merge branch 't/sound_device_lock'
[paraslash.git] / afh.h
diff --git a/afh.h b/afh.h
index 8b747f8a436b0da18f3cd83a8e90c50e23e7ea83..4204108a33131e3b4bda8a007bd429665246860c 100644 (file)
--- a/afh.h
+++ b/afh.h
@@ -1,10 +1,10 @@
 /*
- * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2014 Andre Noll <maan@tuebingen.mpg.de>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
 
-/** \file afh.h structures for audio format handling (para_server) */
+/** \file afh.h Structures for audio format handling (para_server). */
 
 /**
  * The tags used by all audio format handlers.
@@ -58,6 +58,18 @@ struct afh_info {
        uint16_t bitrate;
 };
 
+/** Data about the current audio file, passed from afs to server. */
+struct audio_file_data {
+       /** The open file descriptor to the current audio file. */
+       int fd;
+       /** Vss needs this for streaming. */
+       struct afh_info afhi;
+       /** Size of the largest chunk. */
+       uint32_t max_chunk_size;
+       /** Needed to get the audio file header. */
+       uint8_t audio_format_id;
+};
+
 /**
  *  Structure for audio format handling.
  *
@@ -80,7 +92,7 @@ struct audio_format_handler {
        /**
         * Check if this audio format handler can handle the file.
         *
-        * This is a  pointer to a function returning whether a given file is
+        * This is a pointer to a function returning whether a given file is
         * valid for this audio format. A negative return value indicates that
         * this audio format handler is unable to decode the given file. On
         * success, the function must return a positive value and fill in the
@@ -90,7 +102,7 @@ struct audio_format_handler {
         */
        int (*get_file_info)(char *map, size_t numbytes, int fd,
                struct afh_info *afi);
-
+       /** Optional, used for header-rewriting. See \ref afh_get_header(). */
        void (*get_header)(void *map, size_t mapsize, char **buf, size_t *len);
 };
 
@@ -101,7 +113,10 @@ int compute_afhi(const char *path, char *data, size_t size,
 const char *audio_format_name(int);
 void afh_get_chunk(long unsigned chunk_num, struct afh_info *afhi,
                void *map, const char **buf, size_t *len);
-uint32_t afh_get_largest_chunk_size(struct afh_info *afhi);
+int32_t afh_get_start_chunk(int32_t approx_chunk_num,
+               const struct afh_info *afhi);
 void afh_get_header(struct afh_info *afhi, uint8_t audio_format_id,
                void *map, size_t mapsize, char **buf, size_t *len);
 void afh_free_header(char *header_buf, uint8_t audio_format_id);
+void clear_afhi(struct afh_info *afhi);
+unsigned afh_get_afhi_txt(int audio_format_num, struct afh_info *afhi, char **result);