@@ -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_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) -DJACKBRIDGE_EXPORT -DPTW32_STATIC_LIB | ||||
WIN_32BIT_FLAGS = $(32BIT_FLAGS) | WIN_32BIT_FLAGS = $(32BIT_FLAGS) | ||||
WIN_64BIT_FLAGS = $(64BIT_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 | # UI bridges | ||||
@@ -365,15 +365,12 @@ void CarlaEngineClient::setLatency(const uint32_t samples) | |||||
CarlaEngine::CarlaEngine() | CarlaEngine::CarlaEngine() | ||||
: m_osc(this), | : m_osc(this), | ||||
m_thread(this) | |||||
#ifdef Q_COMPILER_INITIALIZER_LISTS | |||||
, | |||||
m_thread(this), | |||||
m_callbackPtr(nullptr), | m_callbackPtr(nullptr), | ||||
m_carlaPlugins{nullptr}, | m_carlaPlugins{nullptr}, | ||||
m_uniqueNames{nullptr}, | m_uniqueNames{nullptr}, | ||||
m_insPeak{0.0}, | m_insPeak{0.0}, | ||||
m_outsPeak{0.0} | m_outsPeak{0.0} | ||||
#endif | |||||
{ | { | ||||
qDebug("CarlaEngine::CarlaEngine()"); | qDebug("CarlaEngine::CarlaEngine()"); | ||||
@@ -386,20 +383,6 @@ CarlaEngine::CarlaEngine() | |||||
m_aboutToClose = false; | m_aboutToClose = false; | ||||
m_maxPluginNumber = 0; | 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() | CarlaEngine::~CarlaEngine() | ||||
@@ -159,12 +159,8 @@ struct CarlaEngineMidiEvent { | |||||
CarlaEngineMidiEvent() | CarlaEngineMidiEvent() | ||||
: time(0), | : time(0), | ||||
#ifdef Q_COMPILER_INITIALIZER_LISTS | |||||
size(0), | size(0), | ||||
data{0} {} | data{0} {} | ||||
#else | |||||
size(0) { data[0] = data[1] = data[2] = 0; } | |||||
#endif | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* Carla common defines | * Carla common defines | ||||
* Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | |||||
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com> | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or modify | * 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 | * 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 | * 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 <QtCore/Qt> | #include <QtCore/Qt> | ||||
// 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 | // If the compiler can't do C++11 lambdas, it most likely doesn't know about nullptr either | ||||
#ifndef Q_COMPILER_LAMBDA | #ifndef Q_COMPILER_LAMBDA | ||||
# define nullptr (0) | # define nullptr (0) | ||||
@@ -84,7 +73,7 @@ | |||||
# define BINARY_NATIVE BINARY_WIN32 | # define BINARY_NATIVE BINARY_WIN32 | ||||
# endif | # endif | ||||
#else | #else | ||||
# warning Unknown binary type | |||||
# warning Unknown binary native | |||||
# define BINARY_NATIVE BINARY_OTHER | # define BINARY_NATIVE BINARY_OTHER | ||||
#endif | #endif | ||||
@@ -108,4 +97,4 @@ | |||||
# endif | # endif | ||||
#endif | #endif | ||||
#endif // CARLA_DEFINES_HPP | |||||
#endif // __CARLA_DEFINES_HPP__ |
@@ -15,8 +15,8 @@ | |||||
* For a full copy of the GNU General Public License see the COPYING file | * 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 | #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_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) | #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__ |
@@ -15,18 +15,20 @@ | |||||
* For a full copy of the GNU General Public License see the COPYING file | * 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 "lv2/atom.h" | ||||
#include <cstring> // memset | |||||
#include <QtCore/QMutex> | |||||
#include <cstring> // memcpy, memset | |||||
#include <pthread.h> | |||||
class Lv2AtomQueue | class Lv2AtomQueue | ||||
{ | { | ||||
public: | public: | ||||
Lv2AtomQueue() | Lv2AtomQueue() | ||||
: mutex(PTHREAD_MUTEX_INITIALIZER) | |||||
{ | { | ||||
index = indexPool = 0; | index = indexPool = 0; | ||||
empty = true; | empty = true; | ||||
@@ -38,8 +40,8 @@ public: | |||||
void copyDataFrom(Lv2AtomQueue* const queue) | void copyDataFrom(Lv2AtomQueue* const queue) | ||||
{ | { | ||||
// lock mutexes | // lock mutexes | ||||
queue->mutex.lock(); | |||||
mutex.lock(); | |||||
queue->lock(); | |||||
lock(); | |||||
// copy data from queue | // copy data from queue | ||||
::memcpy(data, queue->data, sizeof(datatype)*MAX_SIZE); | ::memcpy(data, queue->data, sizeof(datatype)*MAX_SIZE); | ||||
@@ -50,7 +52,7 @@ public: | |||||
full = queue->full; | full = queue->full; | ||||
// unlock our mutex, no longer needed | // unlock our mutex, no longer needed | ||||
mutex.unlock(); | |||||
unlock(); | |||||
// reset queque | // reset queque | ||||
::memset(queue->data, 0, sizeof(datatype)*MAX_SIZE); | ::memset(queue->data, 0, sizeof(datatype)*MAX_SIZE); | ||||
@@ -60,7 +62,7 @@ public: | |||||
queue->full = false; | queue->full = false; | ||||
// unlock queque mutex | // unlock queque mutex | ||||
queue->mutex.unlock(); | |||||
queue->unlock(); | |||||
} | } | ||||
bool isEmpty() | bool isEmpty() | ||||
@@ -73,17 +75,22 @@ public: | |||||
return full; | 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(atom && atom->size > 0); | ||||
CARLA_ASSERT(indexPool + atom->size < MAX_POOL_SIZE); // overflow | 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) | if (full || atom->size == 0 || indexPool + atom->size >= MAX_POOL_SIZE) | ||||
return; | return; | ||||
if (lock) | |||||
mutex.lock(); | |||||
lock(); | |||||
for (unsigned short i=0; i < MAX_SIZE; i++) | 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); | CARLA_ASSERT(portIndex && atom); | ||||
if (empty || ! (portIndex && atom)) | if (empty || ! (portIndex && atom)) | ||||
return false; | return false; | ||||
if (lock) | |||||
mutex.lock(); | |||||
if (! tryLock()) | |||||
return false; | |||||
full = false; | full = false; | ||||
@@ -131,9 +136,7 @@ public: | |||||
index = indexPool = 0; | index = indexPool = 0; | ||||
empty = true; | empty = true; | ||||
if (lock) | |||||
mutex.unlock(); | |||||
unlock(); | |||||
return false; | return false; | ||||
} | } | ||||
@@ -151,9 +154,7 @@ public: | |||||
index++; | index++; | ||||
empty = false; | empty = false; | ||||
if (lock) | |||||
mutex.unlock(); | |||||
unlock(); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -185,7 +186,7 @@ private: | |||||
unsigned short index, indexPool; | unsigned short index, indexPool; | ||||
bool empty, full; | bool empty, full; | ||||
QMutex mutex; | |||||
pthread_mutex_t mutex; | |||||
}; | }; | ||||
#endif // LV2_ATOM_QUEUE_HPP | |||||
#endif // __LV2_ATOM_QUEUE_HPP__ |
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* Custom types to store LV2 information | * Custom types to store LV2 information | ||||
* Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | |||||
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com> | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or modify | * 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 | * it under the terms of the GNU General Public License as published by | ||||
@@ -18,18 +18,15 @@ | |||||
#ifndef LV2_RDF_INCLUDED | #ifndef LV2_RDF_INCLUDED | ||||
#define LV2_RDF_INCLUDED | #define LV2_RDF_INCLUDED | ||||
// TODO - presets | |||||
#include <cstdint> | #include <cstdint> | ||||
#include <cstdlib> | #include <cstdlib> | ||||
// Base Types | // Base Types | ||||
typedef const char* LV2_URI; | typedef const char* LV2_URI; | ||||
typedef uint32_t LV2_Property; | typedef uint32_t LV2_Property; | ||||
typedef unsigned long long LV2_PluginType; | |||||
struct LV2_Type { | struct LV2_Type { | ||||
LV2_Property Value; //... | |||||
LV2_Property Value; | |||||
LV2_URI URI; | LV2_URI URI; | ||||
LV2_Type() | 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_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) | #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 | // Feature Types | ||||
#define LV2_FEATURE_OPTIONAL 0x1 | #define LV2_FEATURE_OPTIONAL 0x1 | ||||
#define LV2_FEATURE_REQUIRED 0x2 | #define LV2_FEATURE_REQUIRED 0x2 | ||||
@@ -243,47 +235,49 @@ struct LV2_Type { | |||||
#define LV2_IS_UI_OLD_EXTERNAL(x) ((x) == LV2_UI_OLD_EXTERNAL) | #define LV2_IS_UI_OLD_EXTERNAL(x) ((x) == LV2_UI_OLD_EXTERNAL) | ||||
// Plugin Types | // 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_DELAY (LV2_PLUGIN_DELAY|LV2_PLUGIN_REVERB) | ||||
#define LV2_GROUP_DISTORTION (LV2_PLUGIN_DISTORTION|LV2_PLUGIN_WAVESHAPER) | #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_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_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) | #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_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_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 | // Port Midi Map | ||||
struct LV2_RDF_PortMidiMap { | struct LV2_RDF_PortMidiMap { | ||||
@@ -376,7 +370,7 @@ struct LV2_RDF_PortScalePoint { | |||||
// Port | // Port | ||||
struct LV2_RDF_Port { | struct LV2_RDF_Port { | ||||
LV2_Type Type; | |||||
LV2_Property Types; | |||||
LV2_Property Properties; | LV2_Property Properties; | ||||
LV2_Property Designation; | LV2_Property Designation; | ||||
const char* Name; | const char* Name; | ||||
@@ -390,7 +384,8 @@ struct LV2_RDF_Port { | |||||
LV2_RDF_PortScalePoint* ScalePoints; | LV2_RDF_PortScalePoint* ScalePoints; | ||||
LV2_RDF_Port() | LV2_RDF_Port() | ||||
: Properties(0x0), | |||||
: Types(0x0), | |||||
Properties(0x0), | |||||
Designation(0), | Designation(0), | ||||
Name(nullptr), | Name(nullptr), | ||||
Symbol(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 | // Preset | ||||
struct LV2_RDF_Preset { | struct LV2_RDF_Preset { | ||||
LV2_URI URI; | LV2_URI URI; | ||||
const char* Label; | const char* Label; | ||||
uint32_t PortCount; | |||||
LV2_RDF_PresetPort* Ports; | |||||
uint32_t StateCount; | |||||
LV2_RDF_PresetState* States; | |||||
LV2_RDF_Preset() | LV2_RDF_Preset() | ||||
: URI(nullptr), | : URI(nullptr), | ||||
Label(nullptr), | |||||
PortCount(0), | |||||
Ports(nullptr), | |||||
StateCount(0), | |||||
States(nullptr) {} | |||||
Label(nullptr) {} | |||||
~LV2_RDF_Preset() | ~LV2_RDF_Preset() | ||||
{ | { | ||||
@@ -471,12 +421,6 @@ struct LV2_RDF_Preset { | |||||
if (Label) | if (Label) | ||||
::free((void*)Label); | ::free((void*)Label); | ||||
if (Ports) | |||||
delete[] Ports; | |||||
if (States) | |||||
delete[] States; | |||||
} | } | ||||
}; | }; | ||||
@@ -539,7 +483,7 @@ struct LV2_RDF_UI { | |||||
// Plugin | // Plugin | ||||
struct LV2_RDF_Descriptor { | struct LV2_RDF_Descriptor { | ||||
LV2_PluginType Type; | |||||
LV2_Property Type[2]; | |||||
LV2_URI URI; | LV2_URI URI; | ||||
const char* Name; | const char* Name; | ||||
const char* Author; | const char* Author; | ||||
@@ -564,7 +508,7 @@ struct LV2_RDF_Descriptor { | |||||
LV2_RDF_UI* UIs; | LV2_RDF_UI* UIs; | ||||
LV2_RDF_Descriptor() | LV2_RDF_Descriptor() | ||||
: Type(0x0), | |||||
: Type{0x0, 0x0}, | |||||
URI(nullptr), | URI(nullptr), | ||||
Name(nullptr), | Name(nullptr), | ||||
Author(nullptr), | Author(nullptr), | ||||
@@ -223,8 +223,10 @@ uint32_t CarlaPlugin::parameterCount() const | |||||
uint32_t CarlaPlugin::parameterScalePointCount(const uint32_t parameterId) | uint32_t CarlaPlugin::parameterScalePointCount(const uint32_t parameterId) | ||||
{ | { | ||||
CARLA_ASSERT(parameterId < param.count); | CARLA_ASSERT(parameterId < param.count); | ||||
return 0; | return 0; | ||||
// unused | |||||
Q_UNUSED(parameterId); | |||||
} | } | ||||
uint32_t CarlaPlugin::programCount() const | 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) | int32_t CarlaPlugin::chunkData(void** const dataPtr) | ||||
{ | { | ||||
CARLA_ASSERT(dataPtr); | CARLA_ASSERT(dataPtr); | ||||
return 0; | return 0; | ||||
// unused | |||||
Q_UNUSED(dataPtr); | |||||
} | } | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
@@ -318,16 +322,21 @@ int32_t CarlaPlugin::chunkData(void** const dataPtr) | |||||
double CarlaPlugin::getParameterValue(const uint32_t parameterId) | double CarlaPlugin::getParameterValue(const uint32_t parameterId) | ||||
{ | { | ||||
CARLA_ASSERT(parameterId < param.count); | CARLA_ASSERT(parameterId < param.count); | ||||
return 0.0; | return 0.0; | ||||
// unused | |||||
Q_UNUSED(parameterId); | |||||
} | } | ||||
double CarlaPlugin::getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) | double CarlaPlugin::getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) | ||||
{ | { | ||||
CARLA_ASSERT(parameterId < param.count); | CARLA_ASSERT(parameterId < param.count); | ||||
CARLA_ASSERT(scalePointId < parameterScalePointCount(parameterId)); | CARLA_ASSERT(scalePointId < parameterScalePointCount(parameterId)); | ||||
return 0.0; | return 0.0; | ||||
// unused | |||||
Q_UNUSED(parameterId); | |||||
Q_UNUSED(scalePointId); | |||||
} | } | ||||
void CarlaPlugin::getLabel(char* const strBuf) | 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) | void CarlaPlugin::getParameterName(const uint32_t parameterId, char* const strBuf) | ||||
{ | { | ||||
CARLA_ASSERT(parameterId < param.count); | CARLA_ASSERT(parameterId < param.count); | ||||
*strBuf = 0; | *strBuf = 0; | ||||
return; | |||||
// unused | |||||
Q_UNUSED(parameterId); | |||||
} | } | ||||
void CarlaPlugin::getParameterSymbol(const uint32_t parameterId, char* const strBuf) | void CarlaPlugin::getParameterSymbol(const uint32_t parameterId, char* const strBuf) | ||||
{ | { | ||||
CARLA_ASSERT(parameterId < param.count); | CARLA_ASSERT(parameterId < param.count); | ||||
*strBuf = 0; | *strBuf = 0; | ||||
return; | |||||
// unused | |||||
Q_UNUSED(parameterId); | |||||
} | } | ||||
void CarlaPlugin::getParameterText(const uint32_t parameterId, char* const strBuf) | void CarlaPlugin::getParameterText(const uint32_t parameterId, char* const strBuf) | ||||
{ | { | ||||
CARLA_ASSERT(parameterId < param.count); | CARLA_ASSERT(parameterId < param.count); | ||||
*strBuf = 0; | *strBuf = 0; | ||||
return; | |||||
// unused | |||||
Q_UNUSED(parameterId); | |||||
} | } | ||||
void CarlaPlugin::getParameterUnit(const uint32_t parameterId, char* const strBuf) | void CarlaPlugin::getParameterUnit(const uint32_t parameterId, char* const strBuf) | ||||
{ | { | ||||
CARLA_ASSERT(parameterId < param.count); | CARLA_ASSERT(parameterId < param.count); | ||||
*strBuf = 0; | *strBuf = 0; | ||||
return; | |||||
// unused | |||||
Q_UNUSED(parameterId); | |||||
} | } | ||||
void CarlaPlugin::getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) | void CarlaPlugin::getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) | ||||
{ | { | ||||
CARLA_ASSERT(parameterId < param.count); | CARLA_ASSERT(parameterId < param.count); | ||||
CARLA_ASSERT(scalePointId < parameterScalePointCount(parameterId)); | CARLA_ASSERT(scalePointId < parameterScalePointCount(parameterId)); | ||||
*strBuf = 0; | *strBuf = 0; | ||||
return; | |||||
// unused | |||||
Q_UNUSED(parameterId); | |||||
Q_UNUSED(scalePointId); | |||||
} | } | ||||
void CarlaPlugin::getProgramName(const uint32_t index, char* const strBuf) | 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) | 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; | *ins = 0; | ||||
*outs = 0; | *outs = 0; | ||||
*total = param.count; | *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) | void CarlaPlugin::getGuiInfo(GuiType* const type, bool* const resizable) | ||||
{ | { | ||||
CARLA_ASSERT(type); | |||||
CARLA_ASSERT(resizable); | |||||
if (! (type && resizable)) | |||||
return; | |||||
*type = GUI_NONE; | *type = GUI_NONE; | ||||
*resizable = false; | *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) | void CarlaPlugin::setChunkData(const char* const stringData) | ||||
{ | { | ||||
CARLA_ASSERT(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) | 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) | 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(value1); | ||||
Q_UNUSED(value2); | Q_UNUSED(value2); | ||||
Q_UNUSED(value3); | 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) | void CarlaPlugin::uiParameterChange(const uint32_t index, const double value) | ||||
{ | { | ||||
CARLA_ASSERT(index < param.count); | CARLA_ASSERT(index < param.count); | ||||
return; | |||||
// unused | |||||
Q_UNUSED(index); | |||||
Q_UNUSED(value); | Q_UNUSED(value); | ||||
} | } | ||||
void CarlaPlugin::uiProgramChange(const uint32_t index) | void CarlaPlugin::uiProgramChange(const uint32_t index) | ||||
{ | { | ||||
CARLA_ASSERT(index < prog.count); | CARLA_ASSERT(index < prog.count); | ||||
return; | |||||
// unused | |||||
Q_UNUSED(index); | |||||
} | } | ||||
void CarlaPlugin::uiMidiProgramChange(const uint32_t index) | void CarlaPlugin::uiMidiProgramChange(const uint32_t index) | ||||
{ | { | ||||
CARLA_ASSERT(index < midiprog.count); | 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) | 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(channel < 16); | ||||
CARLA_ASSERT(note < 128); | CARLA_ASSERT(note < 128); | ||||
CARLA_ASSERT(velo > 0 && velo < 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) | void CarlaPlugin::uiNoteOff(const uint8_t channel, const uint8_t note) | ||||
{ | { | ||||
CARLA_ASSERT(channel < 16); | CARLA_ASSERT(channel < 16); | ||||
CARLA_ASSERT(note < 128); | CARLA_ASSERT(note < 128); | ||||
return; | |||||
// unused | |||||
Q_UNUSED(channel); | |||||
Q_UNUSED(note); | |||||
} | } | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
@@ -2,9 +2,9 @@ | |||||
QT = core gui | QT = core gui | ||||
CONFIG = debug | |||||
CONFIG += static | |||||
#CONFIG = debug | |||||
CONFIG += link_pkgconfig qt warn_on | CONFIG += link_pkgconfig qt warn_on | ||||
CONFIG += dll shared | |||||
DEFINES = DEBUG | DEFINES = DEBUG | ||||
DEFINES += QTCREATOR_TEST | DEFINES += QTCREATOR_TEST | ||||
@@ -13,15 +13,17 @@ DEFINES += QTCREATOR_TEST | |||||
DEFINES += WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST | DEFINES += WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST | ||||
# Samplers | # Samplers | ||||
DEFINES += WANT_FLUIDSYNTH WANT_LINUXSAMPLER | |||||
DEFINES += WANT_FLUIDSYNTH | |||||
# WANT_LINUXSAMPLER | |||||
# ZynAddSubFX | # ZynAddSubFX | ||||
DEFINES += WANT_ZYNADDSUBFX | DEFINES += WANT_ZYNADDSUBFX | ||||
# Misc | # Misc | ||||
DEFINES += WANT_SUIL | |||||
#DEFINES += WANT_SUIL | |||||
PKGCONFIG = liblo suil-0 fluidsynth linuxsampler | |||||
PKGCONFIG = liblo fluidsynth | |||||
#suil-0 linuxsampler | |||||
TARGET = carla_plugin | TARGET = carla_plugin | ||||
TEMPLATE = lib | TEMPLATE = lib | ||||
@@ -71,7 +71,9 @@ void CarlaPluginThread::run() | |||||
{ | { | ||||
m_process = new QProcess(nullptr); | m_process = new QProcess(nullptr); | ||||
m_process->setProcessChannelMode(QProcess::ForwardedChannels); | m_process->setProcessChannelMode(QProcess::ForwardedChannels); | ||||
#ifndef BUILD_BRIDGE | |||||
m_process->setProcessEnvironment(engine->getOptionsAsProcessEnvironment()); | m_process->setProcessEnvironment(engine->getOptionsAsProcessEnvironment()); | ||||
#endif | |||||
} | } | ||||
QString name(plugin->name() ? plugin->name() : "(none)"); | QString name(plugin->name() ? plugin->name() : "(none)"); | ||||
@@ -798,6 +798,7 @@ public: | |||||
midiprog.data[i].name = strdup(pdesc->Name ? pdesc->Name : ""); | midiprog.data[i].name = strdup(pdesc->Name ? pdesc->Name : ""); | ||||
} | } | ||||
#ifndef BUILD_BRIDGE | |||||
// Update OSC Names | // Update OSC Names | ||||
if (x_engine->isOscControlRegistered()) | if (x_engine->isOscControlRegistered()) | ||||
{ | { | ||||
@@ -806,6 +807,7 @@ public: | |||||
for (i=0; i < midiprog.count; i++) | 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); | 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) | if (init) | ||||
{ | { | ||||
@@ -497,31 +497,32 @@ public: | |||||
if (rdf_descriptor) | 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; | return PLUGIN_CATEGORY_DELAY; | ||||
if (LV2_IS_DISTORTION(category)) | |||||
if (LV2_IS_DISTORTION(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_OTHER; | return PLUGIN_CATEGORY_OTHER; | ||||
if (LV2_IS_DYNAMICS(category)) | |||||
if (LV2_IS_DYNAMICS(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_DYNAMICS; | return PLUGIN_CATEGORY_DYNAMICS; | ||||
if (LV2_IS_EQ(category)) | |||||
if (LV2_IS_EQ(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_EQ; | return PLUGIN_CATEGORY_EQ; | ||||
if (LV2_IS_FILTER(category)) | |||||
if (LV2_IS_FILTER(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_FILTER; | return PLUGIN_CATEGORY_FILTER; | ||||
if (LV2_IS_GENERATOR(category)) | |||||
if (LV2_IS_GENERATOR(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_SYNTH; | return PLUGIN_CATEGORY_SYNTH; | ||||
if (LV2_IS_MODULATOR(category)) | |||||
if (LV2_IS_MODULATOR(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_MODULATOR; | return PLUGIN_CATEGORY_MODULATOR; | ||||
if (LV2_IS_REVERB(category)) | |||||
if (LV2_IS_REVERB(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_DELAY; | return PLUGIN_CATEGORY_DELAY; | ||||
if (LV2_IS_SIMULATOR(category)) | |||||
if (LV2_IS_SIMULATOR(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_OTHER; | return PLUGIN_CATEGORY_OTHER; | ||||
if (LV2_IS_SPATIAL(category)) | |||||
if (LV2_IS_SPATIAL(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_OTHER; | return PLUGIN_CATEGORY_OTHER; | ||||
if (LV2_IS_SPECTRAL(category)) | |||||
if (LV2_IS_SPECTRAL(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_UTILITY; | return PLUGIN_CATEGORY_UTILITY; | ||||
if (LV2_IS_UTILITY(category)) | |||||
if (LV2_IS_UTILITY(cat1, cat2)) | |||||
return PLUGIN_CATEGORY_UTILITY; | return PLUGIN_CATEGORY_UTILITY; | ||||
} | } | ||||
@@ -1067,13 +1068,13 @@ public: | |||||
// Update event ports | // Update event ports | ||||
if (! atomQueueOut.isEmpty()) | if (! atomQueueOut.isEmpty()) | ||||
{ | { | ||||
static Lv2AtomQueue queue; | |||||
Lv2AtomQueue queue; | |||||
queue.copyDataFrom(&atomQueueOut); | queue.copyDataFrom(&atomQueueOut); | ||||
uint32_t portIndex; | uint32_t portIndex; | ||||
const LV2_Atom* atom; | const LV2_Atom* atom; | ||||
while (queue.get(&portIndex, &atom, false)) | |||||
while (queue.get(&portIndex, &atom)) | |||||
{ | { | ||||
if (gui.type == GUI_EXTERNAL_OSC) | if (gui.type == GUI_EXTERNAL_OSC) | ||||
{ | { | ||||
@@ -1130,44 +1131,44 @@ public: | |||||
for (uint32_t i=0; i < portCount; i++) | 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; | aIns += 1; | ||||
else if (LV2_IS_PORT_OUTPUT(portType)) | |||||
else if (LV2_IS_PORT_OUTPUT(portTypes)) | |||||
aOuts += 1; | 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; | cvIns += 1; | ||||
else if (LV2_IS_PORT_OUTPUT(portType)) | |||||
else if (LV2_IS_PORT_OUTPUT(portTypes)) | |||||
cvOuts += 1; | 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); | 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); | 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); | 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); | 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); | 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); | evOuts.push_back(CARLA_EVENT_DATA_MIDI_LL); | ||||
} | } | ||||
else if (LV2_IS_PORT_CONTROL(portType)) | |||||
else if (LV2_IS_PORT_CONTROL(portTypes)) | |||||
params += 1; | params += 1; | ||||
} | } | ||||
@@ -1300,9 +1301,9 @@ public: | |||||
for (uint32_t i=0; i < portCount; i++) | 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(); | portName.clear(); | ||||
@@ -1316,9 +1317,9 @@ public: | |||||
portName.truncate(portNameSize); | 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++; | j = aIn.count++; | ||||
aIn.ports[j] = (CarlaEngineAudioPort*)x_client->addPort(CarlaEnginePortTypeAudio, portName, true); | aIn.ports[j] = (CarlaEngineAudioPort*)x_client->addPort(CarlaEnginePortTypeAudio, portName, true); | ||||
@@ -1331,7 +1332,7 @@ public: | |||||
aIn.rindexes[1] = i; | aIn.rindexes[1] = i; | ||||
} | } | ||||
} | } | ||||
else if (LV2_IS_PORT_OUTPUT(portType)) | |||||
else if (LV2_IS_PORT_OUTPUT(portTypes)) | |||||
{ | { | ||||
j = aOut.count++; | j = aOut.count++; | ||||
aOut.ports[j] = (CarlaEngineAudioPort*)x_client->addPort(CarlaEnginePortTypeAudio, portName, false); | aOut.ports[j] = (CarlaEngineAudioPort*)x_client->addPort(CarlaEnginePortTypeAudio, portName, false); | ||||
@@ -1348,13 +1349,13 @@ public: | |||||
else | else | ||||
qWarning("WARNING - Got a broken Port (Audio, but not input or output)"); | 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"); | 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"); | qWarning("WARNING - CV Ports are not supported yet"); | ||||
} | } | ||||
@@ -1364,9 +1365,9 @@ public: | |||||
descriptor->connect_port(handle, i, nullptr); | descriptor->connect_port(handle, i, nullptr); | ||||
if (h2) descriptor->connect_port(h2, 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++; | j = evIn.count++; | ||||
descriptor->connect_port(handle, i, evIn.data[j].atom); | descriptor->connect_port(handle, i, evIn.data[j].atom); | ||||
@@ -1374,17 +1375,17 @@ public: | |||||
evIn.data[j].rindex = i; | 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].type |= CARLA_EVENT_TYPE_MIDI; | ||||
evIn.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, true); | 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; | 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++; | j = evOut.count++; | ||||
descriptor->connect_port(handle, i, evOut.data[j].atom); | descriptor->connect_port(handle, i, evOut.data[j].atom); | ||||
@@ -1392,12 +1393,12 @@ public: | |||||
evOut.data[j].rindex = i; | 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].type |= CARLA_EVENT_TYPE_MIDI; | ||||
evOut.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, false); | 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; | evOut.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; | ||||
} | } | ||||
@@ -1405,9 +1406,9 @@ public: | |||||
else | else | ||||
qWarning("WARNING - Got a broken Port (Atom Sequence, but not input or output)"); | 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++; | j = evIn.count++; | ||||
descriptor->connect_port(handle, i, evIn.data[j].event); | descriptor->connect_port(handle, i, evIn.data[j].event); | ||||
@@ -1415,13 +1416,13 @@ public: | |||||
evIn.data[j].rindex = i; | 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].type |= CARLA_EVENT_TYPE_MIDI; | ||||
evIn.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, true); | 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++; | j = evOut.count++; | ||||
descriptor->connect_port(handle, i, evOut.data[j].event); | descriptor->connect_port(handle, i, evOut.data[j].event); | ||||
@@ -1429,7 +1430,7 @@ public: | |||||
evOut.data[j].rindex = i; | 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].type |= CARLA_EVENT_TYPE_MIDI; | ||||
evOut.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, false); | evOut.data[j].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, false); | ||||
@@ -1438,9 +1439,9 @@ public: | |||||
else | else | ||||
qWarning("WARNING - Got a broken Port (Event, but not input or output)"); | 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++; | j = evIn.count++; | ||||
descriptor->connect_port(handle, i, evIn.data[j].midi); | 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].port = (CarlaEngineMidiPort*)x_client->addPort(CarlaEnginePortTypeMIDI, portName, true); | ||||
evIn.data[j].rindex = i; | evIn.data[j].rindex = i; | ||||
} | } | ||||
else if (LV2_IS_PORT_OUTPUT(portType)) | |||||
else if (LV2_IS_PORT_OUTPUT(portTypes)) | |||||
{ | { | ||||
j = evOut.count++; | j = evOut.count++; | ||||
descriptor->connect_port(handle, i, evOut.data[j].midi); | descriptor->connect_port(handle, i, evOut.data[j].midi); | ||||
@@ -1463,7 +1464,7 @@ public: | |||||
else | else | ||||
qWarning("WARNING - Got a broken Port (Midi, but not input or output)"); | 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 portProps = rdf_descriptor->Ports[i].Properties; | ||||
const LV2_Property portDesignation = rdf_descriptor->Ports[i].Designation; | const LV2_Property portDesignation = rdf_descriptor->Ports[i].Designation; | ||||
@@ -1557,7 +1558,7 @@ public: | |||||
stepLarge = range/10.0; | stepLarge = range/10.0; | ||||
} | } | ||||
if (LV2_IS_PORT_INPUT(portType)) | |||||
if (LV2_IS_PORT_INPUT(portTypes)) | |||||
{ | { | ||||
if (LV2_IS_PORT_DESIGNATION_LATENCY(portDesignation)) | if (LV2_IS_PORT_DESIGNATION_LATENCY(portDesignation)) | ||||
{ | { | ||||
@@ -1597,7 +1598,7 @@ public: | |||||
param.data[j].midiCC = portMidiMap->Number; | 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)) | if (LV2_IS_PORT_DESIGNATION_LATENCY(portDesignation)) | ||||
{ | { | ||||
@@ -1725,7 +1726,7 @@ public: | |||||
// plugin checks | // plugin checks | ||||
m_hints &= ~(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS | PLUGIN_CAN_DRYWET | PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE | PLUGIN_CAN_FORCE_STEREO); | 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; | m_hints |= PLUGIN_IS_SYNTH; | ||||
if (aOuts > 0 && (aIns == aOuts || aIns == 1)) | if (aOuts > 0 && (aIns == aOuts || aIns == 1)) | ||||
@@ -1850,6 +1851,7 @@ public: | |||||
midiprog.data[i].name = strdup(pdesc->name ? pdesc->name : ""); | midiprog.data[i].name = strdup(pdesc->name ? pdesc->name : ""); | ||||
} | } | ||||
#ifndef BUILD_BRIDGE | |||||
// Update OSC Names | // Update OSC Names | ||||
if (x_engine->isOscControlRegistered()) | if (x_engine->isOscControlRegistered()) | ||||
{ | { | ||||
@@ -1858,6 +1860,7 @@ public: | |||||
for (i=0; i < midiprog.count; i++) | 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); | 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) | if (init) | ||||
{ | { | ||||
@@ -2377,7 +2380,7 @@ public: | |||||
uint32_t portIndex; | uint32_t portIndex; | ||||
const LV2_Atom* atom; | const LV2_Atom* atom; | ||||
while (atomQueueIn.get(&portIndex, &atom, false)) | |||||
while (atomQueueIn.get(&portIndex, &atom)) | |||||
{ | { | ||||
if (atom->type == CARLA_URI_MAP_ID_ATOM_WORKER) | if (atom->type == CARLA_URI_MAP_ID_ATOM_WORKER) | ||||
{ | { | ||||
@@ -4100,8 +4103,8 @@ public: | |||||
// Check supported ports | // Check supported ports | ||||
for (uint32_t i=0; i < rdf_descriptor->PortCount; i++) | 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)) | 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; | 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; | 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); | const bool preferUiBridges = (x_engine->getOptions().preferUiBridges && (m_hints & PLUGIN_IS_BRIDGE) == 0); | ||||
#endif | |||||
for (uint32_t i=0; i < rdf_descriptor->UICount; i++) | for (uint32_t i=0; i < rdf_descriptor->UICount; i++) | ||||
{ | { | ||||
@@ -82,7 +82,7 @@ const char* lib_error(const char* const filename) | |||||
DWORD winErrorCode = GetLastError(); | 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); | 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); | LocalFree(winErrorString); | ||||
return libError; | return libError; | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* Carla LV2 utils | * Carla LV2 utils | ||||
* Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | |||||
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com> | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or modify | * 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 | * 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 | * 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/lv2.h" | ||||
#include "lv2/atom.h" | #include "lv2/atom.h" | ||||
@@ -58,7 +55,7 @@ | |||||
#include "lilv/lilvmm.hpp" | #include "lilv/lilvmm.hpp" | ||||
#include "sratom/sratom.h" | #include "sratom/sratom.h" | ||||
#include "carla_defines.hpp" | |||||
//#include "carla_defines.hpp" | |||||
#include <QtCore/QMap> | #include <QtCore/QMap> | ||||
#include <QtCore/QStringList> | #include <QtCore/QStringList> | ||||
@@ -76,6 +73,7 @@ | |||||
#define LV2_MIDI_LL__MidiPort "http://ll-plugins.nongnu.org/lv2/ext/MidiPort" | #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" | #define LV2_UI__makeResident LV2_UI_PREFIX "makeResident" | ||||
// ------------------------------------------------------------------------------------------------ | // ------------------------------------------------------------------------------------------------ | ||||
@@ -170,15 +168,16 @@ public: | |||||
Lilv::Node pprop_trigger; | Lilv::Node pprop_trigger; | ||||
// Unit Hints | // Unit Hints | ||||
Lilv::Node unit_unit; | |||||
Lilv::Node unit_name; | Lilv::Node unit_name; | ||||
Lilv::Node unit_render; | Lilv::Node unit_render; | ||||
Lilv::Node unit_symbol; | Lilv::Node unit_symbol; | ||||
Lilv::Node unit_unit; | |||||
// UI Types | // UI Types | ||||
Lilv::Node ui_gtk2; | Lilv::Node ui_gtk2; | ||||
Lilv::Node ui_gtk3; | Lilv::Node ui_gtk3; | ||||
Lilv::Node ui_qt4; | Lilv::Node ui_qt4; | ||||
Lilv::Node ui_qt5; | |||||
Lilv::Node ui_cocoa; | Lilv::Node ui_cocoa; | ||||
Lilv::Node ui_windows; | Lilv::Node ui_windows; | ||||
Lilv::Node ui_x11; | Lilv::Node ui_x11; | ||||
@@ -186,8 +185,11 @@ public: | |||||
Lilv::Node ui_externalOld; | Lilv::Node ui_externalOld; | ||||
// Misc | // 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; | Lilv::Node state_state; | ||||
@@ -195,11 +197,7 @@ public: | |||||
Lilv::Node value_minimum; | Lilv::Node value_minimum; | ||||
Lilv::Node value_maximum; | 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 midi_event; | ||||
Lilv::Node patch_message; | Lilv::Node patch_message; | ||||
@@ -285,22 +283,26 @@ public: | |||||
pprop_notOnGUI (new_uri(LV2_PORT_PROPS__notOnGUI)), | pprop_notOnGUI (new_uri(LV2_PORT_PROPS__notOnGUI)), | ||||
pprop_trigger (new_uri(LV2_PORT_PROPS__trigger)), | pprop_trigger (new_uri(LV2_PORT_PROPS__trigger)), | ||||
unit_unit (new_uri(LV2_UNITS__unit)), | |||||
unit_name (new_uri(LV2_UNITS__name)), | unit_name (new_uri(LV2_UNITS__name)), | ||||
unit_render (new_uri(LV2_UNITS__render)), | unit_render (new_uri(LV2_UNITS__render)), | ||||
unit_symbol (new_uri(LV2_UNITS__symbol)), | unit_symbol (new_uri(LV2_UNITS__symbol)), | ||||
unit_unit (new_uri(LV2_UNITS__unit)), | |||||
ui_gtk2 (new_uri(LV2_UI__GtkUI)), | ui_gtk2 (new_uri(LV2_UI__GtkUI)), | ||||
ui_gtk3 (new_uri(LV2_UI__Gtk3UI)), | ui_gtk3 (new_uri(LV2_UI__Gtk3UI)), | ||||
ui_qt4 (new_uri(LV2_UI__Qt4UI)), | ui_qt4 (new_uri(LV2_UI__Qt4UI)), | ||||
ui_qt5 (new_uri(LV2_UI__Qt5UI)), | |||||
ui_cocoa (new_uri(LV2_UI__CocoaUI)), | ui_cocoa (new_uri(LV2_UI__CocoaUI)), | ||||
ui_windows (new_uri(LV2_UI__WindowsUI)), | ui_windows (new_uri(LV2_UI__WindowsUI)), | ||||
ui_x11 (new_uri(LV2_UI__X11UI)), | ui_x11 (new_uri(LV2_UI__X11UI)), | ||||
ui_external (new_uri(LV2_EXTERNAL_UI__Widget)), | ui_external (new_uri(LV2_EXTERNAL_UI__Widget)), | ||||
ui_externalOld (new_uri(LV2_EXTERNAL_UI_DEPRECATED_URI)), | 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)), | state_state (new_uri(LV2_STATE__state)), | ||||
@@ -308,10 +310,6 @@ public: | |||||
value_minimum (new_uri(LV2_CORE__minimum)), | value_minimum (new_uri(LV2_CORE__minimum)), | ||||
value_maximum (new_uri(LV2_CORE__maximum)), | 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)), | midi_event (new_uri(LV2_MIDI__MidiEvent)), | ||||
patch_message (new_uri(LV2_PATCH__Message)), | 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); | CARLA_ASSERT(uri); | ||||
if (! uri) | |||||
return nullptr; | |||||
Lilv::Plugins lilvPlugins = lv2World.get_all_plugins(); | Lilv::Plugins lilvPlugins = lv2World.get_all_plugins(); | ||||
LILV_FOREACH(plugins, i, lilvPlugins) | 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 (typeNodes.size() > 0) | ||||
{ | { | ||||
#if 0 | |||||
if (typeNodes.contains(lv2World.class_allpass)) | if (typeNodes.contains(lv2World.class_allpass)) | ||||
rdfDescriptor->Type |= LV2_PLUGIN_ALLPASS; | rdfDescriptor->Type |= LV2_PLUGIN_ALLPASS; | ||||
if (typeNodes.contains(lv2World.class_amplifier)) | 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; | rdfDescriptor->Type |= LV2_PLUGIN_UTILITY; | ||||
if (typeNodes.contains(lv2World.class_waveshaper)) | if (typeNodes.contains(lv2World.class_waveshaper)) | ||||
rdfDescriptor->Type |= LV2_PLUGIN_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"; | return "UI URI type not supported"; | ||||
} | } | ||||
} | } | ||||
#endif // CARLA_LV2_UTILS_HPP |
@@ -15,8 +15,8 @@ | |||||
* For a full copy of the GNU General Public License see the COPYING file | * 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 <jack/jack.h> | #include <jack/jack.h> | ||||
#include <jack/midiport.h> | #include <jack/midiport.h> | ||||
@@ -85,4 +85,4 @@ std::string jack_status_get_error_string(const jack_status_t& status) | |||||
return errorString; | return errorString; | ||||
} | } | ||||
#endif // JACK_UTILS_H | |||||
#endif // __JACK_UTILS_HPP__ |
@@ -19,6 +19,7 @@ Cadence: | |||||
- add freq info to systray tooltip | - add freq info to systray tooltip | ||||
- add freq Hz change | - add freq Hz change | ||||
- add desktop decriptions | - add desktop decriptions | ||||
- jacksettings, remember last tab | |||||
Claudia: | Claudia: | ||||
- Handle sample-rate changes in JACK (made possible by switch-master) | - Handle sample-rate changes in JACK (made possible by switch-master) | ||||
@@ -28,6 +29,9 @@ Claudia-Launcher: | |||||
- Finish plugins | - Finish plugins | ||||
- Auto-close option | - Auto-close option | ||||
Carla: | |||||
- auto-tab height fix | |||||
------------------- | ------------------- | ||||
- MODULES - | - MODULES - | ||||