Browse Source

libjack: cleanup midi port code

Signed-off-by: falkTX <falktx@gmail.com>
tags/v2.1-alpha2
falkTX 6 years ago
parent
commit
15f50322f5
Signed by: falkTX <falktx@gmail.com> GPG Key ID: 2D3445A829213837
5 changed files with 101 additions and 85 deletions
  1. +18
    -18
      source/libjack/api.hpp
  2. +13
    -13
      source/libjack/libjack.cpp
  3. +27
    -24
      source/libjack/libjack.hpp
  4. +42
    -29
      source/libjack/libjack_midi.cpp
  5. +1
    -1
      source/libjack/libjack_ports.cpp

+ 18
- 18
source/libjack/api.hpp View File

@@ -27,7 +27,7 @@
extern "C" { extern "C" {


typedef uint32_t jack_port_type_id_t; typedef uint32_t jack_port_type_id_t;
typedef void *(*JackThreadCallback)(void* arg);
typedef void*(*JackThreadCallback)(void* arg);


int jack_carla_interposed_action(int, int, void*); int jack_carla_interposed_action(int, int, void*);


@@ -40,9 +40,9 @@ jack_client_t* jack_client_open(const char*, jack_options_t, jack_status_t*, ...
jack_client_t* jack_client_new(const char*); jack_client_t* jack_client_new(const char*);
int jack_client_close(jack_client_t*); int jack_client_close(jack_client_t*);
int jack_client_name_size(void); int jack_client_name_size(void);
char * jack_get_client_name(jack_client_t*);
char *jack_get_uuid_for_client_name(jack_client_t*, const char*);
char *jack_get_client_name_by_uuid(jack_client_t*, const char*);
char* jack_get_client_name(jack_client_t*);
char* jack_get_uuid_for_client_name(jack_client_t*, const char*);
char* jack_get_client_name_by_uuid(jack_client_t*, const char*);
int jack_internal_client_new(const char*, const char*, const char*); int jack_internal_client_new(const char*, const char*, const char*);
void jack_internal_client_close(const char*); void jack_internal_client_close(const char*);
int jack_activate(jack_client_t*); int jack_activate(jack_client_t*);
@@ -62,7 +62,7 @@ int jack_set_freewheel_callback(jack_client_t*, JackFreewheelCallback, void*);
int jack_set_buffer_size_callback(jack_client_t*, JackBufferSizeCallback, void*); int jack_set_buffer_size_callback(jack_client_t*, JackBufferSizeCallback, void*);
int jack_set_sample_rate_callback(jack_client_t*, JackSampleRateCallback, void*); int jack_set_sample_rate_callback(jack_client_t*, JackSampleRateCallback, void*);
int jack_set_client_registration_callback(jack_client_t*, JackClientRegistrationCallback, void*); int jack_set_client_registration_callback(jack_client_t*, JackClientRegistrationCallback, void*);
int jack_set_port_registration_callback(jack_client_t*, JackPortRegistrationCallback, void*);
int jack_set_port_registration_callback(jack_client_t*, JackPortRegistrationCallback, void*);
int jack_set_port_connect_callback(jack_client_t*, JackPortConnectCallback, void*); int jack_set_port_connect_callback(jack_client_t*, JackPortConnectCallback, void*);
int jack_set_port_rename_callback(jack_client_t*, JackPortRenameCallback, void*); int jack_set_port_rename_callback(jack_client_t*, JackPortRenameCallback, void*);
int jack_set_graph_order_callback(jack_client_t*, JackGraphOrderCallback, void*); int jack_set_graph_order_callback(jack_client_t*, JackGraphOrderCallback, void*);
@@ -74,14 +74,14 @@ jack_nframes_t jack_get_sample_rate(jack_client_t*);
jack_nframes_t jack_get_buffer_size(jack_client_t*); jack_nframes_t jack_get_buffer_size(jack_client_t*);
int jack_engine_takeover_timebase(jack_client_t*); int jack_engine_takeover_timebase(jack_client_t*);
float jack_cpu_load(jack_client_t*); float jack_cpu_load(jack_client_t*);
jack_port_t * jack_port_register(jack_client_t*, const char*, const char*, unsigned long, unsigned long);
jack_port_t* jack_port_register(jack_client_t*, const char*, const char*, unsigned long, unsigned long);
int jack_port_unregister(jack_client_t*, jack_port_t*); int jack_port_unregister(jack_client_t*, jack_port_t*);
void * jack_port_get_buffer(jack_port_t*, jack_nframes_t);
void* jack_port_get_buffer(jack_port_t*, jack_nframes_t);
jack_uuid_t jack_port_uuid(const jack_port_t*); jack_uuid_t jack_port_uuid(const jack_port_t*);
const char * jack_port_name(const jack_port_t*);
const char * jack_port_short_name(const jack_port_t*);
const char* jack_port_name(const jack_port_t*);
const char* jack_port_short_name(const jack_port_t*);
int jack_port_flags(const jack_port_t*); int jack_port_flags(const jack_port_t*);
const char * jack_port_type(const jack_port_t*);
const char* jack_port_type(const jack_port_t*);
jack_port_type_id_t jack_port_type_id(const jack_port_t*); jack_port_type_id_t jack_port_type_id(const jack_port_t*);
int jack_port_is_mine(const jack_client_t*, const jack_port_t*); int jack_port_is_mine(const jack_client_t*, const jack_port_t*);
int jack_port_connected(const jack_port_t*); int jack_port_connected(const jack_port_t*);
@@ -124,11 +124,11 @@ jack_nframes_t jack_time_to_frames(const jack_client_t*, jack_time_t);
jack_time_t jack_get_time(void); jack_time_t jack_get_time(void);
void jack_free(void*); void jack_free(void*);


extern void(*jack_error_callback)(const char *msg);
void jack_set_error_function(void (*func)(const char *));
extern void(*jack_error_callback)(const char*msg);
void jack_set_error_function(void (*func)(const char*));


extern void (*jack_info_callback)(const char *msg);
void jack_set_info_function(void (*func)(const char *));
extern void (*jack_info_callback)(const char*msg);
void jack_set_info_function(void (*func)(const char*));


// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------
// medadata.h // medadata.h
@@ -168,7 +168,7 @@ uint32_t jack_midi_get_lost_event_count(void*);
int jack_client_real_time_priority(jack_client_t*); int jack_client_real_time_priority(jack_client_t*);
int jack_client_max_real_time_priority(jack_client_t*); int jack_client_max_real_time_priority(jack_client_t*);
int jack_acquire_real_time_scheduling(pthread_t, int ); int jack_acquire_real_time_scheduling(pthread_t, int );
int jack_client_create_thread(jack_client_t*, pthread_t*, int, int, void *(*start_routine)(void*), void*);
int jack_client_create_thread(jack_client_t*, pthread_t*, int, int, void*(*start_routine)(void*), void*);
int jack_drop_real_time_scheduling(pthread_t); int jack_drop_real_time_scheduling(pthread_t);
int jack_client_stop_thread(jack_client_t*, pthread_t); int jack_client_stop_thread(jack_client_t*, pthread_t);
int jack_client_kill_thread(jack_client_t*, pthread_t); int jack_client_kill_thread(jack_client_t*, pthread_t);
@@ -222,12 +222,12 @@ jack_uuid_t jack_client_uuid_generate();
jack_uuid_t jack_port_uuid_generate(uint32_t port_id); jack_uuid_t jack_port_uuid_generate(uint32_t port_id);
uint32_t jack_uuid_to_index(jack_uuid_t); uint32_t jack_uuid_to_index(jack_uuid_t);


int jack_uuid_compare(jack_uuid_t, jack_uuid_t);
int jack_uuid_compare(jack_uuid_t, jack_uuid_t);
void jack_uuid_copy(jack_uuid_t* dst, jack_uuid_t src); void jack_uuid_copy(jack_uuid_t* dst, jack_uuid_t src);
void jack_uuid_clear(jack_uuid_t*); void jack_uuid_clear(jack_uuid_t*);
int jack_uuid_parse(const char *buf, jack_uuid_t*);
int jack_uuid_parse(const char*buf, jack_uuid_t*);
void jack_uuid_unparse(jack_uuid_t, char buf[JACK_UUID_STRING_SIZE]); void jack_uuid_unparse(jack_uuid_t, char buf[JACK_UUID_STRING_SIZE]);
int jack_uuid_empty(jack_uuid_t);
int jack_uuid_empty(jack_uuid_t);


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




+ 13
- 13
source/libjack/libjack.cpp View File

@@ -121,8 +121,8 @@ public:
fShmNonRtServerControl(), fShmNonRtServerControl(),
fAudioPoolCopy(nullptr), fAudioPoolCopy(nullptr),
fAudioTmpBuf(nullptr), fAudioTmpBuf(nullptr),
fDummyMidiInBuffer(true, "ignored"),
fDummyMidiOutBuffer(false, "ignored"),
fDummyMidiInBuffer(true),
fDummyMidiOutBuffer(false),
fMidiInBuffers(nullptr), fMidiInBuffers(nullptr),
fMidiOutBuffers(nullptr), fMidiOutBuffers(nullptr),
fIsOffline(false), fIsOffline(false),
@@ -288,10 +288,10 @@ private:
float* fAudioPoolCopy; float* fAudioPoolCopy;
float* fAudioTmpBuf; float* fAudioTmpBuf;


JackMidiPortBuffer fDummyMidiInBuffer;
JackMidiPortBuffer fDummyMidiOutBuffer;
JackMidiPortBuffer* fMidiInBuffers;
JackMidiPortBuffer* fMidiOutBuffers;
JackMidiPortBufferDummy fDummyMidiInBuffer;
JackMidiPortBufferDummy fDummyMidiOutBuffer;
JackMidiPortBufferOnStack* fMidiInBuffers;
JackMidiPortBufferOnStack* fMidiOutBuffers;


char fBaseNameAudioPool[6+1]; char fBaseNameAudioPool[6+1];
char fBaseNameRtClientControl[6+1]; char fBaseNameRtClientControl[6+1];
@@ -561,17 +561,17 @@ bool CarlaJackAppClient::handleRtData()
const uint8_t size(fShmRtClientControl.readByte()); const uint8_t size(fShmRtClientControl.readByte());
CARLA_SAFE_ASSERT_BREAK(size > 0); CARLA_SAFE_ASSERT_BREAK(size > 0);


if (port >= fServer.numMidiIns || size > JackMidiPortBuffer::kMaxEventSize || ! fRealtimeThreadMutex.tryLock())
if (port >= fServer.numMidiIns || size > JackMidiPortBufferBase::kMaxEventSize || ! fRealtimeThreadMutex.tryLock())
{ {
for (uint8_t i=0; i<size; ++i) for (uint8_t i=0; i<size; ++i)
fShmRtClientControl.readByte(); fShmRtClientControl.readByte();
break; break;
} }


JackMidiPortBuffer& midiPortBuf(fMidiInBuffers[port]);
JackMidiPortBufferOnStack& midiPortBuf(fMidiInBuffers[port]);


if (midiPortBuf.count < JackMidiPortBuffer::kMaxEventCount &&
midiPortBuf.bufferPoolPos + size < JackMidiPortBuffer::kBufferPoolSize)
if (midiPortBuf.count < JackMidiPortBufferBase::kMaxEventCount &&
midiPortBuf.bufferPoolPos + size < JackMidiPortBufferBase::kBufferPoolSize)
{ {
jack_midi_event_t& ev(midiPortBuf.events[midiPortBuf.count++]); jack_midi_event_t& ev(midiPortBuf.events[midiPortBuf.count++]);


@@ -822,7 +822,7 @@ bool CarlaJackAppClient::handleRtData()


for (uint8_t i=0; i<fServer.numMidiOuts; ++i) for (uint8_t i=0; i<fServer.numMidiOuts; ++i)
{ {
JackMidiPortBuffer& midiPortBuf(fMidiOutBuffers[i]);
JackMidiPortBufferOnStack& midiPortBuf(fMidiOutBuffers[i]);


for (uint16_t j=0; j<midiPortBuf.count; ++j) for (uint16_t j=0; j<midiPortBuf.count; ++j)
{ {
@@ -1054,7 +1054,7 @@ void CarlaJackAppClient::runNonRealtimeThread()


if (fServer.numMidiIns > 0) if (fServer.numMidiIns > 0)
{ {
fMidiInBuffers = new JackMidiPortBuffer[fServer.numMidiIns];
fMidiInBuffers = new JackMidiPortBufferOnStack[fServer.numMidiIns];


for (uint8_t i=0; i<fServer.numMidiIns; ++i) for (uint8_t i=0; i<fServer.numMidiIns; ++i)
fMidiInBuffers[i].isInput = true; fMidiInBuffers[i].isInput = true;
@@ -1062,7 +1062,7 @@ void CarlaJackAppClient::runNonRealtimeThread()


if (fServer.numMidiOuts > 0) if (fServer.numMidiOuts > 0)
{ {
fMidiOutBuffers = new JackMidiPortBuffer[fServer.numMidiOuts];
fMidiOutBuffers = new JackMidiPortBufferOnStack[fServer.numMidiOuts];


for (uint8_t i=0; i<fServer.numMidiOuts; ++i) for (uint8_t i=0; i<fServer.numMidiOuts; ++i)
fMidiOutBuffers[i].isInput = false; fMidiOutBuffers[i].isInput = false;


+ 27
- 24
source/libjack/libjack.hpp View File

@@ -59,40 +59,43 @@ class CarlaJackAppClient;
struct JackClientState; struct JackClientState;
struct JackServerState; struct JackServerState;


struct JackMidiPortBuffer {
struct JackMidiPortBufferBase {
static const uint8_t kMaxEventSize = 128; static const uint8_t kMaxEventSize = 128;
static const size_t kMaxEventCount = 512; static const size_t kMaxEventCount = 512;
static const size_t kBufferPoolSize = kMaxEventCount*8; static const size_t kBufferPoolSize = kMaxEventCount*8;


uint16_t count;
bool isInput; bool isInput;
jack_midi_event_t* events;
bool isValid;
};


struct JackMidiPortBufferOnStack : JackMidiPortBufferBase {
size_t bufferPoolPos; size_t bufferPoolPos;
jack_midi_data_t* bufferPool;

JackMidiPortBuffer()
: count(0),
isInput(true),
events(new jack_midi_event_t[kMaxEventCount]),
bufferPoolPos(0),
bufferPool(new jack_midi_data_t[kBufferPoolSize]) {}

// for unused ports
JackMidiPortBuffer(const bool input, const char*)
: count(0),
isInput(input),
events(nullptr),
bufferPoolPos(kBufferPoolSize),
bufferPool(nullptr) {}

~JackMidiPortBuffer()
uint16_t count;

jack_midi_event_t events[kMaxEventCount];
jack_midi_data_t bufferPool[kBufferPoolSize];

JackMidiPortBufferOnStack()
: bufferPoolPos(0),
count(0),
events(),
bufferPool()
{
isInput = true;
isValid = true;
}

CARLA_DECLARE_NON_COPY_STRUCT(JackMidiPortBufferOnStack)
};

struct JackMidiPortBufferDummy : JackMidiPortBufferBase {
JackMidiPortBufferDummy(const bool input)
{ {
delete[] events;
delete[] bufferPool;
isInput = input;
isValid = false;
} }


CARLA_DECLARE_NON_COPY_STRUCT(JackMidiPortBuffer)
CARLA_DECLARE_NON_COPY_STRUCT(JackMidiPortBufferDummy)
}; };


struct JackPortState { struct JackPortState {


+ 42
- 29
source/libjack/libjack_midi.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla JACK API for external applications * Carla JACK API for external applications
* Copyright (C) 2016-2017 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2016-2019 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -24,9 +24,12 @@ CARLA_BACKEND_USE_NAMESPACE
CARLA_EXPORT CARLA_EXPORT
jack_nframes_t jack_midi_get_event_count(void* buf) jack_nframes_t jack_midi_get_event_count(void* buf)
{ {
JackMidiPortBuffer* const jmidibuf((JackMidiPortBuffer*)buf);
CARLA_SAFE_ASSERT_RETURN(jmidibuf != nullptr, 0);
CARLA_SAFE_ASSERT_RETURN(jmidibuf->isInput, 0);
const JackMidiPortBufferBase* const jbasebuf((const JackMidiPortBufferBase*)buf);
CARLA_SAFE_ASSERT_RETURN(jbasebuf != nullptr, 0);
CARLA_SAFE_ASSERT_RETURN(jbasebuf->isInput, 0);
CARLA_SAFE_ASSERT_RETURN(jbasebuf->isValid, 0);

const JackMidiPortBufferOnStack* const jmidibuf((const JackMidiPortBufferOnStack*)jbasebuf);


return jmidibuf->count; return jmidibuf->count;
} }
@@ -34,9 +37,12 @@ jack_nframes_t jack_midi_get_event_count(void* buf)
CARLA_EXPORT CARLA_EXPORT
int jack_midi_event_get(jack_midi_event_t* ev, void* buf, uint32_t index) int jack_midi_event_get(jack_midi_event_t* ev, void* buf, uint32_t index)
{ {
JackMidiPortBuffer* const jmidibuf((JackMidiPortBuffer*)buf);
CARLA_SAFE_ASSERT_RETURN(jmidibuf != nullptr, EFAULT);
CARLA_SAFE_ASSERT_RETURN(jmidibuf->isInput, EFAULT);
const JackMidiPortBufferBase* const jbasebuf((const JackMidiPortBufferBase*)buf);
CARLA_SAFE_ASSERT_RETURN(jbasebuf != nullptr, EFAULT);
CARLA_SAFE_ASSERT_RETURN(jbasebuf->isInput, EFAULT);
CARLA_SAFE_ASSERT_RETURN(jbasebuf->isValid, EFAULT);

const JackMidiPortBufferOnStack* const jmidibuf((const JackMidiPortBufferOnStack*)jbasebuf);


if (index >= jmidibuf->count) if (index >= jmidibuf->count)
return ENODATA; return ENODATA;
@@ -48,17 +54,18 @@ int jack_midi_event_get(jack_midi_event_t* ev, void* buf, uint32_t index)
CARLA_EXPORT CARLA_EXPORT
void jack_midi_clear_buffer(void* buf) void jack_midi_clear_buffer(void* buf)
{ {
JackMidiPortBuffer* const jmidibuf((JackMidiPortBuffer*)buf);
CARLA_SAFE_ASSERT_RETURN(jmidibuf != nullptr,);
CARLA_SAFE_ASSERT_RETURN(! jmidibuf->isInput,);
JackMidiPortBufferBase* const jbasebuf((JackMidiPortBufferBase*)buf);
CARLA_SAFE_ASSERT_RETURN(jbasebuf != nullptr,);
CARLA_SAFE_ASSERT_RETURN(! jbasebuf->isInput,);


jmidibuf->count = 0;
if (! jbasebuf->isValid)
return;

JackMidiPortBufferOnStack* const jmidibuf((JackMidiPortBufferOnStack*)jbasebuf);


if (jmidibuf->bufferPool != nullptr)
{
jmidibuf->bufferPoolPos = 0;
std::memset(jmidibuf->bufferPool, 0, JackMidiPortBuffer::kBufferPoolSize);
}
jmidibuf->count = 0;
jmidibuf->bufferPoolPos = 0;
std::memset(jmidibuf->bufferPool, 0, JackMidiPortBufferBase::kBufferPoolSize);
} }


CARLA_EXPORT CARLA_EXPORT
@@ -70,24 +77,27 @@ void jack_midi_reset_buffer(void* buf)
CARLA_EXPORT CARLA_EXPORT
size_t jack_midi_max_event_size(void*) size_t jack_midi_max_event_size(void*)
{ {
return JackMidiPortBuffer::kMaxEventSize;
return JackMidiPortBufferBase::kMaxEventSize;
} }


CARLA_EXPORT CARLA_EXPORT
jack_midi_data_t* jack_midi_event_reserve(void* buf, jack_nframes_t frame, size_t size) jack_midi_data_t* jack_midi_event_reserve(void* buf, jack_nframes_t frame, size_t size)
{ {
JackMidiPortBuffer* const jmidibuf((JackMidiPortBuffer*)buf);
CARLA_SAFE_ASSERT_RETURN(jmidibuf != nullptr, nullptr);
CARLA_SAFE_ASSERT_RETURN(! jmidibuf->isInput, nullptr);
CARLA_SAFE_ASSERT_RETURN(size < JackMidiPortBuffer::kMaxEventSize, nullptr);
JackMidiPortBufferBase* const jbasebuf((JackMidiPortBufferBase*)buf);
CARLA_SAFE_ASSERT_RETURN(jbasebuf != nullptr, nullptr);
CARLA_SAFE_ASSERT_RETURN(! jbasebuf->isInput, nullptr);
CARLA_SAFE_ASSERT_RETURN(jbasebuf->isValid, nullptr);
CARLA_SAFE_ASSERT_RETURN(size < JackMidiPortBufferBase::kMaxEventSize, nullptr);


// broken jack applicatons, wow... // broken jack applicatons, wow...
if (size == 0) if (size == 0)
return nullptr; return nullptr;


if (jmidibuf->count >= JackMidiPortBuffer::kMaxEventCount)
JackMidiPortBufferOnStack* const jmidibuf((JackMidiPortBufferOnStack*)jbasebuf);

if (jmidibuf->count >= JackMidiPortBufferBase::kMaxEventCount)
return nullptr; return nullptr;
if (jmidibuf->bufferPoolPos + size >= JackMidiPortBuffer::kBufferPoolSize)
if (jmidibuf->bufferPoolPos + size >= JackMidiPortBufferBase::kBufferPoolSize)
return nullptr; return nullptr;


jack_midi_data_t* const jmdata = jmidibuf->bufferPool + jmidibuf->bufferPoolPos; jack_midi_data_t* const jmdata = jmidibuf->bufferPool + jmidibuf->bufferPoolPos;
@@ -101,18 +111,21 @@ jack_midi_data_t* jack_midi_event_reserve(void* buf, jack_nframes_t frame, size_
CARLA_EXPORT CARLA_EXPORT
int jack_midi_event_write(void* buf, jack_nframes_t frame, const jack_midi_data_t* data, size_t size) int jack_midi_event_write(void* buf, jack_nframes_t frame, const jack_midi_data_t* data, size_t size)
{ {
JackMidiPortBuffer* const jmidibuf((JackMidiPortBuffer*)buf);
CARLA_SAFE_ASSERT_RETURN(jmidibuf != nullptr, EFAULT);
CARLA_SAFE_ASSERT_RETURN(! jmidibuf->isInput, EINVAL);
CARLA_SAFE_ASSERT_RETURN(size < JackMidiPortBuffer::kMaxEventSize, ENOBUFS);
JackMidiPortBufferBase* const jbasebuf((JackMidiPortBufferBase*)buf);
CARLA_SAFE_ASSERT_RETURN(jbasebuf != nullptr, EFAULT);
CARLA_SAFE_ASSERT_RETURN(! jbasebuf->isInput, EINVAL);
CARLA_SAFE_ASSERT_RETURN(jbasebuf->isValid, EINVAL);
CARLA_SAFE_ASSERT_RETURN(size < JackMidiPortBufferBase::kMaxEventSize, ENOBUFS);


// broken jack applicatons, wow... // broken jack applicatons, wow...
if (size == 0) if (size == 0)
return EINVAL; return EINVAL;


if (jmidibuf->count >= JackMidiPortBuffer::kMaxEventCount)
JackMidiPortBufferOnStack* const jmidibuf((JackMidiPortBufferOnStack*)jbasebuf);

if (jmidibuf->count >= JackMidiPortBufferBase::kMaxEventCount)
return ENOBUFS; return ENOBUFS;
if (jmidibuf->bufferPoolPos + size >= JackMidiPortBuffer::kBufferPoolSize)
if (jmidibuf->bufferPoolPos + size >= JackMidiPortBufferBase::kBufferPoolSize)
return ENOBUFS; return ENOBUFS;


jack_midi_data_t* const jmdata = jmidibuf->bufferPool + jmidibuf->bufferPoolPos; jack_midi_data_t* const jmdata = jmidibuf->bufferPool + jmidibuf->bufferPoolPos;


+ 1
- 1
source/libjack/libjack_ports.cpp View File

@@ -471,7 +471,7 @@ size_t jack_port_type_get_buffer_size(jack_client_t* client, const char* port_ty
CARLA_SAFE_ASSERT_RETURN(port_type != nullptr && port_type[0] != '\0', 0); CARLA_SAFE_ASSERT_RETURN(port_type != nullptr && port_type[0] != '\0', 0);


if (std::strcmp(port_type, JACK_DEFAULT_MIDI_TYPE) == 0) if (std::strcmp(port_type, JACK_DEFAULT_MIDI_TYPE) == 0)
return JackMidiPortBuffer::kMaxEventSize;
return JackMidiPortBufferBase::kMaxEventSize;


return 0; return 0;




Loading…
Cancel
Save