recast avoid overwriting buffer logic

This commit is contained in:
Zach Pomerantz 2017-05-05 18:16:37 -04:00
parent ed3fc004a6
commit 7db404eba0

View file

@ -1108,17 +1108,16 @@ void AudioClient::prepareLocalAudioInjectors() {
} }
int bufferCapacity = _localInjectorsStream.getSampleCapacity(); int bufferCapacity = _localInjectorsStream.getSampleCapacity();
int maxOutputSamples = AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL * AudioConstants::STEREO;
if (_localToOutputResampler) { if (_localToOutputResampler) {
// avoid overwriting the buffer, maxOutputSamples =
// instead of failing on writes because the buffer is used as a lock-free pipe
bufferCapacity -=
_localToOutputResampler->getMaxOutput(AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL) * _localToOutputResampler->getMaxOutput(AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL) *
AudioConstants::STEREO; AudioConstants::STEREO;
bufferCapacity += 1;
} }
samplesNeeded = bufferCapacity - _localSamplesAvailable.load(std::memory_order_relaxed); samplesNeeded = bufferCapacity - _localSamplesAvailable.load(std::memory_order_relaxed);
if (samplesNeeded <= 0) { if (samplesNeeded < maxOutputSamples) {
// avoid overwriting the buffer to prevent losing frames
break; break;
} }