X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afs.h;h=3f4d1d7cf6eee49b8052214ae0e52dbf5e225a09;hp=cc96dbbbf31793426ac5f5334be15d06f6d0576e;hb=d42af6d28fa44d085b048cb064e20c79189b88b2;hpb=55f0f9461990455656bef7a36b0f963e3d676653 diff --git a/afs.h b/afs.h index cc96dbbb..3f4d1d7c 100644 --- a/afs.h +++ b/afs.h @@ -16,134 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ -/** \file afs.h functions and structures for audio format handling (para_server) */ - -/** \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 - -/* status flags */ -#define AFS_NOMORE 1 -#define AFS_NEXT 2 -#define AFS_REPOS 4 -#define AFS_PLAYING 8 -#define DBT_CHANGE 16 -/** \endcond */ - -/** - * 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. - */ -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); -}; - +/** \file afs.h exported functions from afs.c (para_server) */ void afs_init(void); void afs_send_chunk(void); struct timeval *afs_preselect(void); @@ -152,4 +25,13 @@ unsigned int afs_playing(void); unsigned int afs_next(void); unsigned int afs_repos(void); unsigned int afs_paused(void); - +char *afs_get_header(int *header_len); +struct timeval *afs_chunk_time(void); +int guess_audio_format(const char *name); +const char *supported_audio_formats(void); +/* status flags */ +#define AFS_NOMORE 1 +#define AFS_NEXT 2 +#define AFS_REPOS 4 +#define AFS_PLAYING 8 +#define DBT_CHANGE 16