Cider Isn't Darwin Emulation, Really
Something went wrong. Try again.
2.6 kB · 104 lines
C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105#include "AudioOutputUnitComponent.h"#include <CoreServices/MacErrors.h>#include <cstring>
AudioOutputUnitComponent::AudioOutputUnitComponent(): AudioUnitComponent({ CFSTR("Sound card output"), CFSTR("Sound card input") }){ memset(&m_outputCallback, 0, sizeof(m_outputCallback));}
OSStatus AudioOutputUnitComponent::setProperty(AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement elem, const void* data, UInt32 dataSize){ switch (prop) { case kAudioOutputUnitProperty_EnableIO: { const UInt32* state;
if (dataSize != sizeof(UInt32)) return kAudioUnitErr_InvalidParameter;
state = static_cast<const UInt32*>(data); if (scope == kAudioUnitScope_Output) { if (elem != 0) return kAudioUnitErr_InvalidElement; m_enableOutput = *state != 0; } else if (scope == kAudioUnitScope_Input) { if (elem != 1) return kAudioUnitErr_InvalidElement; m_enableInput = *state != 0; } else return kAudioUnitErr_InvalidScope;
return noErr; } case kAudioOutputUnitProperty_SetInputCallback: { if (dataSize != sizeof(AURenderCallbackStruct)) return kAudioUnitErr_InvalidParameter; //if (scope == kAudioUnitScope_Output) //{ if (elem != 1) return kAudioUnitErr_InvalidElement; memcpy(&m_outputCallback, data, sizeof(AURenderCallbackStruct)); return noErr; //} } default: return AudioUnitComponent::setProperty(prop, scope, elem, data, dataSize); }}
OSStatus AudioOutputUnitComponent::getProperty(AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement elem, void* data, UInt32* dataSize){ switch (prop) { case kAudioOutputUnitProperty_EnableIO: { UInt32* state;
if (*dataSize < sizeof(UInt32)) return kAudioUnitErr_InvalidParameter;
state = static_cast<UInt32*>(data);
if (scope == kAudioUnitScope_Output) { if (elem != 0) return kAudioUnitErr_InvalidElement; *state = m_enableOutput; } else if (scope == kAudioUnitScope_Input) { if (elem != 1) return kAudioUnitErr_InvalidElement; *state = m_enableInput; } else return kAudioUnitErr_InvalidScope;
*dataSize = sizeof(UInt32); return noErr; } default: return AudioUnitComponent::getProperty(prop, scope, elem, data, dataSize); }}
OSStatus AudioOutputUnitComponent::getPropertyInfo(AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement elem, UInt32* dataSize, Boolean* writable){ switch (prop) { default: return AudioUnitComponent::getPropertyInfo(prop, scope, elem, dataSize, writable); }}