X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afh.h;h=73c02c128565f9d03fe216dd4732a75877f5f5a1;hp=35b7a70e4dff72220f4550f4fbecc6dffdc48710;hb=5f25c580aed568f05dd8ec285c2990ad1906b83d;hpb=aee7bc654a67f45556ad2c6dc0e98a06bc95c8ff diff --git a/afh.h b/afh.h index 35b7a70e..73c02c12 100644 --- a/afh.h +++ b/afh.h @@ -1,19 +1,7 @@ /* - * Copyright (C) 2005-2006 Andre Noll + * Copyright (C) 2005-2007 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. + * Licensed under the GPL v2. For licencing details see COPYING. */ /** \file afh.h structures for audio format handling (para_server) */ @@ -41,6 +29,43 @@ /** \endcond */ +/** size of the audio_file info string */ +#define AUDIO_FILE_INFO_SIZE 16384 + +struct audio_format_info { + /** the number of chunks this audio file contains */ + long unsigned chunks_total; + /** the length of the audio file in seconds */ + long unsigned seconds_total; + /** 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 current audio file. + */ + size_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 */ + struct timeval eof_tv; + /** + * 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 + * which means that this audio format does not need any special header + * 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; + uint8_t channels; + uint16_t frequency; + uint16_t bitrate; +}; + /** * structure for audio format handling * @@ -64,55 +89,18 @@ struct audio_format_handler { * 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 and to return the chunk table - * via \a vss_chunk_table. - */ - int (*get_file_info)(FILE *audio_file, char *info_str, - long unsigned *chunks, int *seconds, size_t **vss_chunk_table); - /** - * 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); - /** - * 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. + * 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 must return a positive value and fill in the + * given struct audio_format_info. * - * 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. + * \sa struct audio_format_info */ - char * (*read_chunk)(long unsigned chunk_num, ssize_t *len); + int (*get_file_info)(char *map, size_t numbytes, + struct audio_format_info *afi); }; +