X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afs.h;h=19d5b685e927811f3ab74d6e771824f274c368c8;hp=f1dc9b94380cb05724d6cab4c1f558a4f77ccc96;hb=db34194eaab9819772bd55ea1ab08c719ed8f1c8;hpb=2ed89c59f0efcd0a2763f47c7d3455663241e623 diff --git a/afs.h b/afs.h index f1dc9b94..19d5b685 100644 --- a/afs.h +++ b/afs.h @@ -27,9 +27,17 @@ #define OV_AUDIO_FORMAT_ARRAY #endif -#define SUPPORTED_AUDIO_FORMATS "mp3" OV_AUDIO_FORMAT -#define SUPPORTED_AUDIO_FORMATS_ARRAY "mp3" OV_AUDIO_FORMAT_ARRAY, NULL +#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 /* status flags */ #define AFS_NOMORE 1 @@ -47,93 +55,79 @@ * para_server calls the \a init function of each audio format handler which is * expected to fill in all the other function pointers. */ -struct audio_format { -/** - * - * - * name of the audio format - */ -const char *name; -/** - * - * - * pointer to the audio format handler's init function - * - * Must initialize all function pointers and is assumed to succeed. - */ -void (*init)(void*); -/** - * - * - * period of time between sending data chunks -*/ -struct timeval chunk_tv; /* length of one chunk of data */ -/** - * - * - * end of file timeout - do not load new audio file until this time - * -*/ -struct timeval eof_tv; /* timeout on eof */ -/** - * - * - * Pointer to the optional get-header function. - * - * This is called from a sender in case a new client connects in the middle of - * the stream. The audio format handler may set this to NULL to indicate that - * this audio format does not need any special header treatment. If non-NULL, - * the function it points to must return a pointer to a buffer holding the - * current audio file header, together with the header length. -*/ -char *(*get_header_info)(int *header_len); -/** - * - * - * 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 success, the function is - * expected to return a positive value and to fill in \arg info_str, \arg - * chunks and \arg seconds appropriately. -*/ -int (*get_file_info)(FILE *audio_file, char *info_str, - long unsigned *chunks, int *seconds); -/** - * - * - * cleanup function of this audio format handler - * - * This close function should deallocate any resources - * associated with the current audio file. In particular, it is responsible - * for closing the file handle. It is assumed to succeed. -*/ -void (*close_audio_file)(void); -/** - * - * - * jump to another position in the current audio file - * - * This is called if a client issued the ff or jmp command with \a request - * being the number of the next chunk that should be sent out. Must return a - * positive value on success and a negative value on errors. -*/ -int (*reposition_stream)(long unsigned request); -/** - * - * - * function responsible for reading one data chunk. - * - * \a read_chunk() must return a pointer to the next chunk of data that should - * be sent out, or \p NULL on errors or if the end of the file was encountered. - * - * If it returns non-NULL, \a len must contain the length of the returned - * buffer (which may be zero if nothing has to be sent for some reason). - * Otherwise, \a len is used to distinguish between the eof and the error case: - * It must be zero in the eof case, or negative if an error occcured. -*/ -char * (*read_chunk)(long unsigned chunk_num, ssize_t *len); +struct audio_format_handler { + /** + * 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 + * + * Must initialize all function pointers and is assumed to succeed. + */ + void (*init)(void*); + /** + * period of time between sending data chunks + */ + struct timeval chunk_tv; /* length of one chunk of data */ + /** + * end of file timeout - do not load new audio file until this time + * + */ + struct timeval eof_tv; /* timeout on eof */ + /** + * Pointer to the optional get-header function. + * + * This is called from a sender in case a new client connects in the middle of + * the stream. The audio format handler may set this to NULL to indicate that + * this audio format does not need any special header treatment. If non-NULL, + * the function it points to must return a pointer to a buffer holding the + * current audio file header, together with the header length. + */ + char *(*get_header_info)(int *header_len); + /** + * 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 success, the function is + * expected to return a positive value and to fill in \arg info_str, \arg + * chunks and \arg seconds appropriately. + */ + int (*get_file_info)(FILE *audio_file, char *info_str, + long unsigned *chunks, int *seconds); + /** + * cleanup function of this audio format handler + * + * This close function should deallocate any resources + * associated with the current audio file. In particular, it is responsible + * for closing the file handle. It is assumed to succeed. + */ + void (*close_audio_file)(void); + /** + * jump to another position in the current audio file + * + * This is called if a client issued the ff or jmp command with \a request + * being the number of the next chunk that should be sent out. Must return a + * positive value on success and a negative value on errors. + */ + int (*reposition_stream)(long unsigned request); + /** + * function responsible for reading one data chunk. + * + * \a read_chunk() must return a pointer to the next chunk of data that should + * be sent out, or \p NULL on errors or if the end of the file was encountered. + * + * If it returns non-NULL, \a len must contain the length of the returned + * buffer (which may be zero if nothing has to be sent for some reason). + * Otherwise, \a len is used to distinguish between the eof and the error case: + * It must be zero in the eof case, or negative if an error occcured. + */ + char * (*read_chunk)(long unsigned chunk_num, ssize_t *len); }; void afs_init(void);