Browse Source

Expose plugin CV ports, use it in plugin class rather than lv2 only

tags/1.9.5
falkTX 11 years ago
parent
commit
09a9d7da86
6 changed files with 79 additions and 46 deletions
  1. +23
    -2
      source/backend/CarlaPlugin.hpp
  2. +22
    -0
      source/backend/plugin/CarlaPlugin.cpp
  3. +4
    -0
      source/backend/plugin/CarlaPluginInternal.cpp
  4. +2
    -7
      source/backend/plugin/CarlaPluginInternal.hpp
  5. +26
    -35
      source/backend/plugin/Lv2Plugin.cpp
  6. +2
    -2
      source/backend/plugin/NativePlugin.cpp

+ 23
- 2
source/backend/CarlaPlugin.hpp View File

@@ -45,6 +45,7 @@ CARLA_BACKEND_START_NAMESPACE
*/ */


class CarlaEngineAudioPort; class CarlaEngineAudioPort;
class CarlaEngineCVPort;
class CarlaEngineEventPort; class CarlaEngineEventPort;


/*! /*!
@@ -172,6 +173,16 @@ public:
*/ */
uint32_t getAudioOutCount() const noexcept; 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. * Get the number of MIDI inputs.
*/ */
@@ -815,6 +826,16 @@ public:
*/ */
CarlaEngineAudioPort* getAudioOutPort(const uint32_t index) const noexcept; 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. * Get the plugin's default event input port.
*/ */
@@ -879,8 +900,8 @@ public:
const int64_t uniqueId; 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* newNative(const Initializer& init);
static CarlaPlugin* newBridge(const Initializer& init, const BinaryType btype, const PluginType ptype, const char* const bridgeBinary); static CarlaPlugin* newBridge(const Initializer& init, const BinaryType btype, const PluginType ptype, const char* const bridgeBinary);


+ 22
- 0
source/backend/plugin/CarlaPlugin.cpp View File

