From fa5a6102f48921fded79f8db8b6ca807ee2d9e25 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 9 Dec 2006 22:43:44 +0000 Subject: [PATCH] add stride --- stepmania/src/RageSoundMixBuffer.cpp | 16 ++++++++++------ stepmania/src/RageSoundMixBuffer.h | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/stepmania/src/RageSoundMixBuffer.cpp b/stepmania/src/RageSoundMixBuffer.cpp index 0763a9fb9d..9d60eaedbf 100644 --- a/stepmania/src/RageSoundMixBuffer.cpp +++ b/stepmania/src/RageSoundMixBuffer.cpp @@ -53,23 +53,27 @@ void RageSoundMixBuffer::Extend( unsigned iSamples ) } } -void RageSoundMixBuffer::write( const int16_t *pBuf, unsigned iSize ) +void RageSoundMixBuffer::write( const int16_t *pBuf, unsigned iSize, int iSourceStride, int iDestStride ) { - Extend( iSize ); + /* iSize = 3, iDestStride = 2 uses 4 frames. Don't allocate the stride of the + * last sample. */ + Extend( iSize * iDestStride - (iDestStride-1) ); /* Scale volume and add. */ int32_t *pDestBuf = m_pMixbuf+m_iOffset; #ifdef USE_VEC - if( g_bVector ) + if( g_bVector && iSourceStride == 1 && iDestStride == 1 ) { Vector::FastSoundWrite( pDestBuf, pBuf, iSize, m_iVolumeFactor ); return; } #endif - for( unsigned pos = 0; pos < iSize; ++pos ) + while( iSize ) { - *pDestBuf += pBuf[pos] * m_iVolumeFactor; - ++pDestBuf; + *pDestBuf += *pBuf * m_iVolumeFactor; + pBuf += iSourceStride; + pDestBuf += iDestStride; + --iSize; } } diff --git a/stepmania/src/RageSoundMixBuffer.h b/stepmania/src/RageSoundMixBuffer.h index 450ea89e34..95f77b2144 100644 --- a/stepmania/src/RageSoundMixBuffer.h +++ b/stepmania/src/RageSoundMixBuffer.h @@ -10,7 +10,7 @@ public: ~RageSoundMixBuffer(); /* Mix the given buffer of samples. */ - void write( const int16_t *buf, unsigned size ); + void write( const int16_t *buf, unsigned size, int iSourceStride = 1, int iDestStride = 1 ); /* Extend the buffer as if write() was called with a buffer of silence. */ void Extend( unsigned iSamples );