[Scummvm-cvs-logs] CVS: scummvm/backends/midi ym2612.cpp,1.10,1.11

Max Horn fingolfin at users.sourceforge.net
Mon Oct 6 07:16:06 CEST 2003


Update of /cvsroot/scummvm/scummvm/backends/midi
In directory sc8-pr-cvs1:/tmp/cvs-serv9260

Modified Files:
	ym2612.cpp 
Log Message:
malloc/new optimizations

Index: ym2612.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/midi/ym2612.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- ym2612.cpp	6 Oct 2003 14:08:33 -0000	1.10
+++ ym2612.cpp	6 Oct 2003 14:15:01 -0000	1.11
@@ -109,6 +109,9 @@
 	int _frequencyOffs;
 	int _frequency;
 	int _algorithm;
+	
+	int *_buffer;
+	int _buflen;
 
 public:
 	Voice2612();
@@ -436,6 +439,10 @@
 	_frequency = 440;
 	_frequencyOffs = 0x2000;
 	_algorithm = 7;
+
+	_buffer = 0;
+	_buflen = 0;
+
 	int i;
 	for (i = 0; i < ARRAYSIZE(_opr); ++i)
 		_opr[i] = new Operator2612 (this);
@@ -446,6 +453,7 @@
 	int i;
 	for (i = 0; i < ARRAYSIZE(_opr); ++i)
 		delete _opr[i];
+	free(_buffer);
 }
 
 void Voice2612::velocity(int velo) {
@@ -504,8 +512,15 @@
 	if (_velocity == 0)
 		return;
 
-	int *buf1 = (int *) calloc(buflen * 2, sizeof(int));
-	int *buf2 = buf1 + buflen;
+	if (_buflen < buflen) {
+		free(_buffer);
+		_buflen = buflen;
+		_buffer = (int *) malloc(sizeof(int) * buflen * 2);
+	}
+
+	int *buf1 = _buffer;
+	int *buf2 = _buffer + buflen;
+	memset(_buffer, 0, sizeof(int) * buflen * 2);
 
 	switch (_algorithm) {
 	case 0:
@@ -560,8 +575,6 @@
 		_opr[3]->nextTick(_rate, buf1, outbuf, buflen);
 		break;
 	};
-
-	free (buf1);
 }
 
 void Voice2612::noteOn(int n, int onVelo) {
@@ -832,8 +845,7 @@
 }
 
 void MidiDriver_YM2612::nextTick(int16 *buf1, int buflen) {
-	int *buf0 = new int [buflen];
-	memset(buf0, 0, sizeof(buf0[0]) * buflen);
+	int *buf0 = (int *)buf1;
 
 	int i;
 	for (i = 0; i < ARRAYSIZE(_channel); i++)
@@ -841,7 +853,6 @@
 
 	for (i = 0; i < buflen; ++i)
 		buf1[i*2+1] = buf1[i*2] = ((buf0[i] * volume()) >> 10) & 0xffff;
-	delete [] buf0;
 }
 
 void MidiDriver_YM2612::rate(uint16 r)





More information about the Scummvm-git-logs mailing list