this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

AudioToolbox: AudioUnit dispatching

+96 -31
+96 -31
src/CoreAudio/AudioToolbox/AUComponent.cpp
··· 19 19 20 20 21 21 #include <AudioToolbox/AUComponent.h> 22 + #include <AudioToolbox/AudioOutputUnit.h> 22 23 #include <CoreServices/MacErrors.h> 24 + #include <CoreServices/Components.h> 25 + #include "AudioComponentManager.h" 23 26 24 27 const CFStringRef kAudioComponentRegistrationsChangedNotification = CFSTR("AudioComponentRegistrationsChangedNotification"); 25 28 const CFStringRef kAudioComponentInstanceInvalidationNotification = CFSTR("AudioComponentInstanceInvalidationNotification"); 26 29 27 - OSStatus AudioUnitInitialize(AudioUnit inUnit) 30 + inline static void assignParams(ComponentParameters* cp, size_t totalArgs, size_t argumentIndex) 28 31 { 32 + } 29 33 34 + template <typename First, typename... Rest> 35 + void assignParams(ComponentParameters* cp, size_t totalArgs, size_t argumentIndex, First arg, Rest... rest) 36 + { 37 + #if __LP64__ 38 + cp->params[argumentIndex] = long(arg); 39 + #else 40 + cp->params[totalArgs - argumentIndex - 1] = long(arg); 41 + #endif 42 + assignParams(cp, totalArgs, argumentIndex+1, rest...); 30 43 } 31 44 32 - OSStatus AudioUnitUninitialize(AudioUnit inUnit) 45 + template <typename ...Args> 46 + OSStatus dispatchCall(AudioUnit inUnit, SInt16 sel, Args... args) 33 47 { 48 + if (AudioComponentManager::isOurInstance(inUnit)) 49 + { 50 + AudioComponentPlugInInterface* iface = AudioComponentManager::instance()->instanceInterface(inUnit); 51 + AudioComponentMethod method = iface->Lookup(sel); 52 + if (method != nullptr) 53 + return method(iface, args...); 54 + else 55 + return badComponentSelector; 56 + } 57 + else 58 + { 59 + ComponentParameters* cp = (ComponentParameters*) alloca(sizeof(ComponentParameters) + sizeof...(Args) * sizeof(long)); 60 + assignParams(cp, sizeof...(Args)+1, 0, inUnit); 61 + assignParams(cp, sizeof...(Args)+1, 1, args...); 62 + cp->paramSize = (sizeof...(Args)+1) * sizeof(long); 63 + cp->what = sel; 64 + cp->flags = 0; 65 + return CallComponentDispatch(cp); 66 + } 67 + } 34 68 69 + OSStatus AudioOutputUnitStart(AudioUnit ci) 70 + { 71 + return dispatchCall(ci, kAudioOutputUnitStartSelect); 72 + } 73 + 74 + OSStatus AudioOutputUnitStop(AudioUnit ci) 75 + { 76 + return dispatchCall(ci, kAudioOutputUnitStopSelect); 77 + } 78 + 79 + OSStatus AudioUnitInitialize(AudioUnit inUnit) 80 + { 81 + return dispatchCall(inUnit, kAudioUnitInitializeSelect); 82 + } 83 + 84 + OSStatus AudioUnitUninitialize(AudioUnit inUnit) 85 + { 86 + return dispatchCall(inUnit, kAudioUnitUninitializeSelect); 35 87 } 36 88 37 89 OSStatus 38 90 AudioUnitGetPropertyInfo(AudioUnit inUnit, 39 - AudioUnitPropertyID inID, 40 - AudioUnitScope inScope, 41 - AudioUnitElement inElement, 42 - UInt32 * _Nullable outDataSize, 43 - Boolean * _Nullable outWritable) 91 + AudioUnitPropertyID inID, 92 + AudioUnitScope inScope, 93 + AudioUnitElement inElement, 94 + UInt32 * _Nullable outDataSize, 95 + Boolean * _Nullable outWritable) 44 96 { 97 + return dispatchCall(inUnit, kAudioUnitGetPropertyInfoSelect, inID, inScope, inElement, outDataSize, outWritable); 45 98 } 46 99 47 100 OSStatus 48 101 AudioUnitGetProperty(AudioUnit inUnit, 49 - AudioUnitPropertyID inID, 50 - AudioUnitScope inScope, 51 - AudioUnitElement inElement, 52 - void * outData, 53 - UInt32 * ioDataSize) 102 + AudioUnitPropertyID inID, 103 + AudioUnitScope inScope, 104 + AudioUnitElement inElement, 105 + void * outData, 106 + UInt32 * ioDataSize) 54 107 { 108 + return dispatchCall(inUnit, kAudioUnitGetPropertySelect, inID, inScope, inElement, outData, ioDataSize); 55 109 } 56 110 57 111 OSStatus 58 112 AudioUnitSetProperty(AudioUnit inUnit, 59 - AudioUnitPropertyID inID, 60 - AudioUnitScope inScope, 61 - AudioUnitElement inElement, 62 - const void * _Nullable inData, 63 - UInt32 inDataSize) 113 + AudioUnitPropertyID inID, 114 + AudioUnitScope inScope, 115 + AudioUnitElement inElement, 116 + const void * _Nullable inData, 117 + UInt32 inDataSize) 64 118 { 119 + return dispatchCall(inUnit, kAudioUnitSetPropertySelect, inID, inScope, inElement, inData, inDataSize); 65 120 } 66 121 67 122 OSStatus 68 123 AudioUnitAddPropertyListener(AudioUnit inUnit, 69 - AudioUnitPropertyID inID, 70 - AudioUnitPropertyListenerProc inProc, 71 - void * _Nullable inProcUserData) 124 + AudioUnitPropertyID inID, 125 + AudioUnitPropertyListenerProc inProc, 126 + void * _Nullable inProcUserData) 72 127 { 128 + return dispatchCall(inUnit, kAudioUnitAddPropertyListenerSelect, inID, inProc, inProcUserData); 73 129 } 74 130 75 131 OSStatus 76 132 AudioUnitRemovePropertyListenerWithUserData( 77 - AudioUnit inUnit, 78 - AudioUnitPropertyID inID, 79 - AudioUnitPropertyListenerProc inProc, 80 - void * _Nullable inProcUserData) 133 + AudioUnit inUnit, 134 + AudioUnitPropertyID inID, 135 + AudioUnitPropertyListenerProc inProc, 136 + void * _Nullable inProcUserData) 81 137 { 138 + return dispatchCall(inUnit, kAudioUnitRemovePropertyListenerWithUserDataSelect, inID, inProc, inProcUserData); 82 139 } 83 140 84 141 OSStatus ··· 86 143 AURenderCallback inProc, 87 144 void * _Nullable inProcUserData) 88 145 { 89 - 146 + return dispatchCall(inUnit, kAudioUnitAddRenderNotifySelect, inProc, inProcUserData); 90 147 } 91 148 92 149 OSStatus ··· 94 151 AURenderCallback inProc, 95 152 void * _Nullable inProcUserData) 96 153 { 97 - 154 + return dispatchCall(inUnit, kAudioUnitRemoveRenderNotifySelect, inProc, inProcUserData); 98 155 } 99 156 100 157 OSStatus ··· 104 161 AudioUnitElement inElement, 105 162 AudioUnitParameterValue * outValue) 106 163 { 107 - 164 + return dispatchCall(inUnit, kAudioUnitGetParameterSelect, inID, inScope, inElement, outValue); 108 165 } 109 166 110 167 OSStatus ··· 115 172 AudioUnitParameterValue inValue, 116 173 UInt32 inBufferOffsetInFrames) 117 174 { 175 + return dispatchCall(inUnit, kAudioUnitSetParameterSelect, inID, inScope, inElement, inValue, inBufferOffsetInFrames); 118 176 } 119 177 120 178 OSStatus ··· 122 180 const AudioUnitParameterEvent * inParameterEvent, 123 181 UInt32 inNumParamEvents) 124 182 { 125 - 183 + return dispatchCall(inUnit, kAudioUnitScheduleParametersSelect, inParameterEvent, inNumParamEvents); 126 184 } 127 185 128 186 OSStatus ··· 133 191 UInt32 inNumberFrames, 134 192 AudioBufferList * ioData) 135 193 { 194 + return dispatchCall(inUnit, kAudioUnitRenderSelect, ioActionFlags, inTimeStamp, inOutputBusNumber, inNumberFrames, ioData); 136 195 } 137 196 138 197 OSStatus ··· 142 201 UInt32 inNumberFrames, 143 202 AudioBufferList * ioData) 144 203 { 204 + // TODO 205 + return unimpErr; 145 206 } 146 207 147 208 OSStatus ··· 154 215 UInt32 inNumberOutputBufferLists, 155 216 AudioBufferList * _Nonnull * _Nonnull ioOutputBufferLists) 156 217 { 218 + // TODO 219 + return unimpErr; 157 220 } 158 221 159 222 OSStatus ··· 161 224 AudioUnitScope inScope, 162 225 AudioUnitElement inElement) 163 226 { 164 - 227 + return dispatchCall(inUnit, kAudioUnitResetSelect, inScope, inElement); 165 228 } 166 229 167 230 OSStatus 168 231 AudioUnitExtensionSetComponentList(CFStringRef extensionIdentifier, _Nullable CFArrayRef audioComponentInfo) 169 232 { 170 - 233 + // TODO 234 + return unimpErr; 171 235 } 172 236 173 237 _Nullable CFArrayRef 174 238 AudioUnitExtensionCopyComponentList(CFStringRef extensionIdentifier) 175 239 { 176 - 240 + // TODO 241 + return nullptr; 177 242 } 178 243