@@ -173,6 +173,16 @@ uint32_t CarlaPlugin::getAudioOutCount() const noexcept
return pData->audioOut.count; 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 uint32_t CarlaPlugin::getMidiInCount() const noexcept
{ {
return (pData->extraHints & PLUGIN_EXTRA_HINT_HAS_MIDI_IN) ? 1 : 0; return (pData->extraHints & PLUGIN_EXTRA_HINT_HAS_MIDI_IN) ? 1 : 0;
@@ -1396,6 +1406,8 @@ void CarlaPlugin::initBuffers() const noexcept
{ {
pData->audioIn.initBuffers(); pData->audioIn.initBuffers();
pData->audioOut.initBuffers(); pData->audioOut.initBuffers();
pData->cvIn.initBuffers();
pData->cvOut.initBuffers();
pData->event.initBuffers(); pData->event.initBuffers();
} }


@@ -1940,6 +1952,16 @@ CarlaEngineAudioPort* CarlaPlugin::getAudioOutPort(const uint32_t index) const n
return pData->audioOut.ports[index].port; 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 CarlaEngineEventPort* CarlaPlugin::getDefaultEventInPort() const noexcept
{ {
return pData->event.portIn; return pData->event.portIn;


+ 4
- 0
source/backend/plugin/CarlaPluginInternal.cpp View File

@@ -462,6 +462,8 @@ CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx
iconName(nullptr), iconName(nullptr),
audioIn(), audioIn(),
audioOut(), audioOut(),
cvIn(),
cvOut(),
event(), event(),
param(), param(),
prog(), prog(),
@@ -602,6 +604,8 @@ void CarlaPlugin::ProtectedData::clearBuffers() noexcept


audioIn.clear(); audioIn.clear();
audioOut.clear(); audioOut.clear();
cvIn.clear();
cvOut.clear();
param.clear(); param.clear();
event.clear(); event.clear();
} }


+ 2
- 7
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -33,13 +33,6 @@ using juce::FloatVectorOperations;


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


// -----------------------------------------------------------------------
// Forward declarations of CarlaEngine port classes

class CarlaEngineAudioPort;
class CarlaEngineCVPort;
class CarlaEngineEventPort;

// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// Maximum pre-allocated events for some plugin types // Maximum pre-allocated events for some plugin types


@@ -245,6 +238,8 @@ struct CarlaPlugin::ProtectedData {
// data 2 // data 2
PluginAudioData audioIn; PluginAudioData audioIn;
PluginAudioData audioOut; PluginAudioData audioOut;
PluginCVData cvIn;
PluginCVData cvOut;
PluginEventData event; PluginEventData event;
PluginParameterData param; PluginParameterData param;
PluginProgramData prog; PluginProgramData prog;


+ 26
- 35
source/backend/plugin/Lv2Plugin.cpp View File

@@ -401,8 +401,6 @@ public:
fAtomBufferIn(), fAtomBufferIn(),
fAtomBufferOut(), fAtomBufferOut(),
fAtomForge(), fAtomForge(),
fCvIn(),
fCvOut(),
fEventsIn(), fEventsIn(),
fEventsOut(), fEventsOut(),
fLv2Options(), fLv2Options(),
@@ -1515,7 +1513,7 @@ public:


if (cvIns > 0) if (cvIns > 0)
{ {
fCvIn.createNew(cvIns);
pData->cvIn.createNew(cvIns);
fCvInBuffers = new float*[cvIns]; fCvInBuffers = new float*[cvIns];


for (uint32_t i=0; i < cvIns; ++i) for (uint32_t i=0; i < cvIns; ++i)
@@ -1524,7 +1522,7 @@ public:


if (cvOuts > 0) if (cvOuts > 0)
{ {
fCvOut.createNew(cvOuts);
pData->cvOut.createNew(cvOuts);
fCvOutBuffers = new float*[cvOuts]; fCvOutBuffers = new float*[cvOuts];


for (uint32_t i=0; i < cvOuts; ++i) for (uint32_t i=0; i < cvOuts; ++i)
@@ -1654,14 +1652,14 @@ public:
if (LV2_IS_PORT_INPUT(portTypes)) if (LV2_IS_PORT_INPUT(portTypes))
{ {
const uint32_t j = iCvIn++; 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)) else if (LV2_IS_PORT_OUTPUT(portTypes))
{ {
const uint32_t j = iCvOut++; 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 else
carla_stderr("WARNING - Got a broken Port (CV, but not input or output)"); carla_stderr("WARNING - Got a broken Port (CV, but not input or output)");
@@ -2731,19 +2729,19 @@ public:
// -------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------
// CV ports // 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); CARLA_SAFE_ASSERT_RETURN(audioOutBuf != nullptr, false);
} }
if (fCvIn.count > 0)
if (pData->cvIn.count > 0)
{ {
CARLA_SAFE_ASSERT_RETURN(cvInBuf != nullptr, false); CARLA_SAFE_ASSERT_RETURN(cvInBuf != nullptr, false);
} }
if (fCvOut.count > 0)
if (pData->cvOut.count > 0)
{ {
CARLA_SAFE_ASSERT_RETURN(cvOutBuf != nullptr, false); CARLA_SAFE_ASSERT_RETURN(cvOutBuf != nullptr, false);
} }
@@ -3359,10 +3357,10 @@ public:
// -------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------
// Set CV buffers // 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<int>(frames)); FloatVectorOperations::copy(fCvInBuffers[i], cvInBuf[i]+timeOffset, static_cast<int>(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<int>(frames)); FloatVectorOperations::clear(fCvOutBuffers[i], static_cast<int>(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) if (fCvInBuffers[i] != nullptr)
delete[] fCvInBuffers[i]; delete[] fCvInBuffers[i];
fCvInBuffers[i] = new float[newBufferSize]; 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) 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) if (fCvOutBuffers[i] != nullptr)
delete[] fCvOutBuffers[i]; delete[] fCvOutBuffers[i];
fCvOutBuffers[i] = new float[newBufferSize]; 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) 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<int>(newBufferSize)); const int newBufferSizeInt(static_cast<int>(newBufferSize));
@@ -3619,8 +3617,6 @@ public:


void initBuffers() const noexcept override void initBuffers() const noexcept override
{ {
fCvIn.initBuffers();
fCvOut.initBuffers();
fEventsIn.initBuffers(); fEventsIn.initBuffers();
fEventsOut.initBuffers(); fEventsOut.initBuffers();


@@ -3663,7 +3659,7 @@ public:


if (fCvInBuffers != nullptr) 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) if (fCvInBuffers[i] != nullptr)
{ {
@@ -3678,7 +3674,7 @@ public:


if (fCvOutBuffers != nullptr) 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) if (fCvOutBuffers[i] != nullptr)
{ {
@@ -3697,8 +3693,6 @@ public:
fParamBuffers = nullptr; fParamBuffers = nullptr;
} }


fCvIn.clear();
fCvOut.clear();
fEventsIn.clear(); fEventsIn.clear();
fEventsOut.clear(); fEventsOut.clear();


@@ -5279,9 +5273,6 @@ private:
Lv2AtomRingBuffer fAtomBufferOut; Lv2AtomRingBuffer fAtomBufferOut;
LV2_Atom_Forge fAtomForge; LV2_Atom_Forge fAtomForge;


PluginCVData fCvIn;
PluginCVData fCvOut;

Lv2PluginEventData fEventsIn; Lv2PluginEventData fEventsIn;
Lv2PluginEventData fEventsOut; Lv2PluginEventData fEventsOut;
Lv2PluginOptions fLv2Options; Lv2PluginOptions fLv2Options;


+ 2
- 2
source/backend/plugin/NativePlugin.cpp View File

@@ -2408,12 +2408,12 @@ private:


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


size_t CarlaPlugin::getNativePluginCount() noexcept
std::size_t CarlaPlugin::getNativePluginCount() noexcept
{ {
return NativePlugin::getPluginCount(); 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); return NativePlugin::getPluginDescriptor(index);
} }


Loading…
Cancel
Save