IOAudioEngineMixer.cpp [plain text]
#include "IOAudioDebug.h"
#include "IOAudioEngine.h"
#include "IOAudioStream.h"
#include "IOAudioTypes.h"
extern "C" void vDSP_vadd( const float input1[], __darwin_ptrdiff_t stride1, const float input2[], __darwin_ptrdiff_t stride2, float res[], __darwin_ptrdiff_t strideres, __darwin_size_t size);
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;
}