Browse Source

Pass midi port to and from bridges

tags/1.9.8
falkTX 8 years ago
parent
commit
b7616519fb
5 changed files with 46 additions and 41 deletions
  1. +0
    -1
      source/backend/engine/CarlaEngine.cpp
  2. +16
    -10
      source/backend/engine/CarlaEngineBridge.cpp
  3. +9
    -12
      source/backend/plugin/CarlaPluginBridge.cpp
  4. +9
    -12
      source/backend/plugin/CarlaPluginJack.cpp
  5. +12
    -6
      source/libjack/libjack.cpp

+ 0
- 1
source/backend/engine/CarlaEngine.cpp View File

@@ -674,7 +674,6 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
#endif

EnginePluginData& pluginData(pData->plugins[id]);
carla_stdout("stored plugin ptr %p", plugin);
pluginData.plugin = plugin;
pluginData.insPeak[0] = 0.0f;
pluginData.insPeak[1] = 0.0f;


+ 16
- 10
source/backend/engine/CarlaEngineBridge.cpp View File

@@ -1208,45 +1208,51 @@ protected:
event.ctrl.convertToMidiData(event.channel, size, data);
CARLA_SAFE_ASSERT_CONTINUE(size > 0 && size <= 3);

if (curMidiDataPos + 1U /* size*/ + 4U /* time */ + size >= kBridgeRtClientDataMidiOutSize)
if (curMidiDataPos + 6U /* time, port and size */ + size >= kBridgeRtClientDataMidiOutSize)
break;

// set size
*midiData++ = size;

// set time
*(uint32_t*)midiData = event.time;
midiData = midiData + 4;

// set port
*midiData++ = 0;

// set size
*midiData++ = size;

// set data
for (uint8_t j=0; j<size; ++j)
*midiData++ = data[j];

curMidiDataPos += 1U /* size*/ + 4U /* time */ + size;
curMidiDataPos += 6U /* time, port and size */ + size;
}
else if (event.type == kEngineEventTypeMidi)
{
const EngineMidiEvent& _midiEvent(event.midi);

if (curMidiDataPos + 1 /* size*/ + 4 /* time */ + _midiEvent.size >= kBridgeRtClientDataMidiOutSize)
if (curMidiDataPos + 6U /* time, port and size */ + _midiEvent.size >= kBridgeRtClientDataMidiOutSize)
break;

const uint8_t* const _midiData(_midiEvent.dataExt != nullptr ? _midiEvent.dataExt : _midiEvent.data);

// set size
*midiData++ = _midiEvent.size;

// set time
*(uint32_t*)midiData = event.time;
midiData += 4;

// set port
*midiData++ = _midiEvent.port;

// set size
*midiData++ = _midiEvent.size;

// set data
*midiData++ = uint8_t(_midiData[0] | (event.channel & MIDI_CHANNEL_BIT));

for (uint8_t j=1; j<_midiEvent.size; ++j)
*midiData++ = _midiData[j];

curMidiDataPos += 1U /* size*/ + 4U /* time */ + _midiEvent.size;
curMidiDataPos += 6U /* time, port and size */ + _midiEvent.size;
}
}



+ 9
- 12
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -1239,26 +1239,23 @@ public:
}
}

uint8_t size;
uint32_t time;
uint8_t port, size;
const uint8_t* midiData(fShmRtClientControl.data->midiOut);

for (std::size_t read=0; read<kBridgeRtClientDataMidiOutSize;)
{
size = *midiData;
// get time
time = *(const uint32_t*)midiData;
midiData += 4;

// get port and size
port = *midiData++;
size = *midiData++;

if (size == 0)
break;

// advance 8 bits (1 byte)
midiData = midiData + 1;

// get time as 32bit
time = *(const uint32_t*)midiData;

// advance 32 bits (4 bytes)
midiData = midiData + 4;

// store midi data advancing as needed
uint8_t data[size];

@@ -1267,7 +1264,7 @@ public:

pData->event.portOut->writeMidiEvent(time, size, data);

read += 1U /* size*/ + 4U /* time */ + size;
read += 6U /* time, port and size */ + size;
}

} // End of Control and MIDI Output


+ 9
- 12
source/backend/plugin/CarlaPluginJack.cpp View File

@@ -835,26 +835,23 @@ public:

if (pData->event.portOut != nullptr)
{
uint8_t size;
uint32_t time;
uint8_t port, size;
const uint8_t* midiData(fShmRtClientControl.data->midiOut);

for (std::size_t read=0; read<kBridgeRtClientDataMidiOutSize;)
{
size = *midiData;
// get time
time = *(const uint32_t*)midiData;
midiData += 4;

// get port and size
port = *midiData++;
size = *midiData++;

if (size == 0)
break;

// advance 8 bits (1 byte)
midiData = midiData + 1;

// get time as 32bit
time = *(const uint32_t*)midiData;

// advance 32 bits (4 bytes)
midiData = midiData + 4;

// store midi data advancing as needed
uint8_t data[size];

@@ -863,7 +860,7 @@ public:

pData->event.portOut->writeMidiEvent(time, size, data);

read += 1U /* size*/ + 4U /* time */ + size;
read += 6U /* time, port and size */ + size;
}

} // End of Control and MIDI Output


+ 12
- 6
source/libjack/libjack.cpp View File

@@ -711,21 +711,24 @@ bool CarlaJackAppClient::handleRtData()
{
jack_midi_event_t& jmevent(midiPortBuf.events[j]);

if (curMidiDataPos + 1U /* size*/ + 4U /* time */ + jmevent.size >= kBridgeRtClientDataMidiOutSize)
if (curMidiDataPos + 6U /* time, port and size */ + jmevent.size >= kBridgeRtClientDataMidiOutSize)
break;

// set size
*midiData++ = static_cast<uint8_t>(jmevent.size);

// set time
*(uint32_t*)midiData = jmevent.time;
midiData += 4;

// set port
*midiData++ = i;

// set size
*midiData++ = static_cast<uint8_t>(jmevent.size);

// set data
std::memcpy(midiData, jmevent.buffer, jmevent.size);
midiData += jmevent.size;

curMidiDataPos += 1U /* size*/ + 4U /* time */ + jmevent.size;
curMidiDataPos += 6U /* time, port and size */ + jmevent.size;
}
}
}
@@ -1087,7 +1090,10 @@ int jack_client_real_time_priority(jack_client_t* client)
{
carla_stdout("%s(%p)", __FUNCTION__, client);

return -1;
// code as used by juce
const int minPriority = sched_get_priority_min(SCHED_RR);
const int maxPriority = sched_get_priority_max(SCHED_RR);
return ((maxPriority - minPriority) * 9) / 10 + minPriority;
}

typedef void (*JackSessionCallback)(jack_session_event_t*, void*);


Loading…
Cancel
Save