Browse Source

Merge pull request #218 from thestk/fix-wasapi-resampler-crash

Add maxOutSampleCount to WasapiResampler::Convert()
master
garyscavone GitHub 6 years ago
parent
commit
57c2c9d759
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 8 deletions
  1. +12
    -8
      RtAudio.cpp

+ 12
- 8
RtAudio.cpp View 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 )
@@ -4084,7 +4084,15 @@ public:
return;
}

unsigned int outputBufferSize = ( unsigned int ) ceilf( inputBufferSize * _sampleRatio ) + ( _bytesPerSample * _channelCount );
unsigned int outputBufferSize = 0;
if ( maxOutSampleCount != -1 )
{
outputBufferSize = _bytesPerSample * _channelCount * maxOutSampleCount;
}
else
{
outputBufferSize = ( unsigned int ) ceilf( inputBufferSize * _sampleRatio ) + ( _bytesPerSample * _channelCount );
}

IMFMediaBuffer* rInBuffer;
IMFSample* rInSample;
@@ -5197,11 +5205,6 @@ void RtApiWasapi::wasapiThread()
if ( captureAudioClient )
{
int samplesToPull = ( unsigned int ) floorf( stream_.bufferSize * captureSrRatio );
if ( captureSrRatio != 1 )
{
// account for remainders
samplesToPull--;
}

convBufferSize = 0;
while ( convBufferSize < stream_.bufferSize )
@@ -5223,7 +5226,8 @@ void RtApiWasapi::wasapiThread()
captureResampler->Convert( stream_.deviceBuffer + deviceBufferOffset,
convBuffer,
samplesToPull,
convSamples );
convSamples,
convBufferSize == 0 ? -1 : stream_.bufferSize - convBufferSize );

convBufferSize += convSamples;
samplesToPull = 1; // now pull one sample at a time until we have stream_.bufferSize samples


Loading…
Cancel
Save