Browse Source

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

Alex Szpakowski 12 years ago
parent
commit
bf070afffa
2 changed files with 42 additions and 16 deletions
  1. 40 16
      src/modules/sound/SoundData.cpp
  2. 2 0
      src/modules/sound/SoundData.h

+ 40 - 16
src/modules/sound/SoundData.cpp

@@ -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 - 0
src/modules/sound/SoundData.h

@@ -57,6 +57,8 @@ public:
 
 private:
 
+	void load(int samples, int sampleRate, int bitDepth, int channels, void *newData = 0);
+
 	char *data;
 	int size;