mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-12 07:34:50 +00:00
Use a TArray for SoundDecoder::readAll
This commit is contained in:
parent
a16f9d061c
commit
6f8545e694
5 changed files with 16 additions and 15 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue