| @@ -674,7 +674,6 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, | |||||
| #endif | #endif | ||||
| EnginePluginData& pluginData(pData->plugins[id]); | EnginePluginData& pluginData(pData->plugins[id]); | ||||
| carla_stdout("stored plugin ptr %p", plugin); | |||||
| pluginData.plugin = plugin; | pluginData.plugin = plugin; | ||||
| pluginData.insPeak[0] = 0.0f; | pluginData.insPeak[0] = 0.0f; | ||||
| pluginData.insPeak[1] = 0.0f; | pluginData.insPeak[1] = 0.0f; | ||||
| @@ -1208,45 +1208,51 @@ protected: | |||||
| event.ctrl.convertToMidiData(event.channel, size, data); | event.ctrl.convertToMidiData(event.channel, size, data); | ||||
| CARLA_SAFE_ASSERT_CONTINUE(size > 0 && size <= 3); | 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; | break; | ||||
| // set size | |||||
| *midiData++ = size; | |||||
| // set time | // set time | ||||
| *(uint32_t*)midiData = event.time; | *(uint32_t*)midiData = event.time; | ||||
| midiData = midiData + 4; | midiData = midiData + 4; | ||||
| // set port | |||||
| *midiData++ = 0; | |||||
| // set size | |||||
| *midiData++ = size; | |||||
| // set data | // set data | ||||
| for (uint8_t j=0; j<size; ++j) | for (uint8_t j=0; j<size; ++j) | ||||
| *midiData++ = data[j]; | *midiData++ = data[j]; | ||||
| curMidiDataPos += 1U /* size*/ + 4U /* time */ + size; | |||||
| curMidiDataPos += 6U /* time, port and size */ + size; | |||||
| } | } | ||||
| else if (event.type == kEngineEventTypeMidi) | else if (event.type == kEngineEventTypeMidi) | ||||
| { | { | ||||
| const EngineMidiEvent& _midiEvent(event.midi); | 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; | break; | ||||
| const uint8_t* const _midiData(_midiEvent.dataExt != nullptr ? _midiEvent.dataExt : _midiEvent.data); | const uint8_t* const _midiData(_midiEvent.dataExt != nullptr ? _midiEvent.dataExt : _midiEvent.data); | ||||
| // set size | |||||
| *midiData++ = _midiEvent.size; | |||||
| // set time | // set time | ||||
| *(uint32_t*)midiData = event.time; | *(uint32_t*)midiData = event.time; | ||||
| midiData += 4; | midiData += 4; | ||||
| // set port | |||||
| *midiData++ = _midiEvent.port; | |||||
| // set size | |||||
| *midiData++ = _midiEvent.size; | |||||
| // set data | // set data | ||||
| *midiData++ = uint8_t(_midiData[0] | (event.channel & MIDI_CHANNEL_BIT)); | *midiData++ = uint8_t(_midiData[0] | (event.channel & MIDI_CHANNEL_BIT)); | ||||
| for (uint8_t j=1; j<_midiEvent.size; ++j) | for (uint8_t j=1; j<_midiEvent.size; ++j) | ||||
| *midiData++ = _midiData[j]; | *midiData++ = _midiData[j]; | ||||
| curMidiDataPos += 1U /* size*/ + 4U /* time */ + _midiEvent.size; | |||||
| curMidiDataPos += 6U /* time, port and size */ + _midiEvent.size; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1239,26 +1239,23 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| uint8_t size; | |||||
| uint32_t time; | uint32_t time; | ||||
| uint8_t port, size; | |||||
| const uint8_t* midiData(fShmRtClientControl.data->midiOut); | const uint8_t* midiData(fShmRtClientControl.data->midiOut); | ||||
| for (std::size_t read=0; read<kBridgeRtClientDataMidiOutSize;) | 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) | if (size == 0) | ||||
| break; | 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 | // store midi data advancing as needed | ||||
| uint8_t data[size]; | uint8_t data[size]; | ||||
| @@ -1267,7 +1264,7 @@ public: | |||||
| pData->event.portOut->writeMidiEvent(time, size, data); | 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 | } // End of Control and MIDI Output | ||||
| @@ -835,26 +835,23 @@ public: | |||||
| if (pData->event.portOut != nullptr) | if (pData->event.portOut != nullptr) | ||||
| { | { | ||||
| uint8_t size; | |||||
| uint32_t time; | uint32_t time; | ||||
| uint8_t port, size; | |||||
| const uint8_t* midiData(fShmRtClientControl.data->midiOut); | const uint8_t* midiData(fShmRtClientControl.data->midiOut); | ||||
| for (std::size_t read=0; read<kBridgeRtClientDataMidiOutSize;) | 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) | if (size == 0) | ||||
| break; | 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 | // store midi data advancing as needed | ||||
| uint8_t data[size]; | uint8_t data[size]; | ||||
| @@ -863,7 +860,7 @@ public: | |||||
| pData->event.portOut->writeMidiEvent(time, size, data); | 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 | } // End of Control and MIDI Output | ||||
| @@ -711,21 +711,24 @@ bool CarlaJackAppClient::handleRtData() | |||||
| { | { | ||||
| jack_midi_event_t& jmevent(midiPortBuf.events[j]); | 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; | break; | ||||
| // set size | |||||
| *midiData++ = static_cast<uint8_t>(jmevent.size); | |||||
| // set time | // set time | ||||
| *(uint32_t*)midiData = jmevent.time; | *(uint32_t*)midiData = jmevent.time; | ||||
| midiData += 4; | midiData += 4; | ||||
| // set port | |||||
| *midiData++ = i; | |||||
| // set size | |||||
| *midiData++ = static_cast<uint8_t>(jmevent.size); | |||||
| // set data | // set data | ||||
| std::memcpy(midiData, jmevent.buffer, jmevent.size); | std::memcpy(midiData, jmevent.buffer, jmevent.size); | ||||
| midiData += 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); | 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*); | typedef void (*JackSessionCallback)(jack_session_event_t*, void*); | ||||