18#include "CarlaBridgeUtils.hpp"
19#include "CarlaShmUtils.hpp"
20#include "CarlaTimeUtils.hpp"
23#include "jackbridge/JackBridge.hpp"
25#if defined(CARLA_OS_WIN) && !defined(BUILDING_CARLA_FOR_WINE)
26# define PLUGIN_BRIDGE_NAMEPREFIX_AUDIO_POOL "Local\\carla-bridge_shm_ap_"
27# define PLUGIN_BRIDGE_NAMEPREFIX_RT_CLIENT "Local\\carla-bridge_shm_rtC_"
28# define PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_CLIENT "Local\\carla-bridge_shm_nonrtC_"
29# define PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_SERVER "Local\\carla-bridge_shm_nonrtS_"
31# define PLUGIN_BRIDGE_NAMEPREFIX_AUDIO_POOL "/crlbrdg_shm_ap_"
32# define PLUGIN_BRIDGE_NAMEPREFIX_RT_CLIENT "/crlbrdg_shm_rtC_"
33# define PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_CLIENT "/crlbrdg_shm_nonrtC_"
34# define PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_SERVER "/crlbrdg_shm_nonrtS_"
43 return (
value !=
nullptr);
48BridgeAudioPool::BridgeAudioPool()
noexcept
54 carla_zeroChars(shm, 64);
58BridgeAudioPool::~BridgeAudioPool()
noexcept
66bool BridgeAudioPool::initializeServer()
noexcept
68 char tmpFileBase[64] = {};
71 const carla_shm_t shm2 = carla_shm_create_temp(tmpFileBase);
74 void*
const shmptr = shm;
75 carla_shm_t& shm1 = *(carla_shm_t*)shmptr;
76 carla_copyStruct(shm1, shm2);
83bool BridgeAudioPool::attachClient(
const char*
const basename)
noexcept
98void BridgeAudioPool::clear()
noexcept
120void BridgeAudioPool::resize(
const uint32_t bufferSize,
const uint32_t audioPortCount,
const uint32_t cvPortCount)
noexcept
128 dataSize = (audioPortCount+cvPortCount)*bufferSize*
sizeof(
float);
131 dataSize =
sizeof(float);
136 std::memset(
data, 0, dataSize);
139const char* BridgeAudioPool::getFilenameSuffix()
const noexcept
146 return filename.buffer() + prefixLength;
151BridgeRtClientControl::BridgeRtClientControl()
noexcept
154 needsSemDestroy(
false),
157 carla_zeroChars(shm, 64);
161BridgeRtClientControl::~BridgeRtClientControl()
noexcept
169bool BridgeRtClientControl::initializeServer()
noexcept
171 char tmpFileBase[64] = {};
174 const carla_shm_t shm2 = carla_shm_create_temp(tmpFileBase);
177 void*
const shmptr = shm;
178 carla_shm_t& shm1 = *(carla_shm_t*)shmptr;
179 carla_copyStruct(shm1, shm2);
210 needsSemDestroy =
true;
214bool BridgeRtClientControl::attachClient(
const char*
const basename)
noexcept
229void BridgeRtClientControl::clear()
noexcept
237 needsSemDestroy =
false;
250bool BridgeRtClientControl::mapData()
noexcept
259 std::memset(
data, 0,
sizeof(BridgeRtClientData));
260 setRingBuffer(&
data->ringBuffer,
true);
265 setRingBuffer(&
data->ringBuffer,
false);
274void BridgeRtClientControl::unmapData()
noexcept
283 setRingBuffer(
nullptr,
false);
286bool BridgeRtClientControl::waitForClient(
const uint msecs)
noexcept
297bool BridgeRtClientControl::writeOpcode(
const PluginBridgeRtClientOpcode
opcode)
noexcept
302PluginBridgeRtClientOpcode BridgeRtClientControl::readOpcode()
noexcept
306 return static_cast<PluginBridgeRtClientOpcode
>(readUInt());
309BridgeRtClientControl::WaitHelper::WaitHelper(BridgeRtClientControl&
c)
noexcept
313BridgeRtClientControl::WaitHelper::~WaitHelper()
noexcept
321BridgeNonRtClientControl::BridgeNonRtClientControl()
noexcept
327 carla_zeroChars(shm, 64);
331BridgeNonRtClientControl::~BridgeNonRtClientControl()
noexcept
339bool BridgeNonRtClientControl::initializeServer()
noexcept
341 char tmpFileBase[64] = {};
344 const carla_shm_t shm2 = carla_shm_create_temp(tmpFileBase);
347 void*
const shmptr = shm;
348 carla_shm_t& shm1 = *(carla_shm_t*)shmptr;
349 carla_copyStruct(shm1, shm2);
365bool BridgeNonRtClientControl::attachClient(
const char*
const basename)
noexcept
380void BridgeNonRtClientControl::clear()
noexcept
399bool BridgeNonRtClientControl::mapData()
noexcept
405 setRingBuffer(&
data->ringBuffer, isServer);
412void BridgeNonRtClientControl::unmapData()
noexcept
421 setRingBuffer(
nullptr,
false);
424void BridgeNonRtClientControl::waitIfDataIsReachingLimit()
noexcept
428 if (getWritableDataSize() < BigStackBuffer::size/4)
431 for (
int i=50; --
i >= 0;)
433 if (getWritableDataSize() >= BigStackBuffer::size*3/4)
435 writeOpcode(kPluginBridgeNonRtClientPing);
442 carla_stderr(
"Server waitIfDataIsReachingLimit() reached and failed");
445bool BridgeNonRtClientControl::writeOpcode(
const PluginBridgeNonRtClientOpcode
opcode)
noexcept
452PluginBridgeNonRtClientOpcode BridgeNonRtClientControl::readOpcode()
noexcept
456 return static_cast<PluginBridgeNonRtClientOpcode
>(readUInt());
461BridgeNonRtServerControl::BridgeNonRtServerControl()
noexcept
467 carla_zeroChars(shm, 64);
471BridgeNonRtServerControl::~BridgeNonRtServerControl()
noexcept
479bool BridgeNonRtServerControl::initializeServer()
noexcept
481 char tmpFileBase[64] = {};
484 const carla_shm_t shm2 = carla_shm_create_temp(tmpFileBase);
487 void*
const shmptr = shm;
488 carla_shm_t& shm1 = *(carla_shm_t*)shmptr;
489 carla_copyStruct(shm1, shm2);
505bool BridgeNonRtServerControl::attachClient(
const char*
const basename)
noexcept
520void BridgeNonRtServerControl::clear()
noexcept
537bool BridgeNonRtServerControl::mapData()
noexcept
543 setRingBuffer(&
data->ringBuffer, isServer);
550void BridgeNonRtServerControl::unmapData()
noexcept
559 setRingBuffer(
nullptr,
false);
562PluginBridgeNonRtServerOpcode BridgeNonRtServerControl::readOpcode()
noexcept
566 return static_cast<PluginBridgeNonRtServerOpcode
>(readUInt());
569void BridgeNonRtServerControl::waitIfDataIsReachingLimit()
noexcept
573 if (getWritableDataSize() < HugeStackBuffer::size/4)
576 for (
int i=50; --
i >= 0;)
578 if (getWritableDataSize() >= HugeStackBuffer::size*3/4)
580 writeOpcode(kPluginBridgeNonRtServerPong);
587 carla_stderr(
"Client waitIfDataIsReachingLimit() reached and failed");
590bool BridgeNonRtServerControl::writeOpcode(
const PluginBridgeNonRtServerOpcode
opcode)
noexcept
#define PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_SERVER
Definition CarlaBridgeUtils.cpp:34
#define PLUGIN_BRIDGE_NAMEPREFIX_RT_CLIENT
Definition CarlaBridgeUtils.cpp:32
#define PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_CLIENT
Definition CarlaBridgeUtils.cpp:33
#define PLUGIN_BRIDGE_NAMEPREFIX_AUDIO_POOL
Definition CarlaBridgeUtils.cpp:31
bool jackbridge_shm_map2(void *shm, T *&value) noexcept
Definition CarlaBridgeUtils.cpp:40
#define CARLA_SAFE_ASSERT_RETURN(cond, ret)
Definition CarlaDefines.h:190
unsigned int uint
Definition CarlaDefines.h:327
#define CARLA_SAFE_ASSERT(cond)
Definition CarlaDefines.h:182
pthread_mutex_t mutex
Definition Controller.C:6
#define noexcept
Definition DistrhoDefines.h:72
bool jackbridge_sem_connect(void *sem) noexcept
Definition JackBridge2.cpp:51
bool jackbridge_shm_is_valid(const void *shm) noexcept
Definition JackBridge2.cpp:86
void jackbridge_sem_destroy(void *sem) noexcept
Definition JackBridge2.cpp:42
void jackbridge_shm_close(void *shm) noexcept
Definition JackBridge2.cpp:115
void jackbridge_shm_attach(void *shm, const char *name) noexcept
Definition JackBridge2.cpp:106
void jackbridge_shm_init(void *shm) noexcept
Definition JackBridge2.cpp:97
bool jackbridge_sem_timedwait(void *sem, uint msecs, bool server) noexcept
Definition JackBridge2.cpp:72
void jackbridge_sem_post(void *sem, bool server) noexcept
Definition JackBridge2.cpp:62
void jackbridge_shm_unmap(void *shm, void *ptr) noexcept
Definition JackBridge2.cpp:135
bool jackbridge_sem_init(void *sem) noexcept
Definition JackBridge2.cpp:33
void * jackbridge_shm_map(void *shm, uint64_t size) noexcept
Definition JackBridge2.cpp:124
opcode
Definition Spc_Cpu.h:173
register unsigned i
Definition inflate.c:1575
static char filename[]
Definition features.c:5
static PuglViewHint int value
Definition pugl.h:1708
JSAMPIMAGE data
Definition jpeglib.h:945
unsigned int uint32_t
Definition mid.cpp:100
void clear(void *s)
Definition juce_FixedSizeFunction.h:71
#define false
Definition ordinals.h:83
return c
Definition crypt.c:175
#define const
Definition zconf.h:137