Browse Source

More plugin-bridge work; Add idle() to native API

tags/1.9.6
falkTX 10 years ago
parent
commit
26e36b1996
8 changed files with 83 additions and 15 deletions
  1. +10
    -5
      source/backend/CarlaUtils.cpp
  2. +9
    -2
      source/backend/engine/CarlaEngineBridge.cpp
  3. +15
    -1
      source/backend/engine/CarlaEngineNative.cpp
  4. +21
    -0
      source/backend/plugin/CarlaPluginBridge.cpp
  5. +3
    -0
      source/backend/plugin/CarlaPluginNative.cpp
  6. +8
    -6
      source/includes/CarlaNative.h
  7. +10
    -0
      source/includes/CarlaNative.hpp
  8. +7
    -1
      source/plugin/carla-vst.cpp

+ 10
- 5
source/backend/CarlaUtils.cpp View File

@@ -63,6 +63,7 @@ static const NativePluginDescriptor carlaRackDesc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -79,7 +80,7 @@ static const NativePluginDescriptor carlaRackDesc = {
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr
}; };


static const NativePluginDescriptor carlaPatchbayDesc = { static const NativePluginDescriptor carlaPatchbayDesc = {
@@ -88,6 +89,7 @@ static const NativePluginDescriptor carlaPatchbayDesc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -104,7 +106,7 @@ static const NativePluginDescriptor carlaPatchbayDesc = {
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr
}; };


static const NativePluginDescriptor carlaPatchbay3sDesc = { static const NativePluginDescriptor carlaPatchbay3sDesc = {
@@ -113,6 +115,7 @@ static const NativePluginDescriptor carlaPatchbay3sDesc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -129,7 +132,7 @@ static const NativePluginDescriptor carlaPatchbay3sDesc = {
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr
}; };


static const NativePluginDescriptor carlaPatchbay16Desc = { static const NativePluginDescriptor carlaPatchbay16Desc = {
@@ -138,6 +141,7 @@ static const NativePluginDescriptor carlaPatchbay16Desc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -154,7 +158,7 @@ static const NativePluginDescriptor carlaPatchbay16Desc = {
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr
}; };


static const NativePluginDescriptor carlaPatchbay32Desc = { static const NativePluginDescriptor carlaPatchbay32Desc = {
@@ -163,6 +167,7 @@ static const NativePluginDescriptor carlaPatchbay32Desc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -179,7 +184,7 @@ static const NativePluginDescriptor carlaPatchbay32Desc = {
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr
}; };


static LinkedList<const NativePluginDescriptor*> gPluginDescriptors; static LinkedList<const NativePluginDescriptor*> gPluginDescriptors;


+ 9
- 2
source/backend/engine/CarlaEngineBridge.cpp View File

@@ -336,7 +336,7 @@ struct BridgeNonRtServerControl : public CarlaRingBufferControl<HugeStackBuffer>
writeUInt(static_cast<uint32_t>(opcode)); writeUInt(static_cast<uint32_t>(opcode));
} }


void waitIfDataIsReachingLimit() const noexcept
void waitIfDataIsReachingLimit() noexcept
{ {
if (getAvailableDataSize() < HugeStackBuffer::size/4) if (getAvailableDataSize() < HugeStackBuffer::size/4)
return; return;
@@ -344,9 +344,16 @@ struct BridgeNonRtServerControl : public CarlaRingBufferControl<HugeStackBuffer>
for (int i=50; --i >= 0;) for (int i=50; --i >= 0;)
{ {
if (getAvailableDataSize() >= HugeStackBuffer::size*3/4) if (getAvailableDataSize() >= HugeStackBuffer::size*3/4)
break;
{
carla_stdout("Client waitIfDataIsReachingLimit() reached and waited successfully");
writeOpcode(kPluginBridgeNonRtServerPong);
commitWrite();
return;
}
carla_msleep(20); carla_msleep(20);
} }

carla_stderr("Client waitIfDataIsReachingLimit() reached and failed");
} }


CARLA_DECLARE_NON_COPY_STRUCT(BridgeNonRtServerControl) CARLA_DECLARE_NON_COPY_STRUCT(BridgeNonRtServerControl)


+ 15
- 1
source/backend/engine/CarlaEngineNative.cpp View File

@@ -1445,7 +1445,6 @@ protected:


void uiIdle() void uiIdle()
{ {
CarlaEngine::idle();
fUiServer.idlePipe(); fUiServer.idlePipe();


if (fUiServer.isPipeRunning()) if (fUiServer.isPipeRunning())
@@ -1580,6 +1579,11 @@ public:
delete handlePtr; delete handlePtr;
} }


static void _idle(NativePluginHandle handle)
{
handlePtr->idle();
}

static uint32_t _get_parameter_count(NativePluginHandle handle) static uint32_t _get_parameter_count(NativePluginHandle handle)
{ {
return handlePtr->getParameterCount(); return handlePtr->getParameterCount();
@@ -1729,6 +1733,7 @@ static const NativePluginDescriptor carlaRackDesc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -1744,6 +1749,7 @@ static const NativePluginDescriptor carlaRackDesc = {
/* copyright */ "GNU GPL v2+", /* copyright */ "GNU GPL v2+",
CarlaEngineNative::_instantiateRack, CarlaEngineNative::_instantiateRack,
CarlaEngineNative::_cleanup, CarlaEngineNative::_cleanup,
CarlaEngineNative::_idle,
CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_count,
CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_info,
CarlaEngineNative::_get_parameter_value, CarlaEngineNative::_get_parameter_value,
@@ -1772,6 +1778,7 @@ static const NativePluginDescriptor carlaPatchbayDesc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -1787,6 +1794,7 @@ static const NativePluginDescriptor carlaPatchbayDesc = {
/* copyright */ "GNU GPL v2+", /* copyright */ "GNU GPL v2+",
CarlaEngineNative::_instantiatePatchbay, CarlaEngineNative::_instantiatePatchbay,
CarlaEngineNative::_cleanup, CarlaEngineNative::_cleanup,
CarlaEngineNative::_idle,
CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_count,
CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_info,
CarlaEngineNative::_get_parameter_value, CarlaEngineNative::_get_parameter_value,
@@ -1815,6 +1823,7 @@ static const NativePluginDescriptor carlaPatchbay3sDesc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -1830,6 +1839,7 @@ static const NativePluginDescriptor carlaPatchbay3sDesc = {
/* copyright */ "GNU GPL v2+", /* copyright */ "GNU GPL v2+",
CarlaEngineNative::_instantiatePatchbay3s, CarlaEngineNative::_instantiatePatchbay3s,
CarlaEngineNative::_cleanup, CarlaEngineNative::_cleanup,
CarlaEngineNative::_idle,
CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_count,
CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_info,
CarlaEngineNative::_get_parameter_value, CarlaEngineNative::_get_parameter_value,
@@ -1858,6 +1868,7 @@ static const NativePluginDescriptor carlaPatchbay16Desc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -1873,6 +1884,7 @@ static const NativePluginDescriptor carlaPatchbay16Desc = {
/* copyright */ "GNU GPL v2+", /* copyright */ "GNU GPL v2+",
CarlaEngineNative::_instantiatePatchbay16, CarlaEngineNative::_instantiatePatchbay16,
CarlaEngineNative::_cleanup, CarlaEngineNative::_cleanup,
CarlaEngineNative::_idle,
CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_count,
CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_info,
CarlaEngineNative::_get_parameter_value, CarlaEngineNative::_get_parameter_value,
@@ -1901,6 +1913,7 @@ static const NativePluginDescriptor carlaPatchbay32Desc = {
|NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_HAS_UI
|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
|NATIVE_PLUGIN_NEEDS_SINGLE_THREAD |NATIVE_PLUGIN_NEEDS_SINGLE_THREAD
|NATIVE_PLUGIN_NEEDS_DSP_IDLE
|NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_STATE
|NATIVE_PLUGIN_USES_TIME), |NATIVE_PLUGIN_USES_TIME),
/* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
@@ -1916,6 +1929,7 @@ static const NativePluginDescriptor carlaPatchbay32Desc = {
/* copyright */ "GNU GPL v2+", /* copyright */ "GNU GPL v2+",
CarlaEngineNative::_instantiatePatchbay32, CarlaEngineNative::_instantiatePatchbay32,
CarlaEngineNative::_cleanup, CarlaEngineNative::_cleanup,
CarlaEngineNative::_idle,
CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_count,
CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_info,
CarlaEngineNative::_get_parameter_value, CarlaEngineNative::_get_parameter_value,


+ 21
- 0
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -353,6 +353,26 @@ struct BridgeNonRtClientControl : public CarlaRingBufferControl<BigStackBuffer>
writeUInt(static_cast<uint32_t>(opcode)); writeUInt(static_cast<uint32_t>(opcode));
} }


void waitIfDataIsReachingLimit() noexcept
{
if (getAvailableDataSize() < BigStackBuffer::size/4)
return;

for (int i=50; --i >= 0;)
{
if (getAvailableDataSize() >= BigStackBuffer::size*3/4)
{
carla_stdout("Server waitIfDataIsReachingLimit() reached and waited successfully");
writeOpcode(kPluginBridgeNonRtClientPing);
commitWrite();
return;
}
carla_msleep(20);
}

carla_stderr("Server waitIfDataIsReachingLimit() reached and failed");
}

CARLA_DECLARE_NON_COPY_STRUCT(BridgeNonRtClientControl) CARLA_DECLARE_NON_COPY_STRUCT(BridgeNonRtClientControl)
}; };


@@ -967,6 +987,7 @@ public:
fShmNonRtClientControl.writeUInt(parameterId); fShmNonRtClientControl.writeUInt(parameterId);
fShmNonRtClientControl.writeFloat(value); fShmNonRtClientControl.writeFloat(value);
fShmNonRtClientControl.commitWrite(); fShmNonRtClientControl.commitWrite();
fShmNonRtClientControl.waitIfDataIsReachingLimit();
} }


CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback); CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback);


