[Scummvm-cvs-logs] CVS: scummvm/sound mixer.cpp,1.7,1.8 mixer.h,1.4,1.5
Pawe? Ko?odziejski
aquadran at users.sourceforge.net
Sat Sep 14 05:13:03 CEST 2002
Update of /cvsroot/scummvm/scummvm/sound
In directory usw-pr-cvs1:/tmp/cvs-serv31946
Modified Files:
mixer.cpp mixer.h
Log Message:
fixed stream in mixer, not completed yet - bad wrap around.
Index: mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- mixer.cpp 8 Sep 2002 01:08:12 -0000 1.7
+++ mixer.cpp 14 Sep 2002 12:12:25 -0000 1.8
@@ -593,10 +593,11 @@
byte flags) {
_mixer = mixer;
_flags = flags;
- _bufferSize = 1024 * size;
+ _bufferSize = 850000;
_ptr = (byte *)malloc(_bufferSize);
memcpy(_ptr, sound, size);
_endOfData = _ptr + size;
+ _endOfBuffer = _ptr + _bufferSize;
if (_flags & FLAG_AUTOFREE)
free(sound);
_pos = _ptr;
@@ -616,14 +617,15 @@
byte *cur_pos = _pos; /* This is just to prevent the variable to move during the tests :-) */
if (new_end > (_ptr + _bufferSize)) {
/* Wrap-around case */
- new_end = _ptr + len - ((_ptr + _bufferSize) - _endOfData);
+ uint32 size_to_end_of_buffer = _endOfBuffer - _endOfData;
+ uint32 new_size = len - size_to_end_of_buffer;
+ new_end = _ptr + new_size;
if ((_endOfData < cur_pos) || (new_end >= cur_pos)) {
warning("Mixer full... Trying to not break too much ");
return;
}
- memcpy(_endOfData, data, (_ptr + _bufferSize) - _endOfData);
- memcpy(_ptr, (byte *)data + ((_ptr + _bufferSize) - _endOfData),
- len - ((_ptr + _bufferSize) - _endOfData));
+ memcpy(_endOfData, (byte*)data, size_to_end_of_buffer);
+ memcpy(_ptr, (byte *)data + size_to_end_of_buffer, new_size);
} else {
if ((_endOfData < cur_pos) && (new_end >= cur_pos)) {
warning("Mixer full... Trying to not break too much ");
@@ -640,8 +642,10 @@
const int16 * vol_tab = _mixer->_volumeTable;
byte * end_of_data = _endOfData;
- if (_toBeDestroyed) {
- realDestroy();
+ if (_pos == end_of_data) {
+ if (--_timeOut == 0) {
+ realDestroy();
+ }
return;
}
@@ -650,9 +654,13 @@
if (_pos < end_of_data) {
mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, end_of_data);
} else {
- _toBeDestroyed = true;
+ mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, _endOfBuffer);
+ if (len != 0) {
+ _pos = _ptr;
+ mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, end_of_data);
+ }
}
-
+ _timeOut = 2;
_fpPos = fp_pos;
}
Index: mixer.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- mixer.h 8 Sep 2002 01:08:12 -0000 1.4
+++ mixer.h 14 Sep 2002 12:12:25 -0000 1.5
@@ -73,11 +73,13 @@
SoundMixer * _mixer;
byte * _ptr;
byte * _endOfData;
+ byte * _endOfBuffer;
byte * _pos;
uint32 _fpSpeed;
uint32 _fpPos;
uint32 _bufferSize;
uint32 _rate;
+ uint32 _timeOut;
byte _flags;
public:
More information about the Scummvm-git-logs
mailing list