00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _SoundBufferOV_H_
00022 #define _SoundBufferOV_H_
00023
00024 #ifdef HAVE_OGG
00025
00026 #include <sound/SoundBuffer.h>
00027 #include <ogg/ogg.h>
00028 #include <vorbis/codec.h>
00029 #include <vorbis/vorbisfile.h>
00030
00031 #define OGG_BUFFER_SIZE (1024 * 1024)
00032
00033 class SoundBufferOV : public SoundBuffer
00034 {
00035 public:
00036 SoundBufferOV(const char *wavFileName);
00037 virtual ~SoundBufferOV();
00038
00039 SoundBufferSourceInstance *createSourceInstance(unsigned int source);
00040
00041 static bool openStream(const char *fileName, OggVorbis_File &oggStream);
00042 static int readData(OggVorbis_File &oggStream, char *data, int dataSize);
00043 static bool addDataToBuffer(vorbis_info *vorbisInfo, int buffer, char *dataBuffer, int size);
00044
00045 static const char *errorString(int code);
00046 static size_t read_func(void *ptr, size_t size, size_t nmemb, void *datasource);
00047 static int seek_func(void *datasource, ogg_int64_t offset, int whence);
00048 static int close_func(void *datasource);
00049 static long tell_func(void *datasource);
00050
00051 protected:
00052 unsigned int buffer_;
00053 };
00054
00055 #endif // HAVE_OGG
00056
00057 #endif