@@ -1190,6 +1190,8 @@ protected: | |||||
} | } | ||||
case kPluginBridgeRtClientProcess: { | case kPluginBridgeRtClientProcess: { | ||||
const uint32_t frames(fShmRtClientControl.readUInt()); | |||||
CARLA_SAFE_ASSERT_BREAK(fShmAudioPool.data != nullptr); | CARLA_SAFE_ASSERT_BREAK(fShmAudioPool.data != nullptr); | ||||
if (plugin != nullptr && plugin->isEnabled() && plugin->tryLock(fIsOffline)) | if (plugin != nullptr && plugin->isEnabled() && plugin->tryLock(fIsOffline)) | ||||
@@ -1240,7 +1242,7 @@ protected: | |||||
} | } | ||||
plugin->initBuffers(); | plugin->initBuffers(); | ||||
plugin->process(audioIn, audioOut, cvIn, cvOut, pData->bufferSize); | |||||
plugin->process(audioIn, audioOut, cvIn, cvOut, frames); | |||||
plugin->unlock(); | plugin->unlock(); | ||||
} | } | ||||
@@ -1494,6 +1494,7 @@ public: | |||||
{ | { | ||||
fShmRtClientControl.writeOpcode(kPluginBridgeRtClientProcess); | fShmRtClientControl.writeOpcode(kPluginBridgeRtClientProcess); | ||||
fShmRtClientControl.writeUInt(frames); | |||||
fShmRtClientControl.commitWrite(); | fShmRtClientControl.commitWrite(); | ||||
} | } | ||||
@@ -967,6 +967,7 @@ public: | |||||
{ | { | ||||
fShmRtClientControl.writeOpcode(kPluginBridgeRtClientProcess); | fShmRtClientControl.writeOpcode(kPluginBridgeRtClientProcess); | ||||
fShmRtClientControl.writeUInt(frames); | |||||
fShmRtClientControl.commitWrite(); | fShmRtClientControl.commitWrite(); | ||||
} | } | ||||
@@ -571,6 +571,11 @@ bool CarlaJackAppClient::handleRtData() | |||||
} | } | ||||
case kPluginBridgeRtClientProcess: { | case kPluginBridgeRtClientProcess: { | ||||
const uint32_t frames(fShmRtClientControl.readUInt()); | |||||
CARLA_SAFE_ASSERT_UINT2_BREAK(frames == fServer.bufferSize, frames, fServer.bufferSize); | |||||
// TODO tell client of xrun in case buffersize does not match | |||||
// FIXME - lock if offline | // FIXME - lock if offline | ||||
const CarlaMutexTryLocker cmtl(fRealtimeThreadMutex); | const CarlaMutexTryLocker cmtl(fRealtimeThreadMutex); | ||||
@@ -20,7 +20,7 @@ | |||||
#include "CarlaRingBuffer.hpp" | #include "CarlaRingBuffer.hpp" | ||||
#define CARLA_PLUGIN_BRIDGE_API_VERSION 4 | |||||
#define CARLA_PLUGIN_BRIDGE_API_VERSION 5 | |||||
// ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
@@ -37,7 +37,7 @@ enum PluginBridgeRtClientOpcode { | |||||
kPluginBridgeRtClientControlEventAllSoundOff, // uint/frame, byte/chan | kPluginBridgeRtClientControlEventAllSoundOff, // uint/frame, byte/chan | ||||
kPluginBridgeRtClientControlEventAllNotesOff, // uint/frame, byte/chan | kPluginBridgeRtClientControlEventAllNotesOff, // uint/frame, byte/chan | ||||
kPluginBridgeRtClientMidiEvent, // uint/frame, byte/port, byte/size, byte[]/data | kPluginBridgeRtClientMidiEvent, // uint/frame, byte/port, byte/size, byte[]/data | ||||
kPluginBridgeRtClientProcess, | |||||
kPluginBridgeRtClientProcess, // uint/frames | |||||
kPluginBridgeRtClientQuit | kPluginBridgeRtClientQuit | ||||
}; | }; | ||||