+ 3
- 0
source/backend/plugin/CarlaPluginNative.cpp View File

@@ -771,6 +771,9 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,);


if (fDescriptor->idle != nullptr && (fDescriptor->hints & ::NATIVE_PLUGIN_NEEDS_DSP_IDLE) != 0)
fDescriptor->idle(fHandle);

if (fIsUiVisible && fDescriptor->ui_idle != nullptr) if (fIsUiVisible && fDescriptor->ui_idle != nullptr)
fDescriptor->ui_idle(fHandle); fDescriptor->ui_idle(fHandle);




+ 8
- 6
source/includes/CarlaNative.h View File

@@ -58,12 +58,13 @@ typedef enum {
NATIVE_PLUGIN_HAS_UI = 1 << 2, NATIVE_PLUGIN_HAS_UI = 1 << 2,
NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS = 1 << 3, NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS = 1 << 3,
NATIVE_PLUGIN_NEEDS_SINGLE_THREAD = 1 << 4, NATIVE_PLUGIN_NEEDS_SINGLE_THREAD = 1 << 4,
NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE = 1 << 5,
NATIVE_PLUGIN_USES_MULTI_PROGS = 1 << 6, /** has 1 patch per midi channel */
NATIVE_PLUGIN_USES_PANNING = 1 << 7, /** uses stereo balance if unset (default) */
NATIVE_PLUGIN_USES_STATE = 1 << 8,
NATIVE_PLUGIN_USES_TIME = 1 << 9,
NATIVE_PLUGIN_USES_PARENT_ID = 1 << 10 /** can set transient hint to parent */
NATIVE_PLUGIN_NEEDS_DSP_IDLE = 1 << 5,
NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE = 1 << 6,
NATIVE_PLUGIN_USES_MULTI_PROGS = 1 << 7, /** has 1 patch per midi channel */
NATIVE_PLUGIN_USES_PANNING = 1 << 8, /** uses stereo balance if unset (default) */
NATIVE_PLUGIN_USES_STATE = 1 << 9,
NATIVE_PLUGIN_USES_TIME = 1 << 10,
NATIVE_PLUGIN_USES_PARENT_ID = 1 << 11 /** can set transient hint to parent */
} NativePluginHints; } NativePluginHints;


