Browse Source

Fix UI direct access for AU builds, use 4char DPF codes

Signed-off-by: falkTX <falktx@falktx.com>
pull/452/head
falkTX 1 year ago
parent
commit
4bbef7482f
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
4 changed files with 36 additions and 16 deletions
  1. +4
    -4
      Makefile.plugins.mk
  2. +1
    -1
      distrho/DistrhoUIMain.cpp
  3. +20
    -5
      distrho/src/DistrhoPluginAU.cpp
  4. +11
    -6
      distrho/src/DistrhoUIAU.mm

+ 4
- 4
Makefile.plugins.mk View File

@@ -698,11 +698,11 @@ endif
# ---------------------------------------------------------------------------------------------------------------------
# Export

# ifeq ($(HAVE_DGL),true)
# $(BUILD_DIR)/export$(APP_EXT): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_EXPORT.cpp.o $(BUILD_DIR)/DistrhoUIMain_EXPORT.cpp.o $(DGL_LIB)
# else
ifeq ($(HAVE_DGL),true)
$(BUILD_DIR)/export$(APP_EXT): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_EXPORT.cpp.o $(BUILD_DIR)/DistrhoUIMain_EXPORT.cpp.o $(DGL_LIB)
else
$(BUILD_DIR)/export$(APP_EXT): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_EXPORT.cpp.o
# endif
endif
-@mkdir -p $(shell dirname $@)
@echo "Creating export tool for $(NAME)"
$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(EXTRA_DSP_LIBS) $(EXTRA_UI_LIBS) $(DGL_LIBS) -o $@


+ 1
- 1
distrho/DistrhoUIMain.cpp View File

@@ -44,7 +44,7 @@
# define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 1
# include "src/DistrhoUIVST3.cpp"
#elif defined(DISTRHO_PLUGIN_TARGET_EXPORT)
# define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 0
# define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 1
#elif defined(DISTRHO_PLUGIN_TARGET_SHARED) || defined(DISTRHO_PLUGIN_TARGET_STATIC)
# define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 1
#else


+ 20
- 5
distrho/src/DistrhoPluginAU.cpp View File

@@ -393,14 +393,23 @@ public:
return kAudioUnitErr_InvalidProperty;
#endif

case 19001:
#if DISTRHO_PLUGIN_HAS_UI && DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
case 'DPFa':
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement == 0, inElement, kAudioUnitErr_InvalidElement);
outDataSize = sizeof(void*);
outWritable = false;
return noErr;
#endif

case 'DPFp':
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement < fParameterCount, inElement, kAudioUnitErr_InvalidElement);
outDataSize = sizeof(float);
outWritable = true;
return noErr;

case 19002:
case 'DPFt':
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement < fParameterCount, inElement, kAudioUnitErr_InvalidElement);
outDataSize = sizeof(bool);
@@ -690,6 +699,12 @@ public:
}
return noErr;
#endif

#if DISTRHO_PLUGIN_HAS_UI && DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
case 'DPFa':
*static_cast<void**>(outData) = fPlugin.getInstancePointer();
return noErr;
#endif
}

d_stdout("TODO GetProperty(%d:%s, %d:%s, %d, ...)", inProp, AudioUnitPropertyID2Str(inProp), inScope, AudioUnitScope2Str(inScope), inElement);
@@ -902,7 +917,7 @@ public:
// TODO
return noErr;

case 19001:
case 'DPFp':
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement < fParameterCount, inElement, kAudioUnitErr_InvalidElement);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inDataSize == sizeof(float), inDataSize, kAudioUnitErr_InvalidPropertyValue);
@@ -924,7 +939,7 @@ public:
}
return noErr;

case 19002:
case 'DPFt':
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement < fParameterCount, inElement, kAudioUnitErr_InvalidElement);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inDataSize == sizeof(bool), inDataSize, kAudioUnitErr_InvalidPropertyValue);
@@ -1041,7 +1056,7 @@ public:
fLastParameterValues[param] = value;
fPlugin.setParameterValue(param, value);
// TODO flag param only, notify listeners later on bg thread (sem_post etc)
notifyListeners(19003, kAudioUnitScope_Global, param);
notifyListeners('DPFP', kAudioUnitScope_Global, param);
}

return noErr;


+ 11
- 6
distrho/src/DistrhoUIAU.mm View File

@@ -81,12 +81,12 @@ public:

CFRunLoopAddTimer(CFRunLoopGetCurrent(), fTimerRef, kCFRunLoopCommonModes);

AudioUnitAddPropertyListener(fComponent, 19003, auPropertyChangedCallback, this);
AudioUnitAddPropertyListener(fComponent, 'DPFP', auPropertyChangedCallback, this);
}

~DPF_UI_AU()
{
AudioUnitRemovePropertyListenerWithUserData(fComponent, 19003, auPropertyChangedCallback, this);
AudioUnitRemovePropertyListenerWithUserData(fComponent, 'DPFP', auPropertyChangedCallback, this);

if (fTimerRef != nullptr)
{
@@ -126,7 +126,7 @@ private:
{
switch (prop)
{
case 19003:
case 'DPFP':
{
AudioUnitParameterValue value;
if (AudioUnitGetParameter(fComponent, elem, kAudioUnitScope_Global, 0, &value) == noErr)
@@ -156,7 +156,7 @@ private:

void editParameter(const uint32_t rindex, const bool started) const
{
AudioUnitSetProperty(fComponent, 19002, kAudioUnitScope_Global, rindex, &started, sizeof(bool));
AudioUnitSetProperty(fComponent, 'DPFt', kAudioUnitScope_Global, rindex, &started, sizeof(bool));
}

static void editParameterCallback(void* const ptr, const uint32_t rindex, const bool started)
@@ -166,7 +166,7 @@ private:

void setParameterValue(const uint32_t rindex, const float value)
{
AudioUnitSetProperty(fComponent, 19001, kAudioUnitScope_Global, rindex, &value, sizeof(float));
AudioUnitSetProperty(fComponent, 'DPFp', kAudioUnitScope_Global, rindex, &value, sizeof(float));
}

static void setParameterCallback(void* const ptr, const uint32_t rindex, const float value)
@@ -239,7 +239,12 @@ END_NAMESPACE_DISTRHO
{
const double sampleRate = d_nextSampleRate;
const intptr_t winId = 0;
void* const instancePointer = nullptr;
void* instancePointer = nullptr;

#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
UInt32 size = sizeof(void*);
AudioUnitGetProperty(component, 'DPFa', kAudioUnitScope_Global, 0, &instancePointer, &size);
#endif

ui = new DPF_UI_AU(component, winId, sampleRate, instancePointer);



Loading…
Cancel
Save