summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Tomlinson <themarcustomlinson@gmail.com>2019-09-27 14:56:01 +0100
committerMarcus Tomlinson <themarcustomlinson@gmail.com>2019-09-27 14:56:01 +0100
commit6fd444c67c16842c71a7fa27b735e4b5310d1cef (patch)
tree20c6ee4265f3901b317347c894b62ec95a414be3
parent1cba5c90a35b0e79915dc46dd5525da2285a211b (diff)
Add maxOutSampleCount to WasapiResampler::Convert()
-rw-r--r--RtAudio.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/RtAudio.cpp b/RtAudio.cpp
index dce61fe..06bc8d8 100644
--- a/RtAudio.cpp
+++ b/RtAudio.cpp
@@ -4073,7 +4073,7 @@ public:
#endif
}
- void Convert( char* outBuffer, const char* inBuffer, unsigned int inSampleCount, unsigned int& outSampleCount )
+ void Convert( char* outBuffer, const char* inBuffer, unsigned int inSampleCount, unsigned int& outSampleCount, int maxOutSampleCount = -1 )
{
unsigned int inputBufferSize = _bytesPerSample * _channelCount * inSampleCount;
if ( _sampleRatio == 1 )
@@ -4086,6 +4086,15 @@ public:
unsigned int outputBufferSize = ( unsigned int ) ceilf( inputBufferSize * _sampleRatio ) + ( _bytesPerSample * _channelCount );
+ if ( maxOutSampleCount != -1 )
+ {
+ unsigned int maxOutputBufferSize = _bytesPerSample * _channelCount * maxOutSampleCount;
+ if ( outputBufferSize > maxOutputBufferSize )
+ {
+ outputBufferSize = maxOutputBufferSize;
+ }
+ }
+
IMFMediaBuffer* rInBuffer;
IMFSample* rInSample;
BYTE* rInByteBuffer = NULL;
@@ -5223,7 +5232,8 @@ void RtApiWasapi::wasapiThread()
captureResampler->Convert( stream_.deviceBuffer + deviceBufferOffset,
convBuffer,
samplesToPull,
- convSamples );
+ convSamples,
+ stream_.bufferSize - convBufferSize );
convBufferSize += convSamples;
samplesToPull = 1; // now pull one sample at a time until we have stream_.bufferSize samples