/* =========================================================================== Copyright (C) 1999-2005 Id Software, Inc. Copyright (C) 2005 Stuart Dalton (badcdev@gmail.com) This file is part of Quake III Arena source code. Quake III Arena source code 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. Quake III Arena source code 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 Quake III Arena source code; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ #ifndef _SND_CODEC_H_ #define _SND_CODEC_H_ #include "../qcommon/q_shared.h" #include "../qcommon/qcommon.h" struct snd_info_t { int rate; int width; int channels; int samples; int size; int dataofs; }; struct snd_codec_t; typedef struct { const snd_codec_t* codec; snd_info_t info; fileHandle_t file; int length; int pos; void *ptr; } snd_stream_t; // Codec functions typedef byte* (*CODEC_LOAD)(const char *filename, snd_info_t *info); typedef snd_stream_t* (*CODEC_OPEN)(const char *filename); typedef int (*CODEC_READ)(snd_stream_t *stream, int bytes, void *buffer); typedef void (*CODEC_CLOSE)(snd_stream_t *stream); // Codec data structure struct snd_codec_t { const char* ext; CODEC_LOAD load; CODEC_OPEN open; CODEC_READ read; CODEC_CLOSE close; const snd_codec_t* next; }; // Codec management void S_CodecInit(); void S_CodecShutdown(); void S_CodecRegister( snd_codec_t* codec ); byte* S_CodecLoad( const char* filename, snd_info_t* info ); snd_stream_t* S_CodecOpenStream( const char* filename ); void S_CodecCloseStream(snd_stream_t *stream); int S_CodecReadStream(snd_stream_t *stream, int bytes, void *buffer); // Util functions (used by codecs) snd_stream_t* S_CodecUtilOpen( const char* filename, const snd_codec_t* codec ); void S_CodecUtilClose( snd_stream_t* stream ); extern snd_codec_t wav_codec; #ifdef USE_CODEC_VORBIS extern snd_codec_t ogg_codec; #endif #endif // !_SND_CODEC_H_