From: Andre Date: Wed, 17 May 2006 19:38:52 +0000 (+0200) Subject: split afs.h X-Git-Tag: v0.2.14~107 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=f3ebfd3dcb117f1c4a91c2c9f08d8ed710ee3907;hp=8b2c02c8d6255583982e767374d39375b3380c4d split afs.h move the audio format handler stuff to the new afh.h header file which isn't included by any of the senders. --- diff --git a/aac_afh.c b/aac_afh.c index 1f3ea6b3..fdb37a7e 100644 --- a/aac_afh.c +++ b/aac_afh.c @@ -25,6 +25,7 @@ #include "server.cmdline.h" #include "server.h" #include "afs.h" +#include "afh.h" #include "error.h" #include "string.h" #include "aac.h" diff --git a/afh.h b/afh.h new file mode 100644 index 00000000..403b7a55 --- /dev/null +++ b/afh.h @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2005-2006 Andre Noll + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/** \file afh.h 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 + +/** \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_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)(struct audio_format_handler*); + /** + * 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); +}; diff --git a/afs.c b/afs.c index e3b0db55..41ef1e21 100644 --- a/afs.c +++ b/afs.c @@ -26,6 +26,7 @@ #include /* gettimeofday */ #include "server.cmdline.h" #include "db.h" +#include "afh.h" #include "afs.h" #include "send.h" #include "error.h" @@ -393,6 +394,10 @@ char *afs_get_header(int *header_len) return NULL; return afl[mmd->audio_format].get_header_info(header_len); } +const char *supported_audio_formats(void) +{ + return SUPPORTED_AUDIO_FORMATS; +} /** * get the chunk time of the current audio file diff --git a/afs.h b/afs.h index 3725ffa1..3f4d1d7c 100644 --- a/afs.h +++ b/afs.h @@ -16,121 +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_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)(struct audio_format_handler*); - /** - * 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); @@ -142,3 +28,10 @@ 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 diff --git a/command.c b/command.c index f2c54973..531c776a 100644 --- a/command.c +++ b/command.c @@ -591,7 +591,7 @@ static int com_si(int fd, int argc, __a_unused char **argv) mmd->num_connects, conf.loglevel_arg, selector_string, - SUPPORTED_AUDIO_FORMATS, + supported_audio_formats(), sender_list, sender_info ); diff --git a/mp3.c b/mp3.c index d8ec8bec..4bd88887 100644 --- a/mp3.c +++ b/mp3.c @@ -31,6 +31,7 @@ #include "server.cmdline.h" #include "server.h" #include "afs.h" +#include "afh.h" #include "error.h" #include "fd.h" diff --git a/ogg.c b/ogg.c index 6bdb2306..3445970b 100644 --- a/ogg.c +++ b/ogg.c @@ -24,6 +24,7 @@ #include "server.cmdline.h" #include "server.h" #include "afs.h" +#include "afh.h" #include "error.h" #include "string.h" @@ -46,7 +47,7 @@ static int ogg_compute_header_len(void) unsigned int serial; char *buf; ogg_page page; - ogg_packet packet; + ogg_packet packet; vorbis_comment vc; vorbis_info vi; ogg_stream_state *stream_in = para_malloc(sizeof(ogg_stream_state)); diff --git a/server.c b/server.c index 2391e07c..1805c92b 100644 --- a/server.c +++ b/server.c @@ -33,6 +33,7 @@ #include "db.h" #include "server.h" #include "afs.h" +#include "afh.h" /* FIXME */ #include "config.h" #include "close_on_fork.h" #include "send.h"