Changed RSR_WAV and RSR_Resample_Good back to using alloca because only gcc/C99 like dynamic arrays. RSR_SpeedChange now uses new/delete in spite of the performance.
This commit is contained in:
@@ -667,7 +667,7 @@ int RageSoundReader_Resample_Good::Read( float *pBuf, int iFrames )
|
|||||||
|
|
||||||
{
|
{
|
||||||
int iFramesNeeded = m_apResamplers[0]->NumInputsForOutputSamples(iFrames);
|
int iFramesNeeded = m_apResamplers[0]->NumInputsForOutputSamples(iFrames);
|
||||||
float pTmpBuf[iFramesNeeded * iChannels];
|
float *pTmpBuf = (float *) alloca( iFramesNeeded * sizeof(float) * iChannels );
|
||||||
int iFramesIn = m_pSource->Read( pTmpBuf, iFramesNeeded );
|
int iFramesIn = m_pSource->Read( pTmpBuf, iFramesNeeded );
|
||||||
if( iFramesIn < 0 )
|
if( iFramesIn < 0 )
|
||||||
return iFramesIn;
|
return iFramesIn;
|
||||||
|
|||||||
@@ -89,10 +89,11 @@ int RageSoundReader_SpeedChange::FillData( int iMaxFrames )
|
|||||||
if( iBytesToRead <= 0 )
|
if( iBytesToRead <= 0 )
|
||||||
return m_iDataBufferAvailFrames;
|
return m_iDataBufferAvailFrames;
|
||||||
|
|
||||||
float pTempBuffer[iBytesToRead/sizeof(float)];
|
float* pTempBuffer= new float[iBytesToRead/sizeof(float)];
|
||||||
int iGotFrames = m_pSource->Read( pTempBuffer, iFramesToRead );
|
int iGotFrames = m_pSource->Read( pTempBuffer, iFramesToRead );
|
||||||
if( iGotFrames < 0 )
|
if( iGotFrames < 0 )
|
||||||
{
|
{
|
||||||
|
delete[] pTempBuffer;
|
||||||
if( iGotFrames == END_OF_FILE && m_iDataBufferAvailFrames )
|
if( iGotFrames == END_OF_FILE && m_iDataBufferAvailFrames )
|
||||||
return m_iDataBufferAvailFrames;
|
return m_iDataBufferAvailFrames;
|
||||||
return iGotFrames;
|
return iGotFrames;
|
||||||
@@ -114,6 +115,7 @@ int RageSoundReader_SpeedChange::FillData( int iMaxFrames )
|
|||||||
++pOut;
|
++pOut;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
delete[] pTempBuffer;
|
||||||
|
|
||||||
m_iDataBufferAvailFrames += iGotFrames;
|
m_iDataBufferAvailFrames += iGotFrames;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,8 +288,7 @@ public:
|
|||||||
/* We've read the block header; read the rest. Don't read past the end of the data chunk. */
|
/* We've read the block header; read the rest. Don't read past the end of the data chunk. */
|
||||||
int iMaxSize = min( (int) m_WavData.m_iBlockAlign - 7 * m_WavData.m_iChannels, (m_WavData.m_iDataChunkSize+m_WavData.m_iDataChunkPos) - m_File.Tell() );
|
int iMaxSize = min( (int) m_WavData.m_iBlockAlign - 7 * m_WavData.m_iChannels, (m_WavData.m_iDataChunkSize+m_WavData.m_iDataChunkPos) - m_File.Tell() );
|
||||||
|
|
||||||
char cBuf[iMaxSize];
|
char *pBuf = (char *) alloca( iMaxSize );
|
||||||
char* pBuf= cBuf;
|
|
||||||
|
|
||||||
int iBlockSize = m_File.Read( pBuf, iMaxSize );
|
int iBlockSize = m_File.Read( pBuf, iMaxSize );
|
||||||
if( iBlockSize == 0 )
|
if( iBlockSize == 0 )
|
||||||
|
|||||||
Reference in New Issue
Block a user