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