typedef enum { typedef enum {
@@ -220,6 +221,7 @@ typedef struct _NativePluginDescriptor {


NativePluginHandle (*instantiate)(const NativeHostDescriptor* host); NativePluginHandle (*instantiate)(const NativeHostDescriptor* host);
void (*cleanup)(NativePluginHandle handle); void (*cleanup)(NativePluginHandle handle);
void (*idle)(NativePluginHandle handle);


uint32_t (*get_parameter_count)(NativePluginHandle handle); uint32_t (*get_parameter_count)(NativePluginHandle handle);
const NativeParameter* (*get_parameter_info)(NativePluginHandle handle, uint32_t index); const NativeParameter* (*get_parameter_info)(NativePluginHandle handle, uint32_t index);


+ 10
- 0
source/includes/CarlaNative.hpp View File

@@ -208,6 +208,10 @@ protected:
pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_UI_UNAVAILABLE, 0, 0, nullptr, 0.0f); pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_UI_UNAVAILABLE, 0, 0, nullptr, 0.0f);
} }


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

virtual void idle() {}

// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Plugin parameter calls // Plugin parameter calls


@@ -382,6 +386,11 @@ private:
public: public:
#define handlePtr ((NativePluginClass*)handle) #define handlePtr ((NativePluginClass*)handle)


