diff --git a/source/backend/CarlaPlugin.hpp b/source/backend/CarlaPlugin.hpp index b84fa0c98..fbf6fa9ce 100644 --- a/source/backend/CarlaPlugin.hpp +++ b/source/backend/CarlaPlugin.hpp @@ -45,6 +45,7 @@ CARLA_BACKEND_START_NAMESPACE */ class CarlaEngineAudioPort; +class CarlaEngineCVPort; class CarlaEngineEventPort; /*! @@ -172,6 +173,16 @@ public: */ uint32_t getAudioOutCount() const noexcept; + /*! + * Get the number of CV inputs. + */ + uint32_t getCVInCount() const noexcept; + + /*! + * Get the number of CV outputs. + */ + uint32_t getCVOutCount() const noexcept; + /*! * Get the number of MIDI inputs. */ @@ -815,6 +826,16 @@ public: */ CarlaEngineAudioPort* getAudioOutPort(const uint32_t index) const noexcept; + /*! + * Get a plugin's CV input port. + */ + CarlaEngineCVPort* getCVInPort(const uint32_t index) const noexcept; + + /*! + * Get a plugin's CV output port. + */ + CarlaEngineCVPort* getCVOutPort(const uint32_t index) const noexcept; + /*! * Get the plugin's default event input port. */ @@ -879,8 +900,8 @@ public: const int64_t uniqueId; }; - static size_t getNativePluginCount() noexcept; - static const NativePluginDescriptor* getNativePluginDescriptor(const size_t index) noexcept; + static std::size_t getNativePluginCount() noexcept; + static const NativePluginDescriptor* getNativePluginDescriptor(const std::size_t index) noexcept; static CarlaPlugin* newNative(const Initializer& init); static CarlaPlugin* newBridge(const Initializer& init, const BinaryType btype, const PluginType ptype, const char* const bridgeBinary); diff --git a/source/backend/plugin/CarlaPlugin.cpp b/source/backend/plugin/CarlaPlugin.cpp index 4ba0f4b70..af591ea35 100644 --- a/source/backend/plugin/CarlaPlugin.cpp +++ b/source/backend/plugin/CarlaPlugin.cpp @@ -173,6 +173,16 @@ uint32_t CarlaPlugin::getAudioOutCount() const noexcept return pData->audioOut.count; } +uint32_t CarlaPlugin::getCVInCount() const noexcept +{ + return pData->cvIn.count; +} + +uint32_t CarlaPlugin::getCVOutCount() const noexcept +{ + return pData->cvOut.count; +} + uint32_t CarlaPlugin::getMidiInCount() const noexcept { return (pData->extraHints & PLUGIN_EXTRA_HINT_HAS_MIDI_IN) ? 1 : 0; @@ -1396,6 +1406,8 @@ void CarlaPlugin::initBuffers() const noexcept { pData->audioIn.initBuffers(); pData->audioOut.initBuffers(); + pData->cvIn.initBuffers(); + pData->cvOut.initBuffers(); pData->event.initBuffers(); } @@ -1940,6 +1952,16 @@ CarlaEngineAudioPort* CarlaPlugin::getAudioOutPort(const uint32_t index) const n return pData->audioOut.ports[index].port; } +CarlaEngineCVPort* CarlaPlugin::getCVInPort(const uint32_t index) const noexcept +{ + return pData->cvIn.ports[index].port; +} + +CarlaEngineCVPort* CarlaPlugin::getCVOutPort(const uint32_t index) const noexcept +{ + return pData->cvOut.ports[index].port; +} + CarlaEngineEventPort* CarlaPlugin::getDefaultEventInPort() const noexcept { return pData->event.portIn; diff --git a/source/backend/plugin/CarlaPluginInternal.cpp b/source/backend/plugin/CarlaPluginInternal.cpp index c8e898572..0cc22f1e6 100644 --- a/source/backend/plugin/CarlaPluginInternal.cpp +++ b/source/backend/plugin/CarlaPluginInternal.cpp @@ -462,6 +462,8 @@ CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx iconName(nullptr), audioIn(), audioOut(), + cvIn(), + cvOut(), event(), param(), prog(), @@ -602,6 +604,8 @@ void CarlaPlugin::ProtectedData::clearBuffers() noexcept audioIn.clear(); audioOut.clear(); + cvIn.clear(); + cvOut.clear(); param.clear(); event.clear(); } diff --git a/source/backend/plugin/CarlaPluginInternal.hpp b/source/backend/plugin/CarlaPluginInternal.hpp index 97a2330de..6d23706b1 100644 --- a/source/backend/plugin/CarlaPluginInternal.hpp +++ b/source/backend/plugin/CarlaPluginInternal.hpp @@ -33,13 +33,6 @@ using juce::FloatVectorOperations; CARLA_BACKEND_START_NAMESPACE -// ----------------------------------------------------------------------- -// Forward declarations of CarlaEngine port classes - -class CarlaEngineAudioPort; -class CarlaEngineCVPort; -class CarlaEngineEventPort; - // ----------------------------------------------------------------------- // Maximum pre-allocated events for some plugin types @@ -245,6 +238,8 @@ struct CarlaPlugin::ProtectedData { // data 2 PluginAudioData audioIn; PluginAudioData audioOut; + PluginCVData cvIn; + PluginCVData cvOut; PluginEventData event; PluginParameterData param; PluginProgramData prog; diff --git a/source/backend/plugin/Lv2Plugin.cpp b/source/backend/plugin/Lv2Plugin.cpp index 3d8ae74f9..1e206052c 100644 --- a/source/backend/plugin/Lv2Plugin.cpp +++ b/source/backend/plugin/Lv2Plugin.cpp @@ -401,8 +401,6 @@ public: fAtomBufferIn(), fAtomBufferOut(), fAtomForge(), - fCvIn(), - fCvOut(), fEventsIn(), fEventsOut(), fLv2Options(), @@ -1515,7 +1513,7 @@ public: if (cvIns > 0) { - fCvIn.createNew(cvIns); + pData->cvIn.createNew(cvIns); fCvInBuffers = new float*[cvIns]; for (uint32_t i=0; i < cvIns; ++i) @@ -1524,7 +1522,7 @@ public: if (cvOuts > 0) { - fCvOut.createNew(cvOuts); + pData->cvOut.createNew(cvOuts); fCvOutBuffers = new float*[cvOuts]; for (uint32_t i=0; i < cvOuts; ++i) @@ -1654,14 +1652,14 @@ public: if (LV2_IS_PORT_INPUT(portTypes)) { const uint32_t j = iCvIn++; - fCvIn.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, true); - fCvIn.ports[j].rindex = i; + pData->cvIn.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, true); + pData->cvIn.ports[j].rindex = i; } else if (LV2_IS_PORT_OUTPUT(portTypes)) { const uint32_t j = iCvOut++; - fCvOut.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, false); - fCvOut.ports[j].rindex = i; + pData->cvOut.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, false); + pData->cvOut.ports[j].rindex = i; } else carla_stderr("WARNING - Got a broken Port (CV, but not input or output)"); @@ -2731,19 +2729,19 @@ public: // -------------------------------------------------------------------------------------------------------- // CV ports - float* cvInBuf[fCvIn.count /*> 0 ? fCvIn.count : 1*/]; - float* cvOutBuf[fCvOut.count /*> 0 ? fCvOut.count : 1*/]; + float* cvInBuf[pData->cvIn.count /*> 0 ? pData->cvIn.count : 1*/]; + float* cvOutBuf[pData->cvOut.count /*> 0 ? pData->cvOut.count : 1*/]; - for (uint32_t i=0; i < fCvIn.count; ++i) + for (uint32_t i=0; i < pData->cvIn.count; ++i) { - CARLA_SAFE_ASSERT_CONTINUE(fCvIn.ports[i].port != nullptr); - cvInBuf[i] = fCvIn.ports[i].port->getBuffer(); + CARLA_SAFE_ASSERT_CONTINUE(pData->cvIn.ports[i].port != nullptr); + cvInBuf[i] = pData->cvIn.ports[i].port->getBuffer(); } - for (uint32_t i=0; i < fCvOut.count; ++i) + for (uint32_t i=0; i < pData->cvOut.count; ++i) { - CARLA_SAFE_ASSERT_CONTINUE(fCvOut.ports[i].port != nullptr); - cvOutBuf[i] = fCvOut.ports[i].port->getBuffer(); + CARLA_SAFE_ASSERT_CONTINUE(pData->cvOut.ports[i].port != nullptr); + cvOutBuf[i] = pData->cvOut.ports[i].port->getBuffer(); } // -------------------------------------------------------------------------------------------------------- @@ -3320,11 +3318,11 @@ public: { CARLA_SAFE_ASSERT_RETURN(audioOutBuf != nullptr, false); } - if (fCvIn.count > 0) + if (pData->cvIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(cvInBuf != nullptr, false); } - if (fCvOut.count > 0) + if (pData->cvOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(cvOutBuf != nullptr, false); } @@ -3359,10 +3357,10 @@ public: // -------------------------------------------------------------------------------------------------------- // Set CV buffers - for (uint32_t i=0; i < fCvIn.count; ++i) + for (uint32_t i=0; i < pData->cvIn.count; ++i) FloatVectorOperations::copy(fCvInBuffers[i], cvInBuf[i]+timeOffset, static_cast(frames)); - for (uint32_t i=0; i < fCvOut.count; ++i) + for (uint32_t i=0; i < pData->cvOut.count; ++i) FloatVectorOperations::clear(fCvOutBuffers[i], static_cast(frames)); // -------------------------------------------------------------------------------------------------------- @@ -3532,28 +3530,28 @@ public: } } - for (uint32_t i=0; i < fCvIn.count; ++i) + for (uint32_t i=0; i < pData->cvIn.count; ++i) { if (fCvInBuffers[i] != nullptr) delete[] fCvInBuffers[i]; fCvInBuffers[i] = new float[newBufferSize]; - fDescriptor->connect_port(fHandle, fCvIn.ports[i].rindex, fCvInBuffers[i]); + fDescriptor->connect_port(fHandle, pData->cvIn.ports[i].rindex, fCvInBuffers[i]); if (fHandle2 != nullptr) - fDescriptor->connect_port(fHandle2, fCvIn.ports[i].rindex, fCvInBuffers[i]); + fDescriptor->connect_port(fHandle2, pData->cvIn.ports[i].rindex, fCvInBuffers[i]); } - for (uint32_t i=0; i < fCvOut.count; ++i) + for (uint32_t i=0; i < pData->cvOut.count; ++i) { if (fCvOutBuffers[i] != nullptr) delete[] fCvOutBuffers[i]; fCvOutBuffers[i] = new float[newBufferSize]; - fDescriptor->connect_port(fHandle, fCvOut.ports[i].rindex, fCvOutBuffers[i]); + fDescriptor->connect_port(fHandle, pData->cvOut.ports[i].rindex, fCvOutBuffers[i]); if (fHandle2 != nullptr) - fDescriptor->connect_port(fHandle2, fCvOut.ports[i].rindex, fCvOutBuffers[i]); + fDescriptor->connect_port(fHandle2, pData->cvOut.ports[i].rindex, fCvOutBuffers[i]); } const int newBufferSizeInt(static_cast(newBufferSize)); @@ -3619,8 +3617,6 @@ public: void initBuffers() const noexcept override { - fCvIn.initBuffers(); - fCvOut.initBuffers(); fEventsIn.initBuffers(); fEventsOut.initBuffers(); @@ -3663,7 +3659,7 @@ public: if (fCvInBuffers != nullptr) { - for (uint32_t i=0; i < fCvIn.count; ++i) + for (uint32_t i=0; i < pData->cvIn.count; ++i) { if (fCvInBuffers[i] != nullptr) { @@ -3678,7 +3674,7 @@ public: if (fCvOutBuffers != nullptr) { - for (uint32_t i=0; i < fCvOut.count; ++i) + for (uint32_t i=0; i < pData->cvOut.count; ++i) { if (fCvOutBuffers[i] != nullptr) { @@ -3697,8 +3693,6 @@ public: fParamBuffers = nullptr; } - fCvIn.clear(); - fCvOut.clear(); fEventsIn.clear(); fEventsOut.clear(); @@ -5279,9 +5273,6 @@ private: Lv2AtomRingBuffer fAtomBufferOut; LV2_Atom_Forge fAtomForge; - PluginCVData fCvIn; - PluginCVData fCvOut; - Lv2PluginEventData fEventsIn; Lv2PluginEventData fEventsOut; Lv2PluginOptions fLv2Options; diff --git a/source/backend/plugin/NativePlugin.cpp b/source/backend/plugin/NativePlugin.cpp index c68dfc071..5fcfd821c 100644 --- a/source/backend/plugin/NativePlugin.cpp +++ b/source/backend/plugin/NativePlugin.cpp @@ -2408,12 +2408,12 @@ private: // ----------------------------------------------------------------------- -size_t CarlaPlugin::getNativePluginCount() noexcept +std::size_t CarlaPlugin::getNativePluginCount() noexcept { return NativePlugin::getPluginCount(); } -const NativePluginDescriptor* CarlaPlugin::getNativePluginDescriptor(const size_t index) noexcept +const NativePluginDescriptor* CarlaPlugin::getNativePluginDescriptor(const std::size_t index) noexcept { return NativePlugin::getPluginDescriptor(index); }