[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