static void _idle(NativePluginHandle handle)
{
handlePtr->idle();
}

static uint32_t _get_parameter_count(NativePluginHandle handle) static uint32_t _get_parameter_count(NativePluginHandle handle)
{ {
return handlePtr->getParameterCount(); return handlePtr->getParameterCount();
@@ -530,6 +539,7 @@ public: \
#define PluginDescriptorFILL(ClassName) \ #define PluginDescriptorFILL(ClassName) \
ClassName::_instantiate, \ ClassName::_instantiate, \
ClassName::_cleanup, \ ClassName::_cleanup, \
ClassName::_idle, \
ClassName::_get_parameter_count, \ ClassName::_get_parameter_count, \
ClassName::_get_parameter_info, \ ClassName::_get_parameter_info, \
ClassName::_get_parameter_value, \ ClassName::_get_parameter_value, \


+ 7
- 1
source/plugin/carla-vst.cpp View File

@@ -184,6 +184,11 @@ public:


switch (opcode) switch (opcode)
{ {
case effIdle:
if (fDescriptor->idle != nullptr)
fDescriptor->idle(fHandle);
break;

case effSetSampleRate: case effSetSampleRate:
if (carla_compareFloats(fSampleRate, static_cast<double>(opt))) if (carla_compareFloats(fSampleRate, static_cast<double>(opt)))
return 0; return 0;
@@ -210,7 +215,8 @@ public:
fMidiEventCount = 0; fMidiEventCount = 0;
carla_zeroStruct<NativeTimeInfo>(fTimeInfo); carla_zeroStruct<NativeTimeInfo>(fTimeInfo);


// tell host we want MIDI events
// tell host we want idle and MIDI events
fAudioMaster(fEffect, audioMasterNeedIdle, 0, 0, nullptr, 0.0f);
fAudioMaster(fEffect, audioMasterWantMidi, 0, 0, nullptr, 0.0f); fAudioMaster(fEffect, audioMasterWantMidi, 0, 0, nullptr, 0.0f);


CARLA_SAFE_ASSERT_BREAK(! fIsActive); CARLA_SAFE_ASSERT_BREAK(! fIsActive);


Loading…
Cancel
Save