Browse Source

Continue Carla rework, last commit for it

tags/v0.9.0
falkTX 12 years ago
parent
commit
b0e2ea16dd
16 changed files with 287 additions and 289 deletions
  1. +1
    -1
      c++/carla-bridge/Makefile
  2. +1
    -18
      c++/carla-engine/carla_engine.cpp
  3. +0
    -4
      c++/carla-engine/carla_engine.hpp
  4. +5
    -16
      c++/carla-includes/carla_defines.hpp
  5. +3
    -3
      c++/carla-includes/carla_midi.h
  6. +29
    -28
      c++/carla-includes/lv2_atom_queue.hpp
  7. +60
    -116
      c++/carla-includes/lv2_rdf.hpp
  8. +76
    -9
      c++/carla-plugin/carla_plugin.cpp
  9. +7
    -5
      c++/carla-plugin/carla_plugin.pro
  10. +2
    -0
      c++/carla-plugin/carla_plugin_thread.cpp
  11. +2
    -0
      c++/carla-plugin/dssi.cpp
  12. +69
    -62
      c++/carla-plugin/lv2.cpp
  13. +1
    -1
      c++/carla-utils/carla_lib_utils.hpp
  14. +24
    -23
      c++/carla-utils/carla_lv2_utils.hpp
  15. +3
    -3
      c++/jack_utils.hpp
  16. +4
    -0
      doc/TODO

+ 1
- 1
c++/carla-bridge/Makefile View File

@@ -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


+ 1
- 18
c++/carla-engine/carla_engine.cpp View File

@@ -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()


+ 0
- 4
c++/carla-engine/carla_engine.hpp View File

@@ -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
};

/*!


+ 5
- 16
c++/carla-includes/carla_defines.hpp View File

@@ -1,6 +1,6 @@
/*
* 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
* 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 <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
#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__

+ 3
- 3
c++/carla-includes/carla_midi.h View File

@@ -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__

+ 29
- 28
c++/carla-includes/lv2_atom_queue.hpp View File

@@ -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 <cstring> // memset
#include <QtCore/QMutex>
#include <cstring> // memcpy, memset
#include <pthread.h>

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__

+ 60
- 116
c++/carla-includes/lv2_rdf.hpp View File

@@ -1,6 +1,6 @@
/*
* 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
* 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 <cstdint>
#include <cstdlib>

// 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),


+ 76
- 9
c++/carla-plugin/carla_plugin.cpp View File

@@ -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);
}

// -------------------------------------------------------------------


+ 7
- 5
c++/carla-plugin/carla_plugin.pro View File

@@ -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


+ 2
- 0
c++/carla-plugin/carla_plugin_thread.cpp View File

@@ -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)");


+ 2
- 0
c++/carla-plugin/dssi.cpp View File

@@ -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)
{


+ 69
- 62
c++/carla-plugin/lv2.cpp View File

@@ -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++)
{


+ 1
- 1
c++/carla-utils/carla_lib_utils.hpp View File

@@ -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;


+ 24
- 23
c++/carla-utils/carla_lv2_utils.hpp View File

@@ -1,6 +1,6 @@
/*
* 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
* 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 <QtCore/QMap>
#include <QtCore/QStringList>
@@ -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

+ 3
- 3
c++/jack_utils.hpp View File

@@ -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 <jack/jack.h>
#include <jack/midiport.h>
@@ -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__

+ 4
- 0
doc/TODO View File

@@ -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 -



Loading…
Cancel
Save