diff --git a/c++/carla-bridge/Makefile b/c++/carla-bridge/Makefile index f3066b4..309eb41 100644 --- a/c++/carla-bridge/Makefile +++ b/c++/carla-bridge/Makefile @@ -46,7 +46,7 @@ POSIX_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) $(shell pkg-config --libs jack) -ldl WIN_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) -DJACKBRIDGE_EXPORT -DPTW32_STATIC_LIB WIN_32BIT_FLAGS = $(32BIT_FLAGS) WIN_64BIT_FLAGS = $(64BIT_FLAGS) -WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -mwindows -L../carla-jackbridge -lpthread +WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -mwindows -L../carla-jackbridge -lpthread -lwinspool -lole32 -luuid -limm32 -lshell32 -lws2_32 # -------------------------------------------------------------- # UI bridges diff --git a/c++/carla-engine/carla_engine.cpp b/c++/carla-engine/carla_engine.cpp index 03f37cb..5575420 100644 --- a/c++/carla-engine/carla_engine.cpp +++ b/c++/carla-engine/carla_engine.cpp @@ -365,15 +365,12 @@ void CarlaEngineClient::setLatency(const uint32_t samples) CarlaEngine::CarlaEngine() : m_osc(this), - m_thread(this) -#ifdef Q_COMPILER_INITIALIZER_LISTS - , + m_thread(this), m_callbackPtr(nullptr), m_carlaPlugins{nullptr}, m_uniqueNames{nullptr}, m_insPeak{0.0}, m_outsPeak{0.0} -#endif { qDebug("CarlaEngine::CarlaEngine()"); @@ -386,20 +383,6 @@ CarlaEngine::CarlaEngine() m_aboutToClose = false; m_maxPluginNumber = 0; - -#ifndef Q_COMPILER_INITIALIZER_LISTS - for (unsigned short i=0; i < MAX_PLUGINS; i++) - { - m_carlaPlugins[i] = nullptr; - m_uniqueNames[i] = nullptr; - } - - for (unsigned short i=0; i < MAX_PLUGINS * MAX_PEAKS; i++) - { - m_insPeak[i] = 0.0; - m_outsPeak[i] = 0.0; - } -#endif } CarlaEngine::~CarlaEngine() diff --git a/c++/carla-engine/carla_engine.hpp b/c++/carla-engine/carla_engine.hpp index 9496250..8e86c71 100644 --- a/c++/carla-engine/carla_engine.hpp +++ b/c++/carla-engine/carla_engine.hpp @@ -159,12 +159,8 @@ struct CarlaEngineMidiEvent { CarlaEngineMidiEvent() : time(0), -#ifdef Q_COMPILER_INITIALIZER_LISTS size(0), data{0} {} -#else - size(0) { data[0] = data[1] = data[2] = 0; } -#endif }; /*! diff --git a/c++/carla-includes/carla_defines.hpp b/c++/carla-includes/carla_defines.hpp index da71d25..6bb0a9d 100644 --- a/c++/carla-includes/carla_defines.hpp +++ b/c++/carla-includes/carla_defines.hpp @@ -1,6 +1,6 @@ /* * Carla common defines - * Copyright (C) 2011-2012 Filipe Coelho + * Copyright (C) 2011-2013 Filipe Coelho * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,22 +15,11 @@ * For a full copy of the GNU General Public License see the COPYING file */ -#ifndef CARLA_DEFINES_HPP -#define CARLA_DEFINES_HPP - -//#ifdef __WINE__ -//# define Q_CORE_EXPORT -//# define Q_GUI_EXPORT -//# define QT_NO_STL -//#endif +#ifndef __CARLA_DEFINES_HPP__ +#define __CARLA_DEFINES_HPP__ #include -// TESTING - remove later (QtCreator doesn't fully support this yet) -#ifdef QTCREATOR_TEST -# undef Q_COMPILER_INITIALIZER_LISTS -#endif - // If the compiler can't do C++11 lambdas, it most likely doesn't know about nullptr either #ifndef Q_COMPILER_LAMBDA # define nullptr (0) @@ -84,7 +73,7 @@ # define BINARY_NATIVE BINARY_WIN32 # endif #else -# warning Unknown binary type +# warning Unknown binary native # define BINARY_NATIVE BINARY_OTHER #endif @@ -108,4 +97,4 @@ # endif #endif -#endif // CARLA_DEFINES_HPP +#endif // __CARLA_DEFINES_HPP__ diff --git a/c++/carla-includes/carla_midi.h b/c++/carla-includes/carla_midi.h index b322fc6..83f99e3 100644 --- a/c++/carla-includes/carla_midi.h +++ b/c++/carla-includes/carla_midi.h @@ -15,8 +15,8 @@ * For a full copy of the GNU General Public License see the COPYING file */ -#ifndef CARLA_MIDI_H -#define CARLA_MIDI_H +#ifndef __CARLA_MIDI_H__ +#define __CARLA_MIDI_H__ #define MAX_MIDI_CHANNELS 16 @@ -135,4 +135,4 @@ #define MIDI_IS_CONTROL_EFFECT_CONTROL_1(control) ((control) == MIDI_CONTROL_EFFECT_CONTROL_1 || (control) == MIDI_CONTROL_EFFECT_CONTROL_1__LSB) #define MIDI_IS_CONTROL_EFFECT_CONTROL_2(control) ((control) == MIDI_CONTROL_EFFECT_CONTROL_2 || (control) == MIDI_CONTROL_EFFECT_CONTROL_2__LSB) -#endif // CARLA_MIDI_H +#endif // __CARLA_MIDI_H__ diff --git a/c++/carla-includes/lv2_atom_queue.hpp b/c++/carla-includes/lv2_atom_queue.hpp index 624b080..eb2d959 100644 --- a/c++/carla-includes/lv2_atom_queue.hpp +++ b/c++/carla-includes/lv2_atom_queue.hpp @@ -15,18 +15,20 @@ * For a full copy of the GNU General Public License see the COPYING file */ -#ifndef LV2_ATOM_QUEUE_HPP -#define LV2_ATOM_QUEUE_HPP +#ifndef __LV2_ATOM_QUEUE_HPP__ +#define __LV2_ATOM_QUEUE_HPP__ +#include "carla_utils.hpp" #include "lv2/atom.h" -#include // memset -#include +#include // memcpy, memset +#include class Lv2AtomQueue { public: Lv2AtomQueue() + : mutex(PTHREAD_MUTEX_INITIALIZER) { index = indexPool = 0; empty = true; @@ -38,8 +40,8 @@ public: void copyDataFrom(Lv2AtomQueue* const queue) { // lock mutexes - queue->mutex.lock(); - mutex.lock(); + queue->lock(); + lock(); // copy data from queue ::memcpy(data, queue->data, sizeof(datatype)*MAX_SIZE); @@ -50,7 +52,7 @@ public: full = queue->full; // unlock our mutex, no longer needed - mutex.unlock(); + unlock(); // reset queque ::memset(queue->data, 0, sizeof(datatype)*MAX_SIZE); @@ -60,7 +62,7 @@ public: queue->full = false; // unlock queque mutex - queue->mutex.unlock(); + queue->unlock(); } bool isEmpty() @@ -73,17 +75,22 @@ public: return full; } - void lock() + bool lock() { - mutex.lock(); + return (pthread_mutex_lock(&mutex) == 0); } - void unlock() + bool tryLock() { - mutex.unlock(); + return (pthread_mutex_trylock(&mutex) == 0); } - void put(const uint32_t portIndex, const LV2_Atom* const atom, const bool lock = true) + bool unlock() + { + return (pthread_mutex_unlock(&mutex) == 0); + } + + void put(const uint32_t portIndex, const LV2_Atom* const atom) { CARLA_ASSERT(atom && atom->size > 0); CARLA_ASSERT(indexPool + atom->size < MAX_POOL_SIZE); // overflow @@ -91,8 +98,7 @@ public: if (full || atom->size == 0 || indexPool + atom->size >= MAX_POOL_SIZE) return; - if (lock) - mutex.lock(); + lock(); for (unsigned short i=0; i < MAX_SIZE; i++) { @@ -110,19 +116,18 @@ public: } } - if (lock) - mutex.unlock(); + unlock(); } - bool get(uint32_t* const portIndex, const LV2_Atom** const atom, const bool lock = true) + bool get(uint32_t* const portIndex, const LV2_Atom** const atom) { CARLA_ASSERT(portIndex && atom); if (empty || ! (portIndex && atom)) return false; - if (lock) - mutex.lock(); + if (! tryLock()) + return false; full = false; @@ -131,9 +136,7 @@ public: index = indexPool = 0; empty = true; - if (lock) - mutex.unlock(); - + unlock(); return false; } @@ -151,9 +154,7 @@ public: index++; empty = false; - if (lock) - mutex.unlock(); - + unlock(); return true; } @@ -185,7 +186,7 @@ private: unsigned short index, indexPool; bool empty, full; - QMutex mutex; + pthread_mutex_t mutex; }; -#endif // LV2_ATOM_QUEUE_HPP +#endif // __LV2_ATOM_QUEUE_HPP__ diff --git a/c++/carla-includes/lv2_rdf.hpp b/c++/carla-includes/lv2_rdf.hpp index 5d267e9..f715ce9 100644 --- a/c++/carla-includes/lv2_rdf.hpp +++ b/c++/carla-includes/lv2_rdf.hpp @@ -1,6 +1,6 @@ /* * Custom types to store LV2 information - * Copyright (C) 2011-2012 Filipe Coelho + * Copyright (C) 2011-2013 Filipe Coelho * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,18 +18,15 @@ #ifndef LV2_RDF_INCLUDED #define LV2_RDF_INCLUDED -// TODO - presets - #include #include // Base Types typedef const char* LV2_URI; typedef uint32_t LV2_Property; -typedef unsigned long long LV2_PluginType; struct LV2_Type { - LV2_Property Value; //... + LV2_Property Value; LV2_URI URI; LV2_Type() @@ -209,11 +206,6 @@ struct LV2_Type { #define LV2_IS_PORT_DESIGNATION_TIME_SPEED(x) ((x) == LV2_PORT_DESIGNATION_TIME_SPEED) #define LV2_IS_PORT_DESIGNATION_TIME(x) ((x) >= LV2_PORT_DESIGNATION_TIME_BAR && (x) <= LV2_PORT_DESIGNATION_TIME_SPEED) -// Preset State Types (TODO: Null is not a type, this is just a placeholder) -#define LV2_PRESET_STATE_NULL 0x0 - -#define LV2_IS_PRESET_STATE_NULL(x) ((x) == LV2_PRESET_STATE_NULL) - // Feature Types #define LV2_FEATURE_OPTIONAL 0x1 #define LV2_FEATURE_REQUIRED 0x2 @@ -243,47 +235,49 @@ struct LV2_Type { #define LV2_IS_UI_OLD_EXTERNAL(x) ((x) == LV2_UI_OLD_EXTERNAL) // Plugin Types -#define LV2_PLUGIN_ALLPASS 0x000000001LL -#define LV2_PLUGIN_AMPLIFIER 0x000000002LL -#define LV2_PLUGIN_ANALYSER 0x000000004LL -#define LV2_PLUGIN_BANDPASS 0x000000008LL -#define LV2_PLUGIN_CHORUS 0x000000010LL -#define LV2_PLUGIN_COMB 0x000000020LL -#define LV2_PLUGIN_COMPRESSOR 0x000000040LL -#define LV2_PLUGIN_CONSTANT 0x000000080LL -#define LV2_PLUGIN_CONVERTER 0x000000100LL -#define LV2_PLUGIN_DELAY 0x000000200LL -#define LV2_PLUGIN_DISTORTION 0x000000400LL -#define LV2_PLUGIN_DYNAMICS 0x000000800LL -#define LV2_PLUGIN_EQ 0x000001000LL -#define LV2_PLUGIN_EXPANDER 0x000002000LL -#define LV2_PLUGIN_FILTER 0x000004000LL -#define LV2_PLUGIN_FLANGER 0x000008000LL -#define LV2_PLUGIN_FUNCTION 0x000010000LL -#define LV2_PLUGIN_GATE 0x000020000LL -#define LV2_PLUGIN_GENERATOR 0x000040000LL -#define LV2_PLUGIN_HIGHPASS 0x000080000LL -#define LV2_PLUGIN_INSTRUMENT 0x000100000LL -#define LV2_PLUGIN_LIMITER 0x000200000LL -#define LV2_PLUGIN_LOWPASS 0x000400000LL -#define LV2_PLUGIN_MIXER 0x000800000LL -#define LV2_PLUGIN_MODULATOR 0x001000000LL -#define LV2_PLUGIN_MULTI_EQ 0x002000000LL -#define LV2_PLUGIN_OSCILLATOR 0x004000000LL -#define LV2_PLUGIN_PARA_EQ 0x008000000LL -#define LV2_PLUGIN_PHASER 0x010000000LL -#define LV2_PLUGIN_PITCH 0x020000000LL -#define LV2_PLUGIN_REVERB 0x040000000LL -#define LV2_PLUGIN_SIMULATOR 0x080000000LL -#define LV2_PLUGIN_SPATIAL 0x100000000LL -#define LV2_PLUGIN_SPECTRAL 0x200000000LL -#define LV2_PLUGIN_UTILITY 0x400000000LL -#define LV2_PLUGIN_WAVESHAPER 0x800000000LL +#define LV2_PLUGIN_DELAY 0x000001 +#define LV2_PLUGIN_REVERB 0x000002 +#define LV2_PLUGIN_SIMULATOR 0x000004 +#define LV2_PLUGIN_DISTORTION 0x000008 +#define LV2_PLUGIN_WAVESHAPER 0x000010 +#define LV2_PLUGIN_DYNAMICS 0x000020 +#define LV2_PLUGIN_AMPLIFIER 0x000040 +#define LV2_PLUGIN_COMPRESSOR 0x000080 +#define LV2_PLUGIN_ENVELOPE 0x000100 +#define LV2_PLUGIN_EXPANDER 0x000200 +#define LV2_PLUGIN_GATE 0x000400 +#define LV2_PLUGIN_LIMITER 0x000800 +#define LV2_PLUGIN_EQ 0x001000 +#define LV2_PLUGIN_MULTI_EQ 0x002000 +#define LV2_PLUGIN_PARA_EQ 0x004000 +#define LV2_PLUGIN_FILTER 0x008000 +#define LV2_PLUGIN_ALLPASS 0x010000 +#define LV2_PLUGIN_BANDPASS 0x020000 +#define LV2_PLUGIN_COMB 0x040000 +#define LV2_PLUGIN_HIGHPASS 0x080000 +#define LV2_PLUGIN_LOWPASS 0x100000 + +#define LV2_PLUGIN_GENERATOR 0x000001 +#define LV2_PLUGIN_CONSTANT 0x000002 +#define LV2_PLUGIN_INSTRUMENT 0x000004 +#define LV2_PLUGIN_OSCILLATOR 0x000008 +#define LV2_PLUGIN_MODULATOR 0x000010 +#define LV2_PLUGIN_CHORUS 0x000020 +#define LV2_PLUGIN_FLANGER 0x000040 +#define LV2_PLUGIN_PHASER 0x000080 +#define LV2_PLUGIN_SPATIAL 0x000100 +#define LV2_PLUGIN_SPECTRAL 0x000200 +#define LV2_PLUGIN_PITCH 0x000400 +#define LV2_PLUGIN_UTILITY 0x000800 +#define LV2_PLUGIN_ANALYSER 0x001000 +#define LV2_PLUGIN_CONVERTER 0x002000 +#define LV2_PLUGIN_FUNCTION 0x008000 +#define LV2_PLUGIN_MIXER 0x010000 #define LV2_GROUP_DELAY (LV2_PLUGIN_DELAY|LV2_PLUGIN_REVERB) #define LV2_GROUP_DISTORTION (LV2_PLUGIN_DISTORTION|LV2_PLUGIN_WAVESHAPER) -#define LV2_GROUP_DYNAMICS (LV2_PLUGIN_DYNAMICS|LV2_PLUGIN_AMPLIFIER|LV2_PLUGIN_COMPRESSOR|LV2_PLUGIN_EXPANDER|LV2_PLUGIN_GATE|LV2_PLUGIN_LIMITER) -#define LV2_GROUP_EQ (LV2_PLUGIN_EQ|LV2_PLUGIN_PARA_EQ|LV2_PLUGIN_MULTI_EQ) +#define LV2_GROUP_DYNAMICS (LV2_PLUGIN_DYNAMICS|LV2_PLUGIN_AMPLIFIER|LV2_PLUGIN_COMPRESSOR|LV2_PLUGIN_ENVELOPE|LV2_PLUGIN_EXPANDER|LV2_PLUGIN_GATE|LV2_PLUGIN_LIMITER) +#define LV2_GROUP_EQ (LV2_PLUGIN_EQ|LV2_PLUGIN_MULTI_EQ|LV2_PLUGIN_PARA_EQ) #define LV2_GROUP_FILTER (LV2_PLUGIN_FILTER|LV2_PLUGIN_ALLPASS|LV2_PLUGIN_BANDPASS|LV2_PLUGIN_COMB|LV2_GROUP_EQ|LV2_PLUGIN_HIGHPASS|LV2_PLUGIN_LOWPASS) #define LV2_GROUP_GENERATOR (LV2_PLUGIN_GENERATOR|LV2_PLUGIN_CONSTANT|LV2_PLUGIN_INSTRUMENT|LV2_PLUGIN_OSCILLATOR) #define LV2_GROUP_MODULATOR (LV2_PLUGIN_MODULATOR|LV2_PLUGIN_CHORUS|LV2_PLUGIN_FLANGER|LV2_PLUGIN_PHASER) @@ -293,18 +287,18 @@ struct LV2_Type { #define LV2_GROUP_SPECTRAL (LV2_PLUGIN_SPECTRAL|LV2_PLUGIN_PITCH) #define LV2_GROUP_UTILITY (LV2_PLUGIN_UTILITY|LV2_PLUGIN_ANALYSER|LV2_PLUGIN_CONVERTER|LV2_PLUGIN_FUNCTION|LV2_PLUGIN_MIXER) -#define LV2_IS_DELAY(x) ((x) & LV2_GROUP_DELAY) -#define LV2_IS_DISTORTION(x) ((x) & LV2_GROUP_DISTORTION) -#define LV2_IS_DYNAMICS(x) ((x) & LV2_GROUP_DYNAMICS) -#define LV2_IS_EQ(x) ((x) & LV2_GROUP_EQ) -#define LV2_IS_FILTER(x) ((x) & LV2_GROUP_FILTER) -#define LV2_IS_GENERATOR(x) ((x) & LV2_GROUP_GENERATOR) -#define LV2_IS_MODULATOR(x) ((x) & LV2_GROUP_MODULATOR) -#define LV2_IS_REVERB(x) ((x) & LV2_GROUP_REVERB) -#define LV2_IS_SIMULATOR(x) ((x) & LV2_GROUP_SIMULATOR) -#define LV2_IS_SPATIAL(x) ((x) & LV2_GROUP_SPATIAL) -#define LV2_IS_SPECTRAL(x) ((x) & LV2_GROUP_SPECTRAL) -#define LV2_IS_UTILITY(x) ((x) & LV2_GROUP_UTILITY) +#define LV2_IS_DELAY(x, y) (((x) & LV2_GROUP_DELAY) || ((y) & LV2_GROUP_DELAY)) +#define LV2_IS_DISTORTION(x, y) (((x) & LV2_GROUP_DISTORTION) || ((y) & LV2_GROUP_DISTORTION)) +#define LV2_IS_DYNAMICS(x, y) (((x) & LV2_GROUP_DYNAMICS) || ((y) & LV2_GROUP_DYNAMICS)) +#define LV2_IS_EQ(x, y) (((x) & LV2_GROUP_EQ) || ((y) & LV2_GROUP_EQ)) +#define LV2_IS_FILTER(x, y) (((x) & LV2_GROUP_FILTER) || ((y) & LV2_GROUP_FILTER)) +#define LV2_IS_GENERATOR(x, y) (((x) & LV2_GROUP_GENERATOR) || ((y) & LV2_GROUP_GENERATOR)) +#define LV2_IS_MODULATOR(x, y) (((x) & LV2_GROUP_MODULATOR) || ((y) & LV2_GROUP_MODULATOR)) +#define LV2_IS_REVERB(x, y) (((x) & LV2_GROUP_REVERB) || ((y) & LV2_GROUP_REVERB)) +#define LV2_IS_SIMULATOR(x, y) (((x) & LV2_GROUP_SIMULATOR) || ((y) & LV2_GROUP_SIMULATOR)) +#define LV2_IS_SPATIAL(x, y) (((x) & LV2_GROUP_SPATIAL) || ((y) & LV2_GROUP_SPATIAL)) +#define LV2_IS_SPECTRAL(x, y) (((x) & LV2_GROUP_SPECTRAL) || ((y) & LV2_GROUP_SPECTRAL)) +#define LV2_IS_UTILITY(x, y) (((x) & LV2_GROUP_UTILITY) || ((y) & LV2_GROUP_UTILITY)) // Port Midi Map struct LV2_RDF_PortMidiMap { @@ -376,7 +370,7 @@ struct LV2_RDF_PortScalePoint { // Port struct LV2_RDF_Port { - LV2_Type Type; + LV2_Property Types; LV2_Property Properties; LV2_Property Designation; const char* Name; @@ -390,7 +384,8 @@ struct LV2_RDF_Port { LV2_RDF_PortScalePoint* ScalePoints; LV2_RDF_Port() - : Properties(0x0), + : Types(0x0), + Properties(0x0), Designation(0), Name(nullptr), Symbol(nullptr), @@ -410,59 +405,14 @@ struct LV2_RDF_Port { } }; -// Preset Port -struct LV2_RDF_PresetPort { - const char* Symbol; - float Value; - - LV2_RDF_PresetPort() - : Symbol(nullptr), - Value(0.0f) {} - - ~LV2_RDF_PresetPort() - { - if (Symbol) - ::free((void*)Symbol); - } -}; - -// Preset State -struct LV2_RDF_PresetState { - LV2_Property Type; - const char* Key; - union { - // TODO - } Value; - - LV2_RDF_PresetState() - : Type(0), - Key(nullptr) {} - - ~LV2_RDF_PresetState() - { - if (Key) - ::free((void*)Key); - } -}; - // Preset struct LV2_RDF_Preset { LV2_URI URI; const char* Label; - uint32_t PortCount; - LV2_RDF_PresetPort* Ports; - - uint32_t StateCount; - LV2_RDF_PresetState* States; - LV2_RDF_Preset() : URI(nullptr), - Label(nullptr), - PortCount(0), - Ports(nullptr), - StateCount(0), - States(nullptr) {} + Label(nullptr) {} ~LV2_RDF_Preset() { @@ -471,12 +421,6 @@ struct LV2_RDF_Preset { if (Label) ::free((void*)Label); - - if (Ports) - delete[] Ports; - - if (States) - delete[] States; } }; @@ -539,7 +483,7 @@ struct LV2_RDF_UI { // Plugin struct LV2_RDF_Descriptor { - LV2_PluginType Type; + LV2_Property Type[2]; LV2_URI URI; const char* Name; const char* Author; @@ -564,7 +508,7 @@ struct LV2_RDF_Descriptor { LV2_RDF_UI* UIs; LV2_RDF_Descriptor() - : Type(0x0), + : Type{0x0, 0x0}, URI(nullptr), Name(nullptr), Author(nullptr), diff --git a/c++/carla-plugin/carla_plugin.cpp b/c++/carla-plugin/carla_plugin.cpp index da973ec..8725783 100644 --- a/c++/carla-plugin/carla_plugin.cpp +++ b/c++/carla-plugin/carla_plugin.cpp @@ -223,8 +223,10 @@ uint32_t CarlaPlugin::parameterCount() const uint32_t CarlaPlugin::parameterScalePointCount(const uint32_t parameterId) { CARLA_ASSERT(parameterId < param.count); - return 0; + + // unused + Q_UNUSED(parameterId); } uint32_t CarlaPlugin::programCount() const @@ -308,8 +310,10 @@ const CustomData* CarlaPlugin::customData(const size_t index) const int32_t CarlaPlugin::chunkData(void** const dataPtr) { CARLA_ASSERT(dataPtr); - return 0; + + // unused + Q_UNUSED(dataPtr); } // ------------------------------------------------------------------- @@ -318,16 +322,21 @@ int32_t CarlaPlugin::chunkData(void** const dataPtr) double CarlaPlugin::getParameterValue(const uint32_t parameterId) { CARLA_ASSERT(parameterId < param.count); - return 0.0; + + // unused + Q_UNUSED(parameterId); } double CarlaPlugin::getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) { CARLA_ASSERT(parameterId < param.count); CARLA_ASSERT(scalePointId < parameterScalePointCount(parameterId)); - return 0.0; + + // unused + Q_UNUSED(parameterId); + Q_UNUSED(scalePointId); } void CarlaPlugin::getLabel(char* const strBuf) @@ -353,37 +362,53 @@ void CarlaPlugin::getRealName(char* const strBuf) void CarlaPlugin::getParameterName(const uint32_t parameterId, char* const strBuf) { CARLA_ASSERT(parameterId < param.count); - *strBuf = 0; + return; + + // unused + Q_UNUSED(parameterId); } void CarlaPlugin::getParameterSymbol(const uint32_t parameterId, char* const strBuf) { CARLA_ASSERT(parameterId < param.count); - *strBuf = 0; + return; + + // unused + Q_UNUSED(parameterId); } void CarlaPlugin::getParameterText(const uint32_t parameterId, char* const strBuf) { CARLA_ASSERT(parameterId < param.count); - *strBuf = 0; + return; + + // unused + Q_UNUSED(parameterId); } void CarlaPlugin::getParameterUnit(const uint32_t parameterId, char* const strBuf) { CARLA_ASSERT(parameterId < param.count); - *strBuf = 0; + return; + + // unused + Q_UNUSED(parameterId); } void CarlaPlugin::getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) { CARLA_ASSERT(parameterId < param.count); CARLA_ASSERT(scalePointId < parameterScalePointCount(parameterId)); - *strBuf = 0; + return; + + // unused + Q_UNUSED(parameterId); + Q_UNUSED(scalePointId); } void CarlaPlugin::getProgramName(const uint32_t index, char* const strBuf) @@ -408,6 +433,13 @@ void CarlaPlugin::getMidiProgramName(const uint32_t index, char* const strBuf) void CarlaPlugin::getParameterCountInfo(uint32_t* const ins, uint32_t* const outs, uint32_t* const total) { + CARLA_ASSERT(ins); + CARLA_ASSERT(outs); + CARLA_ASSERT(total); + + if (! (ins && outs && total)) + return; + *ins = 0; *outs = 0; *total = param.count; @@ -423,6 +455,12 @@ void CarlaPlugin::getParameterCountInfo(uint32_t* const ins, uint32_t* const out void CarlaPlugin::getGuiInfo(GuiType* const type, bool* const resizable) { + CARLA_ASSERT(type); + CARLA_ASSERT(resizable); + + if (! (type && resizable)) + return; + *type = GUI_NONE; *resizable = false; } @@ -714,6 +752,10 @@ void CarlaPlugin::setCustomData(const char* const type, const char* const key, c void CarlaPlugin::setChunkData(const char* const stringData) { CARLA_ASSERT(stringData); + return; + + // unused + Q_UNUSED(stringData); } void CarlaPlugin::setProgram(int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool block) @@ -1339,6 +1381,9 @@ void CarlaPlugin::postEventsRun() void CarlaPlugin::postEventHandleCustom(const int32_t value1, const int32_t value2, const double value3, const void* const cdata) { + return; + + // unused Q_UNUSED(value1); Q_UNUSED(value2); Q_UNUSED(value3); @@ -1348,18 +1393,29 @@ void CarlaPlugin::postEventHandleCustom(const int32_t value1, const int32_t valu void CarlaPlugin::uiParameterChange(const uint32_t index, const double value) { CARLA_ASSERT(index < param.count); + return; + // unused + Q_UNUSED(index); Q_UNUSED(value); } void CarlaPlugin::uiProgramChange(const uint32_t index) { CARLA_ASSERT(index < prog.count); + return; + + // unused + Q_UNUSED(index); } void CarlaPlugin::uiMidiProgramChange(const uint32_t index) { CARLA_ASSERT(index < midiprog.count); + return; + + // unused + Q_UNUSED(index); } void CarlaPlugin::uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) @@ -1367,12 +1423,23 @@ void CarlaPlugin::uiNoteOn(const uint8_t channel, const uint8_t note, const uint CARLA_ASSERT(channel < 16); CARLA_ASSERT(note < 128); CARLA_ASSERT(velo > 0 && velo < 128); + return; + + // unused + Q_UNUSED(channel); + Q_UNUSED(note); + Q_UNUSED(velo); } void CarlaPlugin::uiNoteOff(const uint8_t channel, const uint8_t note) { CARLA_ASSERT(channel < 16); CARLA_ASSERT(note < 128); + return; + + // unused + Q_UNUSED(channel); + Q_UNUSED(note); } // ------------------------------------------------------------------- diff --git a/c++/carla-plugin/carla_plugin.pro b/c++/carla-plugin/carla_plugin.pro index 22bfd50..450b767 100644 --- a/c++/carla-plugin/carla_plugin.pro +++ b/c++/carla-plugin/carla_plugin.pro @@ -2,9 +2,9 @@ QT = core gui -CONFIG = debug -CONFIG += static +#CONFIG = debug CONFIG += link_pkgconfig qt warn_on +CONFIG += dll shared DEFINES = DEBUG DEFINES += QTCREATOR_TEST @@ -13,15 +13,17 @@ DEFINES += QTCREATOR_TEST DEFINES += WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST # Samplers -DEFINES += WANT_FLUIDSYNTH WANT_LINUXSAMPLER +DEFINES += WANT_FLUIDSYNTH +# WANT_LINUXSAMPLER # ZynAddSubFX DEFINES += WANT_ZYNADDSUBFX # Misc -DEFINES += WANT_SUIL +#DEFINES += WANT_SUIL -PKGCONFIG = liblo suil-0 fluidsynth linuxsampler +PKGCONFIG = liblo fluidsynth +#suil-0 linuxsampler TARGET = carla_plugin TEMPLATE = lib diff --git a/c++/carla-plugin/carla_plugin_thread.cpp b/c++/carla-plugin/carla_plugin_thread.cpp index 46a8ca6..faa6247 100644 --- a/c++/carla-plugin/carla_plugin_thread.cpp +++ b/c++/carla-plugin/carla_plugin_thread.cpp @@ -71,7 +71,9 @@ void CarlaPluginThread::run() { m_process = new QProcess(nullptr); m_process->setProcessChannelMode(QProcess::ForwardedChannels); +#ifndef BUILD_BRIDGE m_process->setProcessEnvironment(engine->getOptionsAsProcessEnvironment()); +#endif } QString name(plugin->name() ? plugin->name() : "(none)"); diff --git a/c++/carla-plugin/dssi.cpp b/c++/carla-plugin/dssi.cpp index 26c6085..bb51348 100644 --- a/c++/carla-plugin/dssi.cpp +++ b/c++/carla-plugin/dssi.cpp @@ -798,6 +798,7 @@ public: midiprog.data[i].name = strdup(pdesc->Name ? pdesc->Name : ""); } +#ifndef BUILD_BRIDGE // Update OSC Names if (x_engine->isOscControlRegistered()) { @@ -806,6 +807,7 @@ public: for (i=0; i < midiprog.count; i++) x_engine->osc_send_control_set_midi_program_data(m_id, i, midiprog.data[i].bank, midiprog.data[i].program, midiprog.data[i].name); } +#endif if (init) { diff --git a/c++/carla-plugin/lv2.cpp b/c++/carla-plugin/lv2.cpp index ced9855..8e9b42c 100644 --- a/c++/carla-plugin/lv2.cpp +++ b/c++/carla-plugin/lv2.cpp @@ -497,31 +497,32 @@ public: if (rdf_descriptor) { - LV2_Property category = rdf_descriptor->Type; + LV2_Property cat1 = rdf_descriptor->Type[0]; + LV2_Property cat2 = rdf_descriptor->Type[1]; - if (LV2_IS_DELAY(category)) + if (LV2_IS_DELAY(cat1, cat2)) return PLUGIN_CATEGORY_DELAY; - if (LV2_IS_DISTORTION(category)) + if (LV2_IS_DISTORTION(cat1, cat2)) return PLUGIN_CATEGORY_OTHER; - if (LV2_IS_DYNAMICS(category)) + if (LV2_IS_DYNAMICS(cat1, cat2)) return PLUGIN_CATEGORY_DYNAMICS; - if (LV2_IS_EQ(category)) + if (LV2_IS_EQ(cat1, cat2)) return PLUGIN_CATEGORY_EQ; - if (LV2_IS_FILTER(category)) + if (LV2_IS_FILTER(cat1, cat2)) return PLUGIN_CATEGORY_FILTER; - if (LV2_IS_GENERATOR(category)) + if (LV2_IS_GENERATOR(cat1, cat2)) return PLUGIN_CATEGORY_SYNTH; - if (LV2_IS_MODULATOR(category)) + if (LV2_IS_MODULATOR(cat1, cat2)) return PLUGIN_CATEGORY_MODULATOR; - if (LV2_IS_REVERB(category)) + if (LV2_IS_REVERB(cat1, cat2)) return PLUGIN_CATEGORY_DELAY; - if (LV2_IS_SIMULATOR(category)) + if (LV2_IS_SIMULATOR(cat1, cat2)) return PLUGIN_CATEGORY_OTHER; - if (LV2_IS_SPATIAL(category)) + if (LV2_IS_SPATIAL(cat1, cat2)) return PLUGIN_CATEGORY_OTHER; - if (LV2_IS_SPECTRAL(category)) + if (LV2_IS_SPECTRAL(cat1, cat2)) return PLUGIN_CATEGORY_UTILITY; - if (LV2_IS_UTILITY(category)) + if (LV2_IS_UTILITY(cat1, cat2)) return PLUGIN_CATEGORY_UTILITY; } @@ -1067,13 +1068,13 @@ public: // Update event ports if (! atomQueueOut.isEmpty()) { - static Lv2AtomQueue queue; + Lv2AtomQueue queue; queue.copyDataFrom(&atomQueueOut); uint32_t portIndex; const LV2_Atom* atom; - while (queue.get(&portIndex, &atom, false)) + while (queue.get(&portIndex, &atom)) { if (gui.type == GUI_EXTERNAL_OSC) { @@ -1130,44 +1131,44 @@ public: for (uint32_t i=0; i < portCount; i++) { - const LV2_Property portType = rdf_descriptor->Ports[i].Type.Value; + const LV2_Property portTypes = rdf_descriptor->Ports[i].Types; - if (LV2_IS_PORT_AUDIO(portType)) + if (LV2_IS_PORT_AUDIO(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) aIns += 1; - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) aOuts += 1; } - else if (LV2_IS_PORT_CV(portType)) + else if (LV2_IS_PORT_CV(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) cvIns += 1; - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) cvOuts += 1; } - else if (LV2_IS_PORT_ATOM_SEQUENCE(portType)) + else if (LV2_IS_PORT_ATOM_SEQUENCE(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) evIns.push_back(CARLA_EVENT_DATA_ATOM); - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) evOuts.push_back(CARLA_EVENT_DATA_ATOM); } - else if (LV2_IS_PORT_EVENT(portType)) + else if (LV2_IS_PORT_EVENT(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) evIns.push_back(CARLA_EVENT_DATA_EVENT); - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) evOuts.push_back(CARLA_EVENT_DATA_EVENT); } - else if (LV2_IS_PORT_MIDI_LL(portType)) + else if (LV2_IS_PORT_MIDI_LL(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) evIns.push_back(CARLA_EVENT_DATA_MIDI_LL); - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) evOuts.push_back(CARLA_EVENT_DATA_MIDI_LL); } - else if (LV2_IS_PORT_CONTROL(portType)) + else if (LV2_IS_PORT_CONTROL(portTypes)) params += 1; } @@ -1300,9 +1301,9 @@ public: for (uint32_t i=0; i < portCount; i++) { - const LV2_Property portType = rdf_descriptor->Ports[i].Type.Value; + const LV2_Property portTypes = rdf_descriptor->Ports[i].Types; - if (LV2_IS_PORT_AUDIO(portType) || LV2_IS_PORT_ATOM_SEQUENCE(portType) || LV2_IS_PORT_CV(portType) || LV2_IS_PORT_EVENT(portType) || LV2_IS_PORT_MIDI_LL(portType)) + if (LV2_IS_PORT_AUDIO(portTypes) || LV2_IS_PORT_ATOM_SEQUENCE(portTypes) || LV2_IS_PORT_CV(portTypes) || LV2_IS_PORT_EVENT(portTypes) || LV2_IS_PORT_MIDI_LL(portTypes)) { portName.clear(); @@ -1316,9 +1317,9 @@ public: portName.truncate(portNameSize); } - if (LV2_IS_PORT_AUDIO(portType)) + if (LV2_IS_PORT_AUDIO(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) { j = aIn.count++; aIn.ports[j] = (CarlaEngineAudioPort*)x_client->addPort(CarlaEnginePortTypeAudio, portName, true); @@ -1331,7 +1332,7 @@ public: aIn.rindexes[1] = i; } } - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) { j = aOut.count++; aOut.ports[j] = (CarlaEngineAudioPort*)x_client->addPort(CarlaEnginePortTypeAudio, portName, false); @@ -1348,13 +1349,13 @@ public: else qWarning("WARNING - Got a broken Port (Audio, but not input or output)"); } - else if (LV2_IS_PORT_CV(portType)) + else if (LV2_IS_PORT_CV(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) { qWarning("WARNING - CV Ports are not supported yet"); } - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) { qWarning("WARNING - CV Ports are not supported yet"); } @@ -1364,9 +1365,9 @@ public: descriptor->connect_port(handle, i, nullptr); if (h2) descriptor->connect_port(h2, i, nullptr); } - else if (LV2_IS_PORT_ATOM_SEQUENCE(portType)) + else if (LV2_IS_PORT_ATOM_SEQUENCE(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) { j = evIn.count++; descriptor->connect_port(handle, i, evIn.data[j].atom); @@ -1374,17 +1375,17 @@ public: evIn.data[j].rindex = i; - if (portType & LV2_PORT_DATA_MIDI_EVENT) + if (portTypes & LV2_PORT_DATA_MIDI_EVENT) { evIn.data[j].type |= CARLA_EVENT_TYPE_MIDI; evIn.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, true); } - if (portType & LV2_PORT_DATA_PATCH_MESSAGE) + if (portTypes & LV2_PORT_DATA_PATCH_MESSAGE) { evIn.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; } } - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) { j = evOut.count++; descriptor->connect_port(handle, i, evOut.data[j].atom); @@ -1392,12 +1393,12 @@ public: evOut.data[j].rindex = i; - if (portType & LV2_PORT_DATA_MIDI_EVENT) + if (portTypes & LV2_PORT_DATA_MIDI_EVENT) { evOut.data[j].type |= CARLA_EVENT_TYPE_MIDI; evOut.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, false); } - if (portType & LV2_PORT_DATA_PATCH_MESSAGE) + if (portTypes & LV2_PORT_DATA_PATCH_MESSAGE) { evOut.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; } @@ -1405,9 +1406,9 @@ public: else qWarning("WARNING - Got a broken Port (Atom Sequence, but not input or output)"); } - else if (LV2_IS_PORT_EVENT(portType)) + else if (LV2_IS_PORT_EVENT(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) { j = evIn.count++; descriptor->connect_port(handle, i, evIn.data[j].event); @@ -1415,13 +1416,13 @@ public: evIn.data[j].rindex = i; - if (portType & LV2_PORT_DATA_MIDI_EVENT) + if (portTypes & LV2_PORT_DATA_MIDI_EVENT) { evIn.data[j].type |= CARLA_EVENT_TYPE_MIDI; evIn.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, true); } } - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) { j = evOut.count++; descriptor->connect_port(handle, i, evOut.data[j].event); @@ -1429,7 +1430,7 @@ public: evOut.data[j].rindex = i; - if (portType & LV2_PORT_DATA_MIDI_EVENT) + if (portTypes & LV2_PORT_DATA_MIDI_EVENT) { evOut.data[j].type |= CARLA_EVENT_TYPE_MIDI; evOut.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, false); @@ -1438,9 +1439,9 @@ public: else qWarning("WARNING - Got a broken Port (Event, but not input or output)"); } - else if (LV2_IS_PORT_MIDI_LL(portType)) + else if (LV2_IS_PORT_MIDI_LL(portTypes)) { - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) { j = evIn.count++; descriptor->connect_port(handle, i, evIn.data[j].midi); @@ -1450,7 +1451,7 @@ public: evIn.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, true); evIn.data[j].rindex = i; } - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) { j = evOut.count++; descriptor->connect_port(handle, i, evOut.data[j].midi); @@ -1463,7 +1464,7 @@ public: else qWarning("WARNING - Got a broken Port (Midi, but not input or output)"); } - else if (LV2_IS_PORT_CONTROL(portType)) + else if (LV2_IS_PORT_CONTROL(portTypes)) { const LV2_Property portProps = rdf_descriptor->Ports[i].Properties; const LV2_Property portDesignation = rdf_descriptor->Ports[i].Designation; @@ -1557,7 +1558,7 @@ public: stepLarge = range/10.0; } - if (LV2_IS_PORT_INPUT(portType)) + if (LV2_IS_PORT_INPUT(portTypes)) { if (LV2_IS_PORT_DESIGNATION_LATENCY(portDesignation)) { @@ -1597,7 +1598,7 @@ public: param.data[j].midiCC = portMidiMap->Number; } } - else if (LV2_IS_PORT_OUTPUT(portType)) + else if (LV2_IS_PORT_OUTPUT(portTypes)) { if (LV2_IS_PORT_DESIGNATION_LATENCY(portDesignation)) { @@ -1725,7 +1726,7 @@ public: // plugin checks m_hints &= ~(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS | PLUGIN_CAN_DRYWET | PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE | PLUGIN_CAN_FORCE_STEREO); - if (LV2_IS_GENERATOR(rdf_descriptor->Type)) + if (LV2_IS_GENERATOR(rdf_descriptor->Type[0], rdf_descriptor->Type[1])) m_hints |= PLUGIN_IS_SYNTH; if (aOuts > 0 && (aIns == aOuts || aIns == 1)) @@ -1850,6 +1851,7 @@ public: midiprog.data[i].name = strdup(pdesc->name ? pdesc->name : ""); } +#ifndef BUILD_BRIDGE // Update OSC Names if (x_engine->isOscControlRegistered()) { @@ -1858,6 +1860,7 @@ public: for (i=0; i < midiprog.count; i++) x_engine->osc_send_control_set_midi_program_data(m_id, i, midiprog.data[i].bank, midiprog.data[i].program, midiprog.data[i].name); } +#endif if (init) { @@ -2377,7 +2380,7 @@ public: uint32_t portIndex; const LV2_Atom* atom; - while (atomQueueIn.get(&portIndex, &atom, false)) + while (atomQueueIn.get(&portIndex, &atom)) { if (atom->type == CARLA_URI_MAP_ID_ATOM_WORKER) { @@ -4100,8 +4103,8 @@ public: // Check supported ports for (uint32_t i=0; i < rdf_descriptor->PortCount; i++) { - LV2_Property PortType = rdf_descriptor->Ports[i].Type.Value; - if (! bool(LV2_IS_PORT_AUDIO(PortType) || LV2_IS_PORT_CONTROL(PortType) || LV2_IS_PORT_ATOM_SEQUENCE(PortType) || LV2_IS_PORT_EVENT(PortType) || LV2_IS_PORT_MIDI_LL(PortType))) + LV2_Property portTypes = rdf_descriptor->Ports[i].Types; + if (! bool(LV2_IS_PORT_AUDIO(portTypes) || LV2_IS_PORT_CONTROL(portTypes) || LV2_IS_PORT_ATOM_SEQUENCE(portTypes) || LV2_IS_PORT_EVENT(portTypes) || LV2_IS_PORT_MIDI_LL(portTypes))) { if (! LV2_IS_PORT_OPTIONAL(rdf_descriptor->Ports[i].Properties)) { @@ -4187,7 +4190,11 @@ public: int eQt4, eCocoa, eHWND, eX11, eGtk2, eGtk3, iCocoa, iHWND, iX11, iQt4, iExt, iSuil, iFinal; eQt4 = eCocoa = eHWND = eX11 = eGtk2 = eGtk3 = iQt4 = iCocoa = iHWND = iX11 = iExt = iSuil = iFinal = -1; +#ifdef BUILD_BRIDGE + const bool preferUiBridges = x_engine->getOptions().preferUiBridges; +#else const bool preferUiBridges = (x_engine->getOptions().preferUiBridges && (m_hints & PLUGIN_IS_BRIDGE) == 0); +#endif for (uint32_t i=0; i < rdf_descriptor->UICount; i++) { diff --git a/c++/carla-utils/carla_lib_utils.hpp b/c++/carla-utils/carla_lib_utils.hpp index 8d802cd..b428a10 100644 --- a/c++/carla-utils/carla_lib_utils.hpp +++ b/c++/carla-utils/carla_lib_utils.hpp @@ -82,7 +82,7 @@ const char* lib_error(const char* const filename) DWORD winErrorCode = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, winErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&winErrorString, 0, nullptr); - snprintf(libError, 2048, "%s: error code %i: %s", filename, winErrorCode, (const char*)winErrorString); + snprintf(libError, 2048, "%s: error code %li: %s", filename, winErrorCode, (const char*)winErrorString); LocalFree(winErrorString); return libError; diff --git a/c++/carla-utils/carla_lv2_utils.hpp b/c++/carla-utils/carla_lv2_utils.hpp index 8729169..82ff1d5 100644 --- a/c++/carla-utils/carla_lv2_utils.hpp +++ b/c++/carla-utils/carla_lv2_utils.hpp @@ -1,6 +1,6 @@ /* * Carla LV2 utils - * Copyright (C) 2011-2012 Filipe Coelho + * Copyright (C) 2011-2013 Filipe Coelho * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,10 +15,7 @@ * For a full copy of the GNU General Public License see the COPYING file */ -#ifndef CARLA_LV2_UTILS_HPP -#define CARLA_LV2_UTILS_HPP - -// TODO - presets state +// TODO - presets handling #include "lv2/lv2.h" #include "lv2/atom.h" @@ -58,7 +55,7 @@ #include "lilv/lilvmm.hpp" #include "sratom/sratom.h" -#include "carla_defines.hpp" +//#include "carla_defines.hpp" #include #include @@ -76,6 +73,7 @@ #define LV2_MIDI_LL__MidiPort "http://ll-plugins.nongnu.org/lv2/ext/MidiPort" +#define LV2_UI__Qt5UI LV2_UI_PREFIX "Qt5UI" #define LV2_UI__makeResident LV2_UI_PREFIX "makeResident" // ------------------------------------------------------------------------------------------------ @@ -170,15 +168,16 @@ public: Lilv::Node pprop_trigger; // Unit Hints - Lilv::Node unit_unit; Lilv::Node unit_name; Lilv::Node unit_render; Lilv::Node unit_symbol; + Lilv::Node unit_unit; // UI Types Lilv::Node ui_gtk2; Lilv::Node ui_gtk3; Lilv::Node ui_qt4; + Lilv::Node ui_qt5; Lilv::Node ui_cocoa; Lilv::Node ui_windows; Lilv::Node ui_x11; @@ -186,8 +185,11 @@ public: Lilv::Node ui_externalOld; // Misc - Lilv::Node preset_Preset; - Lilv::Node preset_value; + Lilv::Node atom_bufferType; + Lilv::Node atom_sequence; + Lilv::Node atom_supports; + + Lilv::Node preset_preset; Lilv::Node state_state; @@ -195,11 +197,7 @@ public: Lilv::Node value_minimum; Lilv::Node value_maximum; - Lilv::Node atom_Sequence; - Lilv::Node atom_bufferType; - Lilv::Node atom_supports; - - // Event Data/Types + // Port Data Types Lilv::Node midi_event; Lilv::Node patch_message; @@ -285,22 +283,26 @@ public: pprop_notOnGUI (new_uri(LV2_PORT_PROPS__notOnGUI)), pprop_trigger (new_uri(LV2_PORT_PROPS__trigger)), - unit_unit (new_uri(LV2_UNITS__unit)), unit_name (new_uri(LV2_UNITS__name)), unit_render (new_uri(LV2_UNITS__render)), unit_symbol (new_uri(LV2_UNITS__symbol)), + unit_unit (new_uri(LV2_UNITS__unit)), ui_gtk2 (new_uri(LV2_UI__GtkUI)), ui_gtk3 (new_uri(LV2_UI__Gtk3UI)), ui_qt4 (new_uri(LV2_UI__Qt4UI)), + ui_qt5 (new_uri(LV2_UI__Qt5UI)), ui_cocoa (new_uri(LV2_UI__CocoaUI)), ui_windows (new_uri(LV2_UI__WindowsUI)), ui_x11 (new_uri(LV2_UI__X11UI)), ui_external (new_uri(LV2_EXTERNAL_UI__Widget)), ui_externalOld (new_uri(LV2_EXTERNAL_UI_DEPRECATED_URI)), - preset_Preset (new_uri(LV2_PRESETS__Preset)), - preset_value (new_uri(LV2_PRESETS__value)), + atom_bufferType (new_uri(LV2_ATOM__bufferType)), + atom_sequence (new_uri(LV2_ATOM__Sequence)), + atom_supports (new_uri(LV2_ATOM__supports)), + + preset_preset (new_uri(LV2_PRESETS__Preset)), state_state (new_uri(LV2_STATE__state)), @@ -308,10 +310,6 @@ public: value_minimum (new_uri(LV2_CORE__minimum)), value_maximum (new_uri(LV2_CORE__maximum)), - atom_Sequence (new_uri(LV2_ATOM__Sequence)), - atom_bufferType (new_uri(LV2_ATOM__bufferType)), - atom_supports (new_uri(LV2_ATOM__supports)), - midi_event (new_uri(LV2_MIDI__MidiEvent)), patch_message (new_uri(LV2_PATCH__Message)), @@ -350,6 +348,9 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) { CARLA_ASSERT(uri); + if (! uri) + return nullptr; + Lilv::Plugins lilvPlugins = lv2World.get_all_plugins(); LILV_FOREACH(plugins, i, lilvPlugins) @@ -368,6 +369,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) if (typeNodes.size() > 0) { +#if 0 if (typeNodes.contains(lv2World.class_allpass)) rdfDescriptor->Type |= LV2_PLUGIN_ALLPASS; if (typeNodes.contains(lv2World.class_amplifier)) @@ -440,6 +442,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri) rdfDescriptor->Type |= LV2_PLUGIN_UTILITY; if (typeNodes.contains(lv2World.class_waveshaper)) rdfDescriptor->Type |= LV2_PLUGIN_WAVESHAPER; +#endif } } @@ -1174,5 +1177,3 @@ LV2_URI get_lv2_ui_uri(const LV2_Property type) return "UI URI type not supported"; } } - -#endif // CARLA_LV2_UTILS_HPP diff --git a/c++/jack_utils.hpp b/c++/jack_utils.hpp index d147435..10aae16 100644 --- a/c++/jack_utils.hpp +++ b/c++/jack_utils.hpp @@ -15,8 +15,8 @@ * For a full copy of the GNU General Public License see the COPYING file */ -#ifndef JACK_UTILS_H -#define JACK_UTILS_H +#ifndef __JACK_UTILS_HPP__ +#define __JACK_UTILS_HPP__ #include #include @@ -85,4 +85,4 @@ std::string jack_status_get_error_string(const jack_status_t& status) return errorString; } -#endif // JACK_UTILS_H +#endif // __JACK_UTILS_HPP__ diff --git a/doc/TODO b/doc/TODO index e38c34d..8a4dfd3 100644 --- a/doc/TODO +++ b/doc/TODO @@ -19,6 +19,7 @@ Cadence: - add freq info to systray tooltip - add freq Hz change - add desktop decriptions + - jacksettings, remember last tab Claudia: - Handle sample-rate changes in JACK (made possible by switch-master) @@ -28,6 +29,9 @@ Claudia-Launcher: - Finish plugins - Auto-close option +Carla: + - auto-tab height fix + ------------------- - MODULES -