|
|
|
@@ -406,8 +406,8 @@ public: |
|
|
|
|
|
|
|
#if JUCE_AUDIOWORKGROUP_TYPES_AVAILABLE
|
|
|
|
case kAudioUnitProperty_RenderContextObserver:
|
|
|
|
outWritable = false;
|
|
|
|
outDataSize = sizeof (AURenderContextObserver);
|
|
|
|
outWritable = false;
|
|
|
|
return noErr;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
@@ -584,14 +584,15 @@ public: |
|
|
|
#if JUCE_AUDIOWORKGROUP_TYPES_AVAILABLE
|
|
|
|
case kAudioUnitProperty_RenderContextObserver:
|
|
|
|
{
|
|
|
|
if (auto* ptr = (AURenderContextObserver*) outData)
|
|
|
|
AURenderContextObserver callback = ^(const AudioUnitRenderContext* context)
|
|
|
|
{
|
|
|
|
*ptr = contextObserver;
|
|
|
|
return noErr;
|
|
|
|
}
|
|
|
|
jassert (juceFilter != nullptr);
|
|
|
|
const auto workgroup = makeRealAudioWorkgroup (context != nullptr ? context->workgroup : nullptr);
|
|
|
|
juceFilter->audioWorkgroupContextChanged (workgroup);
|
|
|
|
};
|
|
|
|
|
|
|
|
jassertfalse;
|
|
|
|
break;
|
|
|
|
*(AURenderContextObserver*) outData = [callback copy];
|
|
|
|
return noErr;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
@@ -2027,17 +2028,6 @@ private: |
|
|
|
HeapBlock<bool> pulledSucceeded;
|
|
|
|
HeapBlock<MIDIPacketList> packetList { packetListBytes, 1 };
|
|
|
|
|
|
|
|
#if JUCE_AUDIOWORKGROUP_TYPES_AVAILABLE
|
|
|
|
ObjCBlock<AURenderContextObserver> contextObserver { ^(const AudioUnitRenderContext* context)
|
|
|
|
{
|
|
|
|
if (juceFilter == nullptr)
|
|
|
|
return;
|
|
|
|
|
|
|
|
auto workgroup = makeRealAudioWorkgroup (context != nullptr ? context->workgroup : nullptr);
|
|
|
|
juceFilter->audioWorkgroupContextChanged (std::move (workgroup));
|
|
|
|
} };
|
|
|
|
#endif
|
|
|
|
|
|
|
|
ThreadLocalValue<bool> inParameterChangedCallback;
|
|
|
|
|
|
|
|
AudioProcessorChangedUpdater audioProcessorChangedUpdater { *this };
|
|
|
|
|