Fixed a SoundData constructor to compile in Visual C++ 2010

This commit is contained in:
Alex Szpakowski
2013-10-08 18:17:31 -03:00
parent 1c7c72472a
commit bf070afffa
2 changed files with 42 additions and 16 deletions
+40 -16
View File
@@ -85,10 +85,31 @@ SoundData::SoundData(Decoder *decoder)
SoundData::SoundData(int samples, int sampleRate, int bitDepth, int channels)
: data(0)
, size(samples*(bitDepth/8)*channels)
, sampleRate(sampleRate)
, bitDepth(bitDepth)
, channels(channels)
, size(0)
, sampleRate(0)
, bitDepth(0)
, channels(0)
{
load(samples, sampleRate, bitDepth, channels);
}
SoundData::SoundData(void *d, int samples, int sampleRate, int bitDepth, int channels)
: data(0)
, size(0)
, sampleRate(0)
, bitDepth(0)
, channels(0)
{
load(samples, sampleRate, bitDepth, channels, d);
}
SoundData::~SoundData()
{
if (data != 0)
free(data);
}
void SoundData::load(int samples, int sampleRate, int bitDepth, int channels, void *newData)
{
if (samples <= 0)
throw love::Exception("Invalid sample count: %d", samples);
@@ -102,25 +123,28 @@ SoundData::SoundData(int samples, int sampleRate, int bitDepth, int channels)
if (channels <= 0)
throw love::Exception("Invalid channel count: %d", channels);
if (data != 0)
{
free(data);
data = 0;
}
size = samples * (bitDepth / 8) * channels;
this->sampleRate = sampleRate;
this->bitDepth = bitDepth;
this->channels = channels;
double realsize = samples;
realsize *= (bitDepth/8)*channels;
realsize *= (bitDepth / 8) * channels;
if (realsize > INT_MAX)
throw love::Exception("Data is too big!");
data = (char *)malloc(size);
if (!data)
throw love::Exception("Not enough memory.");
}
SoundData::SoundData(void *d, int samples, int sampleRate, int bitDepth, int channels)
: SoundData(samples, sampleRate, bitDepth, channels)
{
memcpy(data, d, size);
}
SoundData::~SoundData()
{
if (data != 0)
free(data);
if (newData)
memcpy(data, newData, size);
}
void *SoundData::getData() const
+2
View File
@@ -57,6 +57,8 @@ public:
private:
void load(int samples, int sampleRate, int bitDepth, int channels, void *newData = 0);
char *data;
int size;