IOAudioEngineMixer.cpp [plain text]
#include "IOAudioDebug.h"
#include "IOAudioEngine.h"
#include "IOAudioStream.h"
#include "IOAudioTypes.h"
#include <vecLib/vecLib.h> // <rdar://14058728>
IOReturn IOAudioEngine::mixOutputSamples(const void *sourceBuf, void *mixBuf, UInt32 firstSampleFrame, UInt32 numSampleFrames, const IOAudioStreamFormat *streamFormat, IOAudioStream *audioStream)
{
IOReturn result = kIOReturnBadArgument;
if (sourceBuf && mixBuf)
{
const float * floatSource1Buf;
const float * floatSource2Buf;
float * floatMixBuf;
UInt32 numSamplesLeft = numSampleFrames * streamFormat->fNumChannels;
__darwin_size_t numSamps = numSamplesLeft;
floatMixBuf = &(((float *)mixBuf)[firstSampleFrame * streamFormat->fNumChannels]);
floatSource2Buf = floatMixBuf;
floatSource1Buf = (const float *)sourceBuf;
__darwin_ptrdiff_t strideOne=1, strideTwo=1, resultStride=1;
vDSP_vadd(floatSource1Buf, strideOne, floatSource2Buf, strideTwo, floatMixBuf, resultStride, numSamps);
result = kIOReturnSuccess;
}
return result;
}