Add maxOutSampleCount to WasapiResampler::Convert()
authorMarcus Tomlinson <themarcustomlinson@gmail.com>
Fri, 27 Sep 2019 13:56:01 +0000 (14:56 +0100)
committerMarcus Tomlinson <themarcustomlinson@gmail.com>
Fri, 27 Sep 2019 13:56:01 +0000 (14:56 +0100)
RtAudio.cpp

index dce61fe9af0598a2d3c586ceb6c7fa847e0fbeaf..06bc8d8db2daa77c6a8bb753929bc6b32f9bc726 100644 (file)
@@ -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