Remove some duplicated code in AudioIO

This commit is contained in:
James Crook 2018-10-14 22:45:41 +01:00
parent 651957f8c2
commit d2578b9eaa
2 changed files with 18 additions and 72 deletions

View File

@ -4840,21 +4840,6 @@ bool AudioIoCallback::FillOutputBuffers(
if( outputBuffer && (numPlaybackChannels > 0) )
{
float *outputFloats = (float *)outputBuffer;
for( unsigned i = 0; i < framesPerBuffer*numPlaybackChannels; i++)
outputFloats[i] = 0.0;
if (inputBuffer && mSoftwarePlaythrough) {
DoSoftwarePlaythrough(inputBuffer, mCaptureFormat,
numCaptureChannels,
(float *)outputBuffer, (int)framesPerBuffer);
}
// Copy the results to outputMeterFloats if necessary
if (outputMeterFloats != outputFloats) {
for (unsigned i = 0; i < framesPerBuffer*numPlaybackChannels; ++i) {
outputMeterFloats[i] = outputFloats[i];
}
}
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
// While scrubbing, ignore seek requests
@ -5217,9 +5202,8 @@ bool AudioIoCallback::FillInputBuffers(
// return true, IFF we have fully handled the callback.
// No tracks to play, but we should clear the output, and
// possibly do software playthrough...
bool AudioIoCallback::OnlyDoPlaythrough(
// Prime the output buffer with 0's, optionally adding in the playthrough.
bool AudioIoCallback::DoPlaythrough(
const void *inputBuffer,
void *outputBuffer,
unsigned long framesPerBuffer,
@ -5395,41 +5379,6 @@ bool AudioIoCallback::AllTracksAlreadySilent()
return dropAllQuickly;
}
// return true, IFF we have fully handled the callback.
//
// This is a quick route, when paused and already at zero level on all channels.
// However, we always fade-out into a pause, hence the 'AllTracksAlreadySilent' test
// Net result is we may pause one frame later than requested, if we can't drop
// all channels quickly (because some are not yet down to zero gain).
// Note that if we are paused, the gain will be dropped to zero by the end of
// this callback, and so the next time round 'AllTracksAlreadySilent' will be true.
// All this logic will be easier when we shift over to working with gains that
// go to zero, and not flags.
bool AudioIoCallback::QuickSilentPlayback(const void *inputBuffer, void *outputBuffer,
unsigned long framesPerBuffer)
{
const auto numPlaybackTracks = mPlaybackTracks.size();
const auto numPlaybackChannels = mNumPlaybackChannels;
const auto numCaptureChannels = mNumCaptureChannels;
if( mPaused && AllTracksAlreadySilent() )
{
if (outputBuffer && numPlaybackChannels > 0)
{
ClearSamples((samplePtr)outputBuffer, floatSample,
0, framesPerBuffer * numPlaybackChannels);
if (inputBuffer && mSoftwarePlaythrough) {
DoSoftwarePlaythrough(inputBuffer, mCaptureFormat,
numCaptureChannels,
(float *)outputBuffer, (int)framesPerBuffer);
}
}
return true;
}
return false;
}
AudioIoCallback::AudioIoCallback()
{
}
@ -5494,13 +5443,24 @@ int AudioIoCallback::AudioCallback(const void *inputBuffer, void *outputBuffer,
// Functions called here can determine if the callback is done.
// If we are done, then exit early with the mCallbackReturn.
// Test for no audio to play (because we are paused and have faded out)
if( QuickSilentPlayback(inputBuffer,outputBuffer,framesPerBuffer))
// Even when paused, we do playthrough.
// Initialise output buffer to zero or to playthrough data.
// Initialise output meter values.
if( DoPlaythrough(
inputBuffer,
outputBuffer,
framesPerBuffer,
outputMeterFloats))
return mCallbackReturn;
// Test for no track audio to play (because we are paused and have faded out)
if( mPaused && AllTracksAlreadySilent() )
return mCallbackReturn;
if (mStreamToken > 0)
{
// To play sound on speaker
// To add track output to output (to play sound on speaker)
// possible exit, if we were seeking.
if( FillOutputBuffers(
inputBuffer,
@ -5509,7 +5469,7 @@ int AudioIoCallback::AudioCallback(const void *inputBuffer, void *outputBuffer,
tempFloats,
outputMeterFloats))
return mCallbackReturn;
// To capture sound from microphone
// To capture input into track (sound from microphone)
if( FillInputBuffers(
inputBuffer,
framesPerBuffer,
@ -5517,16 +5477,6 @@ int AudioIoCallback::AudioCallback(const void *inputBuffer, void *outputBuffer,
tempFloats))
return mCallbackReturn;
}
else
{
if( OnlyDoPlaythrough(
inputBuffer,
outputBuffer,
framesPerBuffer,
outputMeterFloats))
return mCallbackReturn;
}
SendVuOutputMeterData( outputMeterFloats, framesPerBuffer);

View File

@ -334,10 +334,6 @@ public:
const PaStreamCallbackTimeInfo *timeInfo,
unsigned long framesPerBuffer);
void CheckSoundActivatedRecordingLevel();
bool QuickSilentPlayback(
const void *inputBuffer,
void *outputBuffer,
unsigned long framesPerBuffer);
bool FillOutputBuffers(
const void *inputBuffer,
void *outputBuffer,
@ -350,7 +346,7 @@ public:
const PaStreamCallbackFlags statusFlags,
float * tempFloats
);
bool OnlyDoPlaythrough(
bool DoPlaythrough(
const void *inputBuffer,
void *outputBuffer,
unsigned long framesPerBuffer,