Use a TArray for SoundDecoder::readAll

This commit is contained in:
Chris Robinson 2014-06-27 21:51:05 -07:00
parent a16f9d061c
commit 6f8545e694
5 changed files with 16 additions and 15 deletions

View File

@ -574,18 +574,18 @@ SoundDecoder *SoundRenderer::CreateDecoder(FileReader *reader)
// Default readAll implementation, for decoders that can't do anything better // Default readAll implementation, for decoders that can't do anything better
std::vector<char> SoundDecoder::readAll() TArray<char> SoundDecoder::readAll()
{ {
std::vector<char> output; TArray<char> output;
size_t total = 0; size_t total = 0;
size_t got; size_t got;
output.resize(total+32768); output.Resize(total+32768);
while((got=read(&output[total], output.size()-total)) > 0) while((got=read(&output[total], output.Size()-total)) > 0)
{ {
total += got; total += got;
output.resize(total*2); output.Resize(total*2);
} }
output.resize(total); output.Resize(total);
return output; return output;
} }

View File

@ -6,6 +6,7 @@
#include "basictypes.h" #include "basictypes.h"
#include "vectors.h" #include "vectors.h"
#include "tarray.h"
class FileReader; class FileReader;
@ -123,7 +124,7 @@ struct SoundDecoder
virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) = 0; virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) = 0;
virtual size_t read(char *buffer, size_t bytes) = 0; virtual size_t read(char *buffer, size_t bytes) = 0;
virtual std::vector<char> readAll(); virtual TArray<char> readAll();
virtual bool seek(size_t ms_offset) = 0; virtual bool seek(size_t ms_offset) = 0;
virtual size_t getSampleOffset() = 0; virtual size_t getSampleOffset() = 0;
virtual size_t getSampleLength() { return 0; } virtual size_t getSampleLength() { return 0; }

View File

@ -1024,11 +1024,11 @@ SoundHandle OpenALSoundRenderer::LoadSound(BYTE *sfxdata, int length)
return retval; return retval;
} }
std::vector<char> data = decoder->readAll(); TArray<char> data = decoder->readAll();
ALuint buffer = 0; ALuint buffer = 0;
alGenBuffers(1, &buffer); alGenBuffers(1, &buffer);
alBufferData(buffer, format, &data[0], data.size(), srate); alBufferData(buffer, format, &data[0], data.Size(), srate);
ALenum err; ALenum err;
if((err=getALError()) != AL_NO_ERROR) if((err=getALError()) != AL_NO_ERROR)

View File

@ -100,17 +100,17 @@ size_t SndFileDecoder::read(char *buffer, size_t bytes)
return total * SndInfo.channels * 2; return total * SndInfo.channels * 2;
} }
std::vector<char> SndFileDecoder::readAll() TArray<char> SndFileDecoder::readAll()
{ {
if(SndInfo.frames <= 0) if(SndInfo.frames <= 0)
return SoundDecoder::readAll(); return SoundDecoder::readAll();
int framesize = 2 * SndInfo.channels; int framesize = 2 * SndInfo.channels;
std::vector<char> output; TArray<char> output;
output.resize(SndInfo.frames * framesize); output.Resize(SndInfo.frames * framesize);
size_t got = read(&output[0], output.size()); size_t got = read(&output[0], output.Size());
output.resize(got); output.Resize(got);
return output; return output;
} }

View File

@ -12,7 +12,7 @@ struct SndFileDecoder : public SoundDecoder
virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type); virtual void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type);
virtual size_t read(char *buffer, size_t bytes); virtual size_t read(char *buffer, size_t bytes);
virtual std::vector<char> readAll(); virtual TArray<char> readAll();
virtual bool seek(size_t ms_offset); virtual bool seek(size_t ms_offset);
virtual size_t getSampleOffset(); virtual size_t getSampleOffset();
virtual size_t getSampleLength(); virtual size_t getSampleLength();