X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh.h;h=ffccce95fbb12720d40e5549e60781bc6c5e7fe4;hp=73c02c128565f9d03fe216dd4732a75877f5f5a1;hb=2bb9fcbfa99cf30a6f46ba33fd95c0a456a225cc;hpb=471684761a2039bbc89aa1e3c33c62de6bef86cf diff --git a/afh.h b/afh.h index 73c02c12..ffccce95 100644 --- a/afh.h +++ b/afh.h @@ -9,45 +9,45 @@ /** \cond */ #ifdef HAVE_OGGVORBIS #define OV_AUDIO_FORMAT " ogg" -#define OV_AUDIO_FORMAT_ARRAY , "ogg" #else #define OV_AUDIO_FORMAT "" -#define OV_AUDIO_FORMAT_ARRAY #endif #ifdef HAVE_FAAD #define AAC_AUDIO_FORMAT " aac" -#define AAC_AUDIO_FORMAT_ARRAY , "aac" #else #define AAC_AUDIO_FORMAT "" -#define AAC_AUDIO_FORMAT_ARRAY #endif #define SUPPORTED_AUDIO_FORMATS "mp3" OV_AUDIO_FORMAT AAC_AUDIO_FORMAT -#define SUPPORTED_AUDIO_FORMATS_ARRAY "mp3" OV_AUDIO_FORMAT_ARRAY \ - AAC_AUDIO_FORMAT_ARRAY, NULL /** \endcond */ -/** size of the audio_file info string */ -#define AUDIO_FILE_INFO_SIZE 16384 +/** Size of the audio_file info string. */ +#define AUDIO_FILE_INFO_SIZE 256 -struct audio_format_info { - /** the number of chunks this audio file contains */ +/** Audio format dependent information. */ +struct afh_info { + /** The number of chunks this audio file contains. */ long unsigned chunks_total; - /** the length of the audio file in seconds */ + /** The length of the audio file in seconds. */ long unsigned seconds_total; - /** a string that gets filled in by the audio format handler */ + /** A string that gets filled in by the audio format handler. */ char info_string[AUDIO_FILE_INFO_SIZE]; /** - * the table that specifies the offset of the individual pieces in + * The table that specifies the offset of the individual pieces in * the current audio file. */ - size_t *chunk_table; - /** period of time between sending data chunks */ + uint32_t *chunk_table; + /** Period of time between sending data chunks. */ struct timeval chunk_tv; - /** end of file timeout - do not load new audio file until this time */ + /** End of file timeout - Do not load new audio file until this time. */ struct timeval eof_tv; + /** + * The position of the header within the audio file. Ignored if \a + * header_len equals zero. + */ + uint32_t header_offset; /** * The header is needed by senders in case a new client connects in the * middle of the stream. The length of the header defaults to zero @@ -55,52 +55,51 @@ struct audio_format_info { * treatment. The audio format handler does not need to set this to * zero in this case. */ - unsigned header_len; - /** - * The position of the header within the audio file. Ignored if \a - * header_len equals zero. - */ - unsigned header_offset; + uint32_t header_len; + /** The number of channels. */ uint8_t channels; + /** Frequency in Hz. */ uint16_t frequency; + /** Exact meaning depends on audio format. */ uint16_t bitrate; }; /** - * structure for audio format handling + * Structure for audio format handling. * - * There's exactly one such struct for each supported audio format. Initially, - * only \a name and \a init are defined. During the startup process, - * para_server calls the \a init function of each audio format handler which is - * expected to fill in all the other function pointers. + * There's one such struct for each supported audio format. Initially, only \a + * name and \a init are defined. During the startup process, para_server calls + * the \a init function of each audio format handler which is expected to fill + * in the other part of this struct. */ struct audio_format_handler { - /** - * name of the audio format - */ + /** Name of the audio format. */ const char *name; /** - * typical file endings for files that can be handled by this afh. - */ - const char **suffixes; - /** - * pointer to the audio format handler's init function + * Pointer to the audio format handler's init function. * * Must initialize all function pointers and is assumed to succeed. */ void (*init)(struct audio_format_handler*); + /** Typical file endings for files that can be handled by this afh. */ + const char **suffixes; /** - * check if this audio format handler can handle the file + * Check if this audio format handler can handle the file. * * 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 did not recognize the given file. On + * this audio format handler is unable to decode the given file. On * success, the function must return a positive value and fill in the - * given struct audio_format_info. + * given struct afh_info. * - * \sa struct audio_format_info - */ + * \sa struct afh_info + */ int (*get_file_info)(char *map, size_t numbytes, - struct audio_format_info *afi); + struct afh_info *afi); }; +void afh_init(void); +int guess_audio_format(const char *name); +int compute_afhi(const char *path, char *data, size_t size, + struct afh_info *afhi); +const char *audio_format_name(int);