SSI263: fix potential buffer overrun & rename var so it's explicit that it is a byte-size
This commit is contained in:
parent
4375418506
commit
6a5017bf91
2 changed files with 10 additions and 10 deletions
|
@ -307,7 +307,7 @@ void SSI263::Play(unsigned int nPhoneme)
|
||||||
{
|
{
|
||||||
if (!SSI263SingleVoice.bActive)
|
if (!SSI263SingleVoice.bActive)
|
||||||
{
|
{
|
||||||
bool bRes = DSZeroVoiceBuffer(&SSI263SingleVoice, m_kDSBufferSize);
|
bool bRes = DSZeroVoiceBuffer(&SSI263SingleVoice, m_kDSBufferByteSize);
|
||||||
LogFileOutput("SSI263::Play: DSZeroVoiceBuffer(), res=%d\n", bRes ? 1 : 0);
|
LogFileOutput("SSI263::Play: DSZeroVoiceBuffer(), res=%d\n", bRes ? 1 : 0);
|
||||||
if (!bRes)
|
if (!bRes)
|
||||||
return;
|
return;
|
||||||
|
@ -471,7 +471,7 @@ void SSI263::Update(void)
|
||||||
|
|
||||||
//-------------
|
//-------------
|
||||||
|
|
||||||
const UINT kMinBytesInBuffer = m_kDSBufferSize / 4; // 25% full
|
const UINT kMinBytesInBuffer = m_kDSBufferByteSize / 4; // 25% full
|
||||||
int nNumSamples = 0;
|
int nNumSamples = 0;
|
||||||
double updateInterval = 0.0;
|
double updateInterval = 0.0;
|
||||||
|
|
||||||
|
@ -515,8 +515,8 @@ void SSI263::Update(void)
|
||||||
if (nNumSamples > 2 * nNumSamplesPerPeriod)
|
if (nNumSamples > 2 * nNumSamplesPerPeriod)
|
||||||
nNumSamples = 2 * nNumSamplesPerPeriod;
|
nNumSamples = 2 * nNumSamplesPerPeriod;
|
||||||
|
|
||||||
if (nNumSamples > m_kDSBufferSize)
|
if (nNumSamples > m_kDSBufferByteSize / sizeof(short))
|
||||||
nNumSamples = m_kDSBufferSize; // Clamp to prevent buffer overflow
|
nNumSamples = m_kDSBufferByteSize / sizeof(short); // Clamp to prevent buffer overflow
|
||||||
|
|
||||||
// if (nNumSamples)
|
// if (nNumSamples)
|
||||||
// { /* Generate new sample data - ie. could merge from all the SSI263 sources */ }
|
// { /* Generate new sample data - ie. could merge from all the SSI263 sources */ }
|
||||||
|
@ -525,13 +525,13 @@ void SSI263::Update(void)
|
||||||
|
|
||||||
int nBytesRemaining = m_byteOffset - dwCurrentPlayCursor;
|
int nBytesRemaining = m_byteOffset - dwCurrentPlayCursor;
|
||||||
if (nBytesRemaining < 0)
|
if (nBytesRemaining < 0)
|
||||||
nBytesRemaining += m_kDSBufferSize;
|
nBytesRemaining += m_kDSBufferByteSize;
|
||||||
|
|
||||||
// Calc correction factor so that play-buffer doesn't under/overflow
|
// Calc correction factor so that play-buffer doesn't under/overflow
|
||||||
const int nErrorInc = SoundCore_GetErrorInc();
|
const int nErrorInc = SoundCore_GetErrorInc();
|
||||||
if (nBytesRemaining < kMinBytesInBuffer)
|
if (nBytesRemaining < kMinBytesInBuffer)
|
||||||
m_numSamplesError += nErrorInc; // < 0.25 of buffer remaining
|
m_numSamplesError += nErrorInc; // < 0.25 of buffer remaining
|
||||||
else if (nBytesRemaining > m_kDSBufferSize / 2)
|
else if (nBytesRemaining > m_kDSBufferByteSize / 2)
|
||||||
m_numSamplesError -= nErrorInc; // > 0.50 of buffer remaining
|
m_numSamplesError -= nErrorInc; // > 0.50 of buffer remaining
|
||||||
else
|
else
|
||||||
m_numSamplesError = 0; // Acceptable amount of data in buffer
|
m_numSamplesError = 0; // Acceptable amount of data in buffer
|
||||||
|
@ -636,7 +636,7 @@ void SSI263::Update(void)
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_byteOffset = (m_byteOffset + (DWORD)nNumSamples*sizeof(short)*m_kNumChannels) % m_kDSBufferSize;
|
m_byteOffset = (m_byteOffset + (DWORD)nNumSamples*sizeof(short)*m_kNumChannels) % m_kDSBufferByteSize;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -758,7 +758,7 @@ bool SSI263::DSInit(void)
|
||||||
// Create single SSI263 voice
|
// Create single SSI263 voice
|
||||||
//
|
//
|
||||||
|
|
||||||
HRESULT hr = DSGetSoundBuffer(&SSI263SingleVoice, DSBCAPS_CTRLVOLUME, m_kDSBufferSize, SAMPLE_RATE_SSI263, m_kNumChannels, "SSI263");
|
HRESULT hr = DSGetSoundBuffer(&SSI263SingleVoice, DSBCAPS_CTRLVOLUME, m_kDSBufferByteSize, SAMPLE_RATE_SSI263, m_kNumChannels, "SSI263");
|
||||||
LogFileOutput("SSI263::DSInit: DSGetSoundBuffer(), hr=0x%08X\n", hr);
|
LogFileOutput("SSI263::DSInit: DSGetSoundBuffer(), hr=0x%08X\n", hr);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
|
|
|
@ -95,8 +95,8 @@ private:
|
||||||
static const BYTE m_Votrax2SSI263[/*64*/];
|
static const BYTE m_Votrax2SSI263[/*64*/];
|
||||||
|
|
||||||
static const unsigned short m_kNumChannels = 1;
|
static const unsigned short m_kNumChannels = 1;
|
||||||
static const DWORD m_kDSBufferSize = MAX_SAMPLES * sizeof(short) * m_kNumChannels;
|
static const DWORD m_kDSBufferByteSize = MAX_SAMPLES * sizeof(short) * m_kNumChannels;
|
||||||
short m_mixBufferSSI263[m_kDSBufferSize / sizeof(short)];
|
short m_mixBufferSSI263[m_kDSBufferByteSize / sizeof(short)];
|
||||||
VOICE SSI263SingleVoice;
|
VOICE SSI263SingleVoice;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
Loading…
Add table
Reference in a new issue