diff --git a/distrho/src/DistrhoPluginAU.cpp b/distrho/src/DistrhoPluginAU.cpp index f404c816..6a99a54d 100644 --- a/distrho/src/DistrhoPluginAU.cpp +++ b/distrho/src/DistrhoPluginAU.cpp @@ -16,7 +16,12 @@ #include "DistrhoPluginInternal.hpp" -// #define CA_NO_AU_UI_FEATURES +// #define CA_BASIC_AU_FEATURES 1 +#define CA_NO_AU_UI_FEATURES 1 +#define CA_USE_AUDIO_PLUGIN_ONLY 1 +#define TARGET_OS_MAC 1 + +#include #define TRACE d_stderr("////////--------------------------------------------------------------- %s %d", __PRETTY_FUNCTION__, __LINE__); @@ -60,22 +65,208 @@ class PluginHolder public: PluginExporter fPlugin; + #if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS != 0 + struct BusInfo { + char name[32]; + uint32_t numChannels; + bool hasPair; + bool isCV; + bool isMain; + uint32_t groupId; + }; + std::vector fAudioInputBuses, fAudioOutputBuses; + bool fUsingCV; + #endif + PluginHolder() - : fPlugin(this, writeMidiCallback, requestParameterValueChangeCallback, updateStateValueCallback) {} + : fPlugin(this, writeMidiCallback, requestParameterValueChangeCallback, updateStateValueCallback) + #if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS != 0 + , fAudioInputBuses() + , fAudioOutputBuses() + , fUsingCV(false) + #endif + { + #if DISTRHO_PLUGIN_NUM_INPUTS != 0 + fillInBusInfoDetails(); + #endif + #if DISTRHO_PLUGIN_NUM_OUTPUTS != 0 + fillInBusInfoDetails(); + #endif + #if DISTRHO_PLUGIN_NUM_INPUTS != 0 && DISTRHO_PLUGIN_NUM_OUTPUTS != 0 + fillInBusInfoPairs(); + #endif + } - virtual ~PluginHolder() {} + // virtual ~PluginHolder() {} protected: uint32_t getPluginBusCount(const bool isInput) noexcept { + #if DISTRHO_PLUGIN_NUM_INPUTS != 0 + if (isInput) + return fAudioInputBuses.size(); + #endif + #if DISTRHO_PLUGIN_NUM_OUTPUTS != 0 + if (!isInput) + return fAudioOutputBuses.size(); + #endif return 0; } private: + #if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS != 0 + template + void fillInBusInfoDetails() + { + constexpr const uint32_t numPorts = isInput ? DISTRHO_PLUGIN_NUM_INPUTS : DISTRHO_PLUGIN_NUM_OUTPUTS; + std::vector& busInfos(isInput ? fAudioInputBuses : fAudioOutputBuses); + + enum { + kPortTypeNull, + kPortTypeAudio, + kPortTypeSidechain, + kPortTypeCV, + kPortTypeGroup + } lastSeenPortType = kPortTypeNull; + uint32_t lastSeenGroupId = kPortGroupNone; + uint32_t nonGroupAudioId = 0; + uint32_t nonGroupSidechainId = 0x20000000; + + for (uint32_t i=0; i::Factory(inDesc); }