| @@ -35,13 +35,13 @@ CARLA_SHM_UTILS_HPP = $(CWD)/utils/CarlaShmUtils.hpp $(CARLA_UTILS_HPP) | |||||
| # ---------------------------------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------------------------------- | ||||
| # utils (base classes) | # utils (base classes) | ||||
| CARLA_MUTEX_HPP = $(CWD)/utils/CarlaMutex.hpp $(CARLA_UTILS_HPP) | |||||
| CARLA_RING_BUFFER_HPP = $(CWD)/utils/CarlaRingBuffer.hpp $(CARLA_UTILS_HPP) | |||||
| CARLA_STRING_HPP = $(CWD)/utils/CarlaString.hpp $(CARLA_JUCE_UTILS_HPP) | |||||
| CARLA_THREAD_HPP = $(CWD)/utils/CarlaThread.hpp $(CARLA_MUTEX_HPP) $(CARLA_STRING_HPP) | |||||
| LINKED_LIST_HPP = $(CWD)/utils/LinkedList.hpp $(CARLA_UTILS_HPP) | |||||
| LV2_ATOM_QUEUE_HPP = $(CWD)/utils/Lv2AtomQueue.hpp $(CARLA_MATH_UTILS_HPP) $(CARLA_MUTEX_HPP) $(CARLA_RING_BUFFER_HPP) | |||||
| RT_LINKED_LIST_HPP = $(CWD)/utils/RtLinkedList.hpp $(LINKED_LIST_HPP) | |||||
| CARLA_MUTEX_HPP = $(CWD)/utils/CarlaMutex.hpp $(CARLA_UTILS_HPP) | |||||
| CARLA_RING_BUFFER_HPP = $(CWD)/utils/CarlaRingBuffer.hpp $(CARLA_UTILS_HPP) | |||||
| CARLA_STRING_HPP = $(CWD)/utils/CarlaString.hpp $(CARLA_JUCE_UTILS_HPP) | |||||
| CARLA_THREAD_HPP = $(CWD)/utils/CarlaThread.hpp $(CARLA_MUTEX_HPP) $(CARLA_STRING_HPP) | |||||
| LINKED_LIST_HPP = $(CWD)/utils/LinkedList.hpp $(CARLA_UTILS_HPP) | |||||
| LV2_ATOM_RING_BUFFER_HPP = $(CWD)/utils/Lv2AtomRingBuffer.hpp $(CARLA_MATH_UTILS_HPP) $(CARLA_MUTEX_HPP) $(CARLA_RING_BUFFER_HPP) | |||||
| RT_LINKED_LIST_HPP = $(CWD)/utils/RtLinkedList.hpp $(LINKED_LIST_HPP) | |||||
| # ---------------------------------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------------------------------- | ||||
| # utils (plugin stuff) | # utils (plugin stuff) | ||||
| @@ -124,7 +124,7 @@ FLUIDSYNTH_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP | |||||
| JUCE_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) | JUCE_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) | ||||
| LADSPA_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_LADSPA_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) | LADSPA_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_LADSPA_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) | ||||
| LINUXSAMPLER_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) | LINUXSAMPLER_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) | ||||
| LV2_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_LV2_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_PLUGIN_UI_HPP) $(LV2_ATOM_QUEUE_HPP) $(CARLA_ENGINE_OSC_HPP) | |||||
| LV2_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_LV2_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_PLUGIN_UI_HPP) $(LV2_ATOM_RING_BUFFER_HPP) $(CARLA_ENGINE_OSC_HPP) | |||||
| NATIVE_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_NATIVE_H) | NATIVE_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_NATIVE_H) | ||||
| REWIRE_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_LIB_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) | REWIRE_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_LIB_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) | ||||
| VST_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_VST_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_PLUGIN_UI_HPP) | VST_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_VST_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_PLUGIN_UI_HPP) | ||||
| @@ -97,13 +97,13 @@ struct BridgeAudioPool { | |||||
| CARLA_DECLARE_NON_COPY_STRUCT(BridgeAudioPool) | CARLA_DECLARE_NON_COPY_STRUCT(BridgeAudioPool) | ||||
| }; | }; | ||||
| struct BridgeControl : public RingBufferControl<StackBuffer> { | |||||
| struct BridgeControl : public CarlaRingBuffer<StackBuffer> { | |||||
| CarlaString filename; | CarlaString filename; | ||||
| BridgeShmControl* data; | BridgeShmControl* data; | ||||
| char shm[32]; | char shm[32]; | ||||
| BridgeControl() | BridgeControl() | ||||
| : RingBufferControl<StackBuffer>(nullptr), | |||||
| : CarlaRingBuffer<StackBuffer>(), | |||||
| data(nullptr) | data(nullptr) | ||||
| { | { | ||||
| carla_zeroChar(shm, 32); | carla_zeroChar(shm, 32); | ||||
| @@ -376,7 +376,7 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| for (; fShmControl.isDataAvailable();) | |||||
| for (; fShmControl.isDataAvailableForReading();) | |||||
| { | { | ||||
| const PluginBridgeOpcode opcode(fShmControl.readOpcode()); | const PluginBridgeOpcode opcode(fShmControl.readOpcode()); | ||||
| @@ -468,7 +468,7 @@ public: | |||||
| uint8_t data[size]; | uint8_t data[size]; | ||||
| for (int32_t i=0; i < size; ++i) | for (int32_t i=0; i < size; ++i) | ||||
| data[i] = static_cast<uint8_t>(fShmControl.readChar()); | |||||
| data[i] = fShmControl.readUByte(); | |||||
| CARLA_SAFE_ASSERT_BREAK(pData->events.in != nullptr); | CARLA_SAFE_ASSERT_BREAK(pData->events.in != nullptr); | ||||
| @@ -73,7 +73,7 @@ static shm_t shm_mkstemp(char* const fileBase) | |||||
| static const char charSet[] = "abcdefghijklmnopqrstuvwxyz" | static const char charSet[] = "abcdefghijklmnopqrstuvwxyz" | ||||
| "ABCDEFGHIJKLMNOPQRSTUVWXYZ" | "ABCDEFGHIJKLMNOPQRSTUVWXYZ" | ||||
| "0123456789"; | "0123456789"; | ||||
| static const int charSetLen = static_cast<int>(sizeof(charSet) - 1); // -1 to avoid trailing '\0' | |||||
| static const int charSetLen = static_cast<int>(std::strlen(charSet) - 1); // -1 to avoid trailing '\0' | |||||
| // try until getting a valid shm or an error occurs | // try until getting a valid shm or an error occurs | ||||
| for (;;) | for (;;) | ||||
| @@ -146,14 +146,14 @@ struct BridgeAudioPool { | |||||
| CARLA_DECLARE_NON_COPY_STRUCT(BridgeAudioPool) | CARLA_DECLARE_NON_COPY_STRUCT(BridgeAudioPool) | ||||
| }; | }; | ||||
| struct BridgeControl : public RingBufferControl<StackBuffer> { | |||||
| struct BridgeControl : public CarlaRingBuffer<StackBuffer> { | |||||
| CarlaString filename; | CarlaString filename; | ||||
| CarlaMutex lock; | CarlaMutex lock; | ||||
| BridgeShmControl* data; | BridgeShmControl* data; | ||||
| shm_t shm; | shm_t shm; | ||||
| BridgeControl() | BridgeControl() | ||||
| : RingBufferControl<StackBuffer>(nullptr), | |||||
| : CarlaRingBuffer<StackBuffer>(), | |||||
| data(nullptr) | data(nullptr) | ||||
| { | { | ||||
| carla_shm_init(shm); | carla_shm_init(shm); | ||||
| @@ -860,19 +860,19 @@ public: | |||||
| CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); | CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); | ||||
| char data1, data2, data3; | |||||
| data1 = static_cast<char>((note.velo > 0 ? MIDI_STATUS_NOTE_ON : MIDI_STATUS_NOTE_OFF) | (note.channel & MIDI_CHANNEL_BIT)); | |||||
| data2 = static_cast<char>(note.note); | |||||
| data3 = static_cast<char>(note.velo); | |||||
| uint8_t data1, data2, data3; | |||||
| data1 = static_cast<uint8_t>((note.velo > 0 ? MIDI_STATUS_NOTE_ON : MIDI_STATUS_NOTE_OFF) | (note.channel & MIDI_CHANNEL_BIT)); | |||||
| data2 = note.note; | |||||
| data3 = note.velo; | |||||
| const CarlaMutexLocker _cml(fShmControl.lock); | const CarlaMutexLocker _cml(fShmControl.lock); | ||||
| fShmControl.writeOpcode(kPluginBridgeOpcodeMidiEvent); | fShmControl.writeOpcode(kPluginBridgeOpcodeMidiEvent); | ||||
| fShmControl.writeLong(0); | fShmControl.writeLong(0); | ||||
| fShmControl.writeInt(3); | fShmControl.writeInt(3); | ||||
| fShmControl.writeChar(data1); | |||||
| fShmControl.writeChar(data2); | |||||
| fShmControl.writeChar(data3); | |||||
| fShmControl.writeByte(data1); | |||||
| fShmControl.writeByte(data2); | |||||
| fShmControl.writeByte(data3); | |||||
| fShmControl.commitWrite(); | fShmControl.commitWrite(); | ||||
| } | } | ||||
| @@ -1007,9 +1007,9 @@ public: | |||||
| fShmControl.writeOpcode(kPluginBridgeOpcodeMidiEvent); | fShmControl.writeOpcode(kPluginBridgeOpcodeMidiEvent); | ||||
| fShmControl.writeLong(event.time); | fShmControl.writeLong(event.time); | ||||
| fShmControl.writeInt(3); | fShmControl.writeInt(3); | ||||
| fShmControl.writeChar(static_cast<char>(MIDI_STATUS_CONTROL_CHANGE + event.channel)); | |||||
| fShmControl.writeChar(static_cast<char>(ctrlEvent.param)); | |||||
| fShmControl.writeChar(char(ctrlEvent.value*127.0f)); | |||||
| fShmControl.writeByte(static_cast<uint8_t>(MIDI_STATUS_CONTROL_CHANGE + event.channel)); | |||||
| fShmControl.writeByte(static_cast<uint8_t>(ctrlEvent.param)); | |||||
| fShmControl.writeByte(static_cast<uint8_t>(ctrlEvent.value*127.0f)); | |||||
| fShmControl.commitWrite(); | fShmControl.commitWrite(); | ||||
| } | } | ||||
| @@ -1090,12 +1090,6 @@ public: | |||||
| if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) | if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) | ||||
| continue; | continue; | ||||
| char data[4]; | |||||
| data[0] = static_cast<char>(status + channel); | |||||
| for (uint8_t j=0; j < 4; ++j) | |||||
| data[j] = static_cast<char>(midiEvent.data[j]); | |||||
| { | { | ||||
| const CarlaMutexLocker _cml(fShmControl.lock); | const CarlaMutexLocker _cml(fShmControl.lock); | ||||
| @@ -1103,8 +1097,10 @@ public: | |||||
| fShmControl.writeLong(event.time); | fShmControl.writeLong(event.time); | ||||
| fShmControl.writeInt(midiEvent.size); | fShmControl.writeInt(midiEvent.size); | ||||
| for (uint8_t j=0; j < midiEvent.size; ++j) | |||||
| fShmControl.writeChar(data[j]); | |||||
| fShmControl.writeByte(static_cast<uint8_t>(status + channel)); | |||||
| for (uint8_t j=1; j < midiEvent.size; ++j) | |||||
| fShmControl.writeByte(midiEvent.data[j]); | |||||
| fShmControl.commitWrite(); | fShmControl.commitWrite(); | ||||
| } | } | ||||
| @@ -25,9 +25,9 @@ | |||||
| #ifdef WANT_LV2 | #ifdef WANT_LV2 | ||||
| #include "CarlaLv2Utils.hpp" | #include "CarlaLv2Utils.hpp" | ||||
| #include "CarlaMathUtils.hpp" | |||||
| #include "CarlaPluginUi.hpp" | #include "CarlaPluginUi.hpp" | ||||
| #include "Lv2AtomQueue.hpp" | |||||
| #include "Lv2AtomRingBuffer.hpp" | |||||
| #include "../engine/CarlaEngineOsc.hpp" | #include "../engine/CarlaEngineOsc.hpp" | ||||
| @@ -1290,7 +1290,7 @@ public: | |||||
| { | { | ||||
| if (fAtomBufferOut.isDataAvailableForReading()) | if (fAtomBufferOut.isDataAvailableForReading()) | ||||
| { | { | ||||
| char dumpBuf[fAtomBufferOut.getSize()]; | |||||
| uint8_t dumpBuf[fAtomBufferOut.getSize()]; | |||||
| Lv2AtomRingBuffer tmpRingBuffer(fAtomBufferOut, dumpBuf); | Lv2AtomRingBuffer tmpRingBuffer(fAtomBufferOut, dumpBuf); | ||||
| CARLA_SAFE_ASSERT(tmpRingBuffer.isDataAvailableForReading()); | CARLA_SAFE_ASSERT(tmpRingBuffer.isDataAvailableForReading()); | ||||