From 14e3160d502a2afa60728da730f5a8ef1d38d43c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 11 Mar 2013 17:46:57 -0700 Subject: [PATCH] only keep the threshold number of frames on mixer as well --- mixer/src/main.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mixer/src/main.cpp b/mixer/src/main.cpp index 155f63f9e0..5735b6e03d 100644 --- a/mixer/src/main.cpp +++ b/mixer/src/main.cpp @@ -81,6 +81,22 @@ void *sendBuffer(void *args) printf("Buffer %d starved.\n", i); agentBuffer->setStarted(false); } else { + + // check if we have more than we need to play out + int thresholdFrames = ceilf((BUFFER_LENGTH_SAMPLES_PER_CHANNEL + JITTER_BUFFER_SAMPLES) / (float)BUFFER_LENGTH_SAMPLES_PER_CHANNEL); + int thresholdSamples = thresholdFrames * BUFFER_LENGTH_SAMPLES_PER_CHANNEL; + + if (agentBuffer->diffLastWriteNextOutput() > thresholdSamples) { + // we need to push the next output forwards + int samplesToPush = agentBuffer->diffLastWriteNextOutput() - thresholdSamples; + + if (agentBuffer->getNextOutput() + samplesToPush > agentBuffer->getBuffer()) { + agentBuffer->setNextOutput(agentBuffer->getBuffer() + (samplesToPush - (agentBuffer->getBuffer() + RING_BUFFER_SAMPLES - agentBuffer->getNextOutput()))); + } else { + agentBuffer->setNextOutput(agentBuffer->getNextOutput() + samplesToPush); + } + } + // good buffer, add this to the mix agentBuffer->setStarted(true); agentBuffer->setAddedToMix(true);