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 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);


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

@@ -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;


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

@@ -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();
}


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

@@ -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;


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

@@ -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<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));

// --------------------------------------------------------------------------------------------------------
@@ -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<int>(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;


+ 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();
}

const NativePluginDescriptor* CarlaPlugin::getNativePluginDescriptor(const size_t index) noexcept
const NativePluginDescriptor* CarlaPlugin::getNativePluginDescriptor(const std::size_t index) noexcept
{
return NativePlugin::getPluginDescriptor(index);
}


Loading…
Cancel
Save