Browse Source

More renames and type checks: misc fixes

tags/1.9.4
falkTX 12 years ago
parent
commit
d59675d549
13 changed files with 289 additions and 168 deletions
  1. +4
    -1
      source/backend/CarlaEngine.hpp
  2. +28
    -0
      source/backend/CarlaPlugin.hpp
  3. +1
    -1
      source/backend/engine/CarlaEngine.cpp
  4. +201
    -96
      source/backend/engine/CarlaEngineOsc.cpp
  5. +33
    -27
      source/backend/engine/CarlaEngineOsc.hpp
  6. +10
    -1
      source/backend/plugin/CarlaBridge.cpp
  7. +4
    -12
      source/backend/plugin/CarlaPlugin.cpp
  8. +0
    -0
      source/backend/plugin/CarlaPlugin.pro
  9. +0
    -27
      source/backend/plugin/CarlaPluginInternal.hpp
  10. +0
    -0
      source/backend/plugin/CarlaPluginThread.cpp
  11. +0
    -0
      source/backend/plugin/CarlaPluginThread.hpp
  12. +7
    -3
      source/includes/CarlaDefines.hpp
  13. +1
    -0
      source/tests/Makefile

+ 4
- 1
source/backend/CarlaEngine.hpp View File

@@ -961,8 +961,11 @@ protected:
/*!
* TODO.
*/
void setPeaks(const unsigned int pluginId, float inPeaks[MAX_PEAKS], float outPeaks[MAX_PEAKS]);
public:
// FIXME - remove once IPC audio is implemented
void setPeaks(const unsigned int pluginId, float const inPeaks[MAX_PEAKS], float const outPeaks[MAX_PEAKS]);

private:
#ifndef BUILD_BRIDGE
// Rack mode data
EngineEvent* getRackEventBuffer(const bool isInput);


+ 28
- 0
source/backend/CarlaPlugin.hpp View File

@@ -34,6 +34,34 @@ CARLA_BACKEND_START_NAMESPACE
} // Fix editor indentation
#endif

#ifndef BUILD_BRIDGE
/*!
* TODO.
*/
enum PluginBridgeInfoType {
kPluginBridgeAudioCount,
kPluginBridgeMidiCount,
kPluginBridgeParameterCount,
kPluginBridgeProgramCount,
kPluginBridgeMidiProgramCount,
kPluginBridgePluginInfo,
kPluginBridgeParameterInfo,
kPluginBridgeParameterData,
kPluginBridgeParameterRanges,
kPluginBridgeProgramInfo,
kPluginBridgeMidiProgramInfo,
kPluginBridgeConfigure,
kPluginBridgeSetParameterValue,
kPluginBridgeSetDefaultValue,
kPluginBridgeSetProgram,
kPluginBridgeSetMidiProgram,
kPluginBridgeSetCustomData,
kPluginBridgeSetChunkData,
kPluginBridgeUpdateNow,
kPluginBridgeError
};
#endif

/*!
* TODO.
*/


+ 1
- 1
source/backend/engine/CarlaEngine.cpp View File

@@ -1311,7 +1311,7 @@ void CarlaEngine::proccessPendingEvents()
}
}

void CarlaEngine::setPeaks(const unsigned int pluginId, float* inPeaks, float* outPeaks)
void CarlaEngine::setPeaks(const unsigned int pluginId, float const inPeaks[MAX_PEAKS], float const outPeaks[MAX_PEAKS])
{
kData->plugins[pluginId].insPeak[0] = inPeaks[0];
kData->plugins[pluginId].insPeak[1] = inPeaks[1];


+ 201
- 96
source/backend/engine/CarlaEngineOsc.cpp View File

@@ -23,6 +23,12 @@

CARLA_BACKEND_START_NAMESPACE

// -------------------------------------------------------------------
// Bridge Helper, defined in plugin/CarlaBlugin.cpp

extern int CarlaPluginSetOscBridgeInfo(CarlaPlugin* const plugin, const PluginBridgeInfoType type,
const int argc, const lo_arg* const* const argv, const char* const types);

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

CarlaEngineOsc::CarlaEngineOsc(CarlaEngine* const engine)
@@ -37,9 +43,9 @@ CarlaEngineOsc::CarlaEngineOsc(CarlaEngine* const engine)
CarlaEngineOsc::~CarlaEngineOsc()
{
carla_debug("CarlaEngineOsc::~CarlaEngineOsc()");
//CARLA_ASSERT(fName.isEmpty()); // FIXME
//CARLA_ASSERT(fServerPathTCP.isEmpty()); // FIXME
//CARLA_ASSERT(fServerPathUDP.isEmpty()); // FIXME
CARLA_ASSERT(fName.isEmpty());
CARLA_ASSERT(fServerPathTCP.isEmpty());
CARLA_ASSERT(fServerPathUDP.isEmpty());
CARLA_ASSERT(fServerTCP == nullptr);
CARLA_ASSERT(fServerUDP == nullptr);
}
@@ -54,7 +60,7 @@ void CarlaEngineOsc::init(const char* const name)
CARLA_ASSERT(fServerPathUDP.isEmpty());
CARLA_ASSERT(fServerTCP == nullptr);
CARLA_ASSERT(fServerUDP == nullptr);
CARLA_ASSERT(name);
CARLA_ASSERT(name != nullptr);

fName = name;
fName.toBasic();
@@ -70,7 +76,7 @@ void CarlaEngineOsc::init(const char* const name)
std::free(tmpServerPathTCP);
}

lo_server_add_method(fServerTCP, nullptr, nullptr, osc_message_handler, this);
lo_server_add_method(fServerTCP, nullptr, nullptr, osc_message_handler_TCP, this);
}

fServerUDP = lo_server_new_with_proto(nullptr, LO_UDP, osc_error_handler_UDP);
@@ -84,8 +90,14 @@ void CarlaEngineOsc::init(const char* const name)
std::free(tmpServerPathUDP);
}

lo_server_add_method(fServerUDP, nullptr, nullptr, osc_message_handler, this);
lo_server_add_method(fServerUDP, nullptr, nullptr, osc_message_handler_UDP, this);
}

CARLA_ASSERT(fName.isNotEmpty());
CARLA_ASSERT(fServerPathTCP.isNotEmpty());
CARLA_ASSERT(fServerPathUDP.isNotEmpty());
CARLA_ASSERT(fServerTCP != nullptr);
CARLA_ASSERT(fServerUDP != nullptr);
}

void CarlaEngineOsc::idle()
@@ -132,6 +144,12 @@ void CarlaEngineOsc::close()
#ifndef BUILD_BRIDGE
fControlData.free();
#endif

CARLA_ASSERT(fName.isEmpty());
CARLA_ASSERT(fServerPathTCP.isEmpty());
CARLA_ASSERT(fServerPathUDP.isEmpty());
CARLA_ASSERT(fServerTCP == nullptr);
CARLA_ASSERT(fServerUDP == nullptr);
}

// -----------------------------------------------------------------------
@@ -141,14 +159,16 @@ bool isDigit(const char c)
return (c >= '0' && c <= '9');
}

int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg)
int CarlaEngineOsc::handleMessage(const bool isTCP, const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg)
{
#if DEBUG
carla_debug("CarlaEngineOsc::handleMessage(%s, %i, %p, %s, %p)", path, argc, argv, types, msg);
carla_debug("CarlaEngineOsc::handleMessage(%s, %s, %i, %p, %s, %p)", bool2str(isTCP), path, argc, argv, types, msg);
#endif
CARLA_ASSERT(fName.isNotEmpty());
CARLA_ASSERT(fServerPathTCP.isNotEmpty() || fServerPathUDP.isNotEmpty());
CARLA_ASSERT(fServerTCP != nullptr || fServerUDP != nullptr);
CARLA_ASSERT(fServerPathTCP.isNotEmpty());
CARLA_ASSERT(fServerPathUDP.isNotEmpty());
CARLA_ASSERT(fServerTCP != nullptr);
CARLA_ASSERT(fServerUDP != nullptr);
CARLA_ASSERT(path != nullptr);

if (path == nullptr)
@@ -159,7 +179,7 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const

if (fName.isEmpty())
{
carla_stderr("CarlaEngineOsc::handleMessage(\"%s\", ...) - received message but client is offline", path);
carla_stderr("CarlaEngineOsc::handleMessage(%s, \"%s\", ...) - received message but client is offline", bool2str(isTCP), path);
return 1;
}

@@ -168,7 +188,7 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
if (strcmp(path, "/register") == 0)
{
const lo_address source = lo_message_get_source(msg);
return handleMsgRegister(argc, argv, types, source);
return handleMsgRegister(isTCP, argc, argv, types, source);
}
if (strcmp(path, "/unregister") == 0)
{
@@ -189,6 +209,7 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
// eg, /carla/23/method

unsigned int pluginId = 0;
size_t offset;

if (isDigit(path[nameSize+2]))
{
@@ -202,6 +223,7 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
else if (isDigit(path[nameSize+4]))
{
// 3 digits, /xyz/method
offset = 6;
pluginId += (path[nameSize+2]-'0')*100;
pluginId += (path[nameSize+3]-'0')*10;
pluginId += (path[nameSize+4]-'0');
@@ -209,6 +231,7 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
else
{
// 2 digits, /xy/method
offset = 5;
pluginId += (path[nameSize+2]-'0')*10;
pluginId += (path[nameSize+3]-'0');
}
@@ -216,6 +239,7 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
else
{
// single digit, /x/method
offset = 4;
pluginId += path[nameSize+2]-'0';
}
}
@@ -236,17 +260,16 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
}

// Get method from path, "/Carla/i/method" -> "method"
const int offset = (pluginId >= 10) ? 5 : 4;
char method[32] = { 0 };
strncpy(method, path + (nameSize + offset), 31);
char method[32] = { 0 };
std::strncpy(method, path + (nameSize + offset), 31);

if (method[0] == '\0')
{
carla_stderr("CarlaEngineOsc::handleMessage(\"%s\", ...) - received message without method", path);
carla_stderr("CarlaEngineOsc::handleMessage(%s, \"%s\", ...) - received message without method", bool2str(isTCP), path);
return 1;
}

// Common OSC methods (DSSI and internal UIs)
// Common OSC methods (DSSI and bridge UIs)
if (strcmp(method, "update") == 0)
{
const lo_address source = lo_message_get_source(msg);
@@ -275,6 +298,8 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
return handleMsgSetBalanceLeft(plugin, argc, argv, types);
if (strcmp(method, "set_balance_right") == 0)
return handleMsgSetBalanceRight(plugin, argc, argv, types);
if (strcmp(method, "set_panning") == 0)
return handleMsgSetPanning(plugin, argc, argv, types);
if (strcmp(method, "set_parameter_value") == 0)
return handleMsgSetParameterValue(plugin, argc, argv, types);
if (strcmp(method, "set_parameter_midi_cc") == 0)
@@ -290,56 +315,52 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
if (strcmp(method, "note_off") == 0)
return handleMsgNoteOff(plugin, argc, argv, types);

#if 0 // FIXME
// Plugin Bridges
if ((plugin->hints() & PLUGIN_IS_BRIDGE) > 0 && strlen(method) > 11 && strncmp(method, "bridge_", 7) == 0)
{
if (strcmp(method+7, "set_inpeak") == 0)
return handleMsgBridgeSetInPeak(plugin, argc, argv, types);
if (strcmp(method+7, "set_outpeak") == 0)
return handleMsgBridgeSetOutPeak(plugin, argc, argv, types);
if (strcmp(method+7, "set_peaks") == 0)
return handleMsgBridgeSetPeaks(plugin, argc, argv, types);
if (strcmp(method+7, "audio_count") == 0)
return plugin->setOscBridgeInfo(PluginBridgeAudioCount, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeAudioCount, argc, argv, types);
if (strcmp(method+7, "midi_count") == 0)
return plugin->setOscBridgeInfo(PluginBridgeMidiCount, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeMidiCount, argc, argv, types);
if (strcmp(method+7, "parameter_count") == 0)
return plugin->setOscBridgeInfo(PluginBridgeParameterCount, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeParameterCount, argc, argv, types);
if (strcmp(method+7, "program_count") == 0)
return plugin->setOscBridgeInfo(PluginBridgeProgramCount, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeProgramCount, argc, argv, types);
if (strcmp(method+7, "midi_program_count") == 0)
return plugin->setOscBridgeInfo(PluginBridgeMidiProgramCount, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeMidiProgramCount, argc, argv, types);
if (strcmp(method+7, "plugin_info") == 0)
return plugin->setOscBridgeInfo(PluginBridgePluginInfo, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgePluginInfo, argc, argv, types);
if (strcmp(method+7, "parameter_info") == 0)
return plugin->setOscBridgeInfo(PluginBridgeParameterInfo, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeParameterInfo, argc, argv, types);
if (strcmp(method+7, "parameter_data") == 0)
return plugin->setOscBridgeInfo(PluginBridgeParameterData, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeParameterData, argc, argv, types);
if (strcmp(method+7, "parameter_ranges") == 0)
return plugin->setOscBridgeInfo(PluginBridgeParameterRanges, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeParameterRanges, argc, argv, types);
if (strcmp(method+7, "program_info") == 0)
return plugin->setOscBridgeInfo(PluginBridgeProgramInfo, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeProgramInfo, argc, argv, types);
if (strcmp(method+7, "midi_program_info") == 0)
return plugin->setOscBridgeInfo(PluginBridgeMidiProgramInfo, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeMidiProgramInfo, argc, argv, types);
if (strcmp(method+7, "configure") == 0)
return plugin->setOscBridgeInfo(PluginBridgeConfigure, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeConfigure, argc, argv, types);
if (strcmp(method+7, "set_parameter_value") == 0)
return plugin->setOscBridgeInfo(PluginBridgeSetParameterValue, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeSetParameterValue, argc, argv, types);
if (strcmp(method+7, "set_default_value") == 0)
return plugin->setOscBridgeInfo(PluginBridgeSetDefaultValue, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeSetDefaultValue, argc, argv, types);
if (strcmp(method+7, "set_program") == 0)
return plugin->setOscBridgeInfo(PluginBridgeSetProgram, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeSetProgram, argc, argv, types);
if (strcmp(method+7, "set_midi_program") == 0)
return plugin->setOscBridgeInfo(PluginBridgeSetMidiProgram, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeSetMidiProgram, argc, argv, types);
if (strcmp(method+7, "set_custom_data") == 0)
return plugin->setOscBridgeInfo(PluginBridgeSetCustomData, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeSetCustomData, argc, argv, types);
if (strcmp(method+7, "set_chunk_data") == 0)
return plugin->setOscBridgeInfo(PluginBridgeSetChunkData, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeSetChunkData, argc, argv, types);
if (strcmp(method+7, "update") == 0)
return plugin->setOscBridgeInfo(PluginBridgeUpdateNow, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeUpdateNow, argc, argv, types);
if (strcmp(method+7, "error") == 0)
return plugin->setOscBridgeInfo(PluginBridgeError, argc, argv, types);
return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeError, argc, argv, types);
}
#endif
#endif

// Plugin-specific methods, FIXME
@@ -357,7 +378,7 @@ int CarlaEngineOsc::handleMessage(const char* const path, const int argc, const
// -----------------------------------------------------------------------

#ifndef BUILD_BRIDGE
int CarlaEngineOsc::handleMsgRegister(const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source)
int CarlaEngineOsc::handleMsgRegister(const bool isTCP, const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source)
{
carla_debug("CarlaEngineOsc::handleMsgRegister()");
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "s");
@@ -375,14 +396,14 @@ int CarlaEngineOsc::handleMsgRegister(const int argc, const lo_arg* const* const
{
const char* host = lo_address_get_hostname(source);
const char* port = lo_address_get_port(source);
fControlData.source = lo_address_new_with_proto(LO_TCP, host, port);
fControlData.source = lo_address_new_with_proto(isTCP ? LO_TCP : LO_UDP, host, port);
}

{
char* host = lo_url_get_hostname(url);
char* port = lo_url_get_port(url);
fControlData.path = carla_strdup_free(lo_url_get_path(url));
fControlData.target = lo_address_new_with_proto(LO_TCP, host, port);
fControlData.target = lo_address_new_with_proto(isTCP ? LO_TCP : LO_UDP, host, port);

std::free(host);
std::free(port);
@@ -436,7 +457,6 @@ int CarlaEngineOsc::handleMsgConfigure(CARLA_ENGINE_OSC_HANDLE_ARGS2)
const char* const key = (const char*)&argv[0]->s;
const char* const value = (const char*)&argv[1]->s;

// FIXME
plugin->setCustomData(CUSTOM_DATA_STRING, key, value, false);

return 0;
@@ -463,10 +483,18 @@ int CarlaEngineOsc::handleMsgProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2)
{
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "ii");

const uint32_t bank = argv[0]->i;
const uint32_t program = argv[1]->i;
const int32_t bank = argv[0]->i;
const int32_t program = argv[1]->i;

CARLA_SAFE_ASSERT_INT(bank >= 0, bank);
CARLA_SAFE_ASSERT_INT(program >= 0, program);

if (bank < 0)
return 1;
if (program < 0)
return 1;

plugin->setMidiProgramById(bank, program, false, true, true, true);
plugin->setMidiProgramById(static_cast<uint32_t>(bank), static_cast<uint32_t>(program), false, true, true, true);

return 0;
}
@@ -474,18 +502,22 @@ int CarlaEngineOsc::handleMsgProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2)
{
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "i");

const uint32_t program = argv[0]->i;
const int32_t program = argv[0]->i;

if (program < plugin->programCount())
CARLA_SAFE_ASSERT_INT(program >= 0, program);

if (program < 0)
return 1;

if (program < static_cast<int32_t>(plugin->programCount()))
{
plugin->setProgram(program, false, true, true, true);
return 0;
}

carla_stderr("CarlaEngineOsc::handleMsgProgram() - programId '%i' out of bounds", program);
return 1;
}

return 1;
}

int CarlaEngineOsc::handleMsgMidi(CARLA_ENGINE_OSC_HANDLE_ARGS2)
@@ -493,33 +525,48 @@ int CarlaEngineOsc::handleMsgMidi(CARLA_ENGINE_OSC_HANDLE_ARGS2)
carla_debug("CarlaEngineOsc::handleMsgMidi()");
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "m");

if (plugin->midiInCount() > 0)
if (plugin->midiInCount() == 0)
{
const uint8_t* const data = argv[0]->m;
uint8_t status = data[1];
uint8_t channel = status & 0x0F;
carla_stderr("CarlaEngineOsc::handleMsgMidi() - recived midi when plugin has no midi inputs");
return 1;
}

// Fix bad note-off
if (MIDI_IS_STATUS_NOTE_ON(status) && data[3] == 0)
status -= 0x10;
const uint8_t* const data = argv[0]->m;
uint8_t status = data[1];
uint8_t channel = status & 0x0F;

if (MIDI_IS_STATUS_NOTE_OFF(status))
{
uint8_t note = data[2];
plugin->sendMidiSingleNote(channel, note, 0, false, true, true);
}
else if (MIDI_IS_STATUS_NOTE_ON(status))
{
uint8_t note = data[2];
uint8_t velo = data[3];
plugin->sendMidiSingleNote(channel, note, velo, false, true, true);
}
// Fix bad note-off
if (MIDI_IS_STATUS_NOTE_ON(status) && data[3] == 0)
status -= 0x10;

return 0;
if (MIDI_IS_STATUS_NOTE_OFF(status))
{
const uint8_t note = data[2];

CARLA_SAFE_ASSERT_INT(note < MAX_MIDI_NOTE, note);

if (note >= MAX_MIDI_NOTE)
return 1;

plugin->sendMidiSingleNote(channel, note, 0, false, true, true);
}
else if (MIDI_IS_STATUS_NOTE_ON(status))
{
const uint8_t note = data[2];
const uint8_t velo = data[3];

carla_stderr("CarlaEngineOsc::handleMsgMidi() - recived midi when plugin has no midi inputs");
return 1;
CARLA_SAFE_ASSERT_INT(note < MAX_MIDI_NOTE, note);
CARLA_SAFE_ASSERT_INT(velo < MAX_MIDI_VALUE, velo);

if (note >= MAX_MIDI_NOTE)
return 1;
if (velo >= MAX_MIDI_VALUE)
return 1;

plugin->sendMidiSingleNote(channel, note, velo, false, true, true);
}

return 0;
}

int CarlaEngineOsc::handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1)
@@ -542,7 +589,8 @@ int CarlaEngineOsc::handleMsgSetActive(CARLA_ENGINE_OSC_HANDLE_ARGS2)
carla_debug("CarlaEngineOsc::handleMsgSetActive()");
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "i");

const bool active = (bool)argv[0]->i;
const bool active = (argv[0]->i != 0);

plugin->setActive(active, false, true);

return 0;
@@ -554,6 +602,7 @@ int CarlaEngineOsc::handleMsgSetDryWet(CARLA_ENGINE_OSC_HANDLE_ARGS2)
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f");

const float value = argv[0]->f;

plugin->setDryWet(value, false, true);

return 0;
@@ -565,6 +614,7 @@ int CarlaEngineOsc::handleMsgSetVolume(CARLA_ENGINE_OSC_HANDLE_ARGS2)
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f");

const float value = argv[0]->f;

plugin->setVolume(value, false, true);

return 0;
@@ -576,6 +626,7 @@ int CarlaEngineOsc::handleMsgSetBalanceLeft(CARLA_ENGINE_OSC_HANDLE_ARGS2)
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f");

const float value = argv[0]->f;

plugin->setBalanceLeft(value, false, true);

return 0;
@@ -587,11 +638,24 @@ int CarlaEngineOsc::handleMsgSetBalanceRight(CARLA_ENGINE_OSC_HANDLE_ARGS2)
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f");

const float value = argv[0]->f;

plugin->setBalanceRight(value, false, true);

return 0;
}

int CarlaEngineOsc::handleMsgSetPanning(CARLA_ENGINE_OSC_HANDLE_ARGS2)
{
carla_debug("CarlaEngineOsc::handleMsgSetPanning()");
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f");

const float value = argv[0]->f;

plugin->setPanning(value, false, true);

return 0;
}

int CarlaEngineOsc::handleMsgSetParameterValue(CARLA_ENGINE_OSC_HANDLE_ARGS2)
{
carla_debug("CarlaEngineOsc::handleMsgSetParameterValue()");
@@ -599,7 +663,13 @@ int CarlaEngineOsc::handleMsgSetParameterValue(CARLA_ENGINE_OSC_HANDLE_ARGS2)

const int32_t index = argv[0]->i;
const float value = argv[1]->f;
plugin->setParameterValue(index, value, true, false, true);

CARLA_SAFE_ASSERT_INT(index >= 0, index);

if (index < 0)
return 1;

plugin->setParameterValue(static_cast<uint32_t>(index), value, true, false, true);

return 0;
}
@@ -611,7 +681,16 @@ int CarlaEngineOsc::handleMsgSetParameterMidiCC(CARLA_ENGINE_OSC_HANDLE_ARGS2)

const int32_t index = argv[0]->i;
const int32_t cc = argv[1]->i;
plugin->setParameterMidiCC(index, cc, false, true);

CARLA_SAFE_ASSERT_INT(index >= 0, index);
CARLA_SAFE_ASSERT_INT(cc >= -1 && cc <= 0x5F, cc);

if (index < 0)
return 1;
if (cc < -1 || cc > 0x5F)
return 1;

plugin->setParameterMidiCC(static_cast<uint32_t>(index), static_cast<int16_t>(cc), false, true);

return 0;
}
@@ -623,7 +702,16 @@ int CarlaEngineOsc::handleMsgSetParameterMidiChannel(CARLA_ENGINE_OSC_HANDLE_ARG

const int32_t index = argv[0]->i;
const int32_t channel = argv[1]->i;
plugin->setParameterMidiChannel(index, channel, false, true);

CARLA_SAFE_ASSERT_INT(index >= 0, index);
CARLA_SAFE_ASSERT_INT(channel >= 0 && channel < MAX_MIDI_CHANNELS, channel);

if (index < 0)
return 1;
if (channel < 0 || channel >= MAX_MIDI_CHANNELS)
return 1;

plugin->setParameterMidiChannel(static_cast<uint32_t>(index), static_cast<uint8_t>(channel), false, true);

return 0;
}
@@ -634,6 +722,7 @@ int CarlaEngineOsc::handleMsgSetProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2)
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "i");

const int32_t index = argv[0]->i;

plugin->setProgram(index, true, false, true, true);

return 0;
@@ -645,6 +734,7 @@ int CarlaEngineOsc::handleMsgSetMidiProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2)
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "i");

const int32_t index = argv[0]->i;

plugin->setMidiProgram(index, true, false, true, true);

return 0;
@@ -658,7 +748,19 @@ int CarlaEngineOsc::handleMsgNoteOn(CARLA_ENGINE_OSC_HANDLE_ARGS2)
const int32_t channel = argv[0]->i;
const int32_t note = argv[1]->i;
const int32_t velo = argv[2]->i;
plugin->sendMidiSingleNote(channel, note, velo, true, false, true);

CARLA_SAFE_ASSERT_INT(channel >= 0 && channel < MAX_MIDI_CHANNELS, channel);
CARLA_SAFE_ASSERT_INT(note >= 0 && note < MAX_MIDI_NOTE, note);
CARLA_SAFE_ASSERT_INT(velo >= 0 && velo < MAX_MIDI_VALUE, velo);

if (channel < 0 || channel >= MAX_MIDI_CHANNELS)
return 1;
if (note < 0 || note >= MAX_MIDI_NOTE)
return 1;
if (velo < 0 || velo >= MAX_MIDI_VALUE)
return 1;

plugin->sendMidiSingleNote(static_cast<uint8_t>(channel), static_cast<uint8_t>(note), static_cast<uint8_t>(velo), true, false, true);

return 0;
}
@@ -670,34 +772,37 @@ int CarlaEngineOsc::handleMsgNoteOff(CARLA_ENGINE_OSC_HANDLE_ARGS2)

const int32_t channel = argv[0]->i;
const int32_t note = argv[1]->i;
plugin->sendMidiSingleNote(channel, note, 0, true, false, true);

return 0;
}
CARLA_SAFE_ASSERT_INT(channel >= 0 && channel < MAX_MIDI_CHANNELS, channel);
CARLA_SAFE_ASSERT_INT(note >= 0 && note < MAX_MIDI_NOTE, note);

#if 0
int CarlaEngineOsc::handleMsgBridgeSetInPeak(CARLA_ENGINE_OSC_HANDLE_ARGS2)
{
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "id");
if (channel < 0 || channel >= MAX_MIDI_CHANNELS)
return 1;
if (note < 0 || note >= MAX_MIDI_NOTE)
return 1;

const int32_t index = argv[0]->i;
const double value = argv[1]->d;
engine->setInputPeak(plugin->id(), index-1, value);
plugin->sendMidiSingleNote(static_cast<uint8_t>(channel), static_cast<uint8_t>(note), 0, true, false, true);

return 0;
}

int CarlaEngineOsc::handleMsgBridgeSetOutPeak(CARLA_ENGINE_OSC_HANDLE_ARGS2)
// FIXME - remove once IPC audio is implemented
int CarlaEngineOsc::handleMsgBridgeSetPeaks(CARLA_ENGINE_OSC_HANDLE_ARGS2)
{
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "id");
CARLA_ENGINE_OSC_CHECK_OSC_TYPES(4, "ffff");

const int32_t index = argv[0]->i;
const double value = argv[1]->d;
engine->setOutputPeak(plugin->id(), index-1, value);
const float in1 = argv[0]->f;
const float in2 = argv[1]->f;
const float out1 = argv[2]->f;
const float out2 = argv[3]->f;

float const inPeaks[CarlaEngine::MAX_PEAKS] = { in1, in2 };
float const outPeaks[CarlaEngine::MAX_PEAKS] = { out1, out2 };

kEngine->setPeaks(plugin->id(), inPeaks, outPeaks);

return 0;
}
#endif
#endif

CARLA_BACKEND_END_NAMESPACE

+ 33
- 27
source/backend/engine/CarlaEngineOsc.hpp View File

@@ -25,27 +25,27 @@
#define CARLA_ENGINE_OSC_HANDLE_ARGS1 CarlaPlugin* const plugin
#define CARLA_ENGINE_OSC_HANDLE_ARGS2 CarlaPlugin* const plugin, const int argc, const lo_arg* const* const argv, const char* const types

#define CARLA_ENGINE_OSC_CHECK_OSC_TYPES(/* argc, types, */ argcToCompare, typesToCompare) \
/* check argument count */ \
if (argc != argcToCompare) \
{ \
#define CARLA_ENGINE_OSC_CHECK_OSC_TYPES(/* argc, types, */ argcToCompare, typesToCompare) \
/* check argument count */ \
if (argc != argcToCompare) \
{ \
carla_stderr("CarlaEngineOsc::%s() - argument count mismatch: %i != %i", __FUNCTION__, argc, argcToCompare); \
return 1; \
} \
if (argc > 0) \
{ \
/* check for nullness */ \
if (! (types && typesToCompare)) \
{ \
return 1; \
} \
if (argc > 0) \
{ \
/* check for nullness */ \
if (! (types && typesToCompare)) \
{ \
carla_stderr("CarlaEngineOsc::%s() - argument types are null", __FUNCTION__); \
return 1; \
} \
/* check argument types */ \
if (strcmp(types, typesToCompare) != 0) \
{ \
return 1; \
} \
/* check argument types */ \
if (strcmp(types, typesToCompare) != 0) \
{ \
carla_stderr("CarlaEngineOsc::%s() - argument types mismatch: '%s' != '%s'", __FUNCTION__, types, typesToCompare); \
return 1; \
} \
return 1; \
} \
}

CARLA_BACKEND_START_NAMESPACE
@@ -81,7 +81,7 @@ public:
#ifndef BUILD_BRIDGE
bool isControlRegistered() const
{
return bool(fControlData.target);
return (fControlData.target != nullptr);
}

const CarlaOscData* getControlData() const
@@ -108,10 +108,10 @@ private:

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

int handleMessage(const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg);
int handleMessage(const bool isTCP, const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg);

#ifndef BUILD_BRIDGE
int handleMsgRegister(const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source);
int handleMsgRegister(const bool isTCP, const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source);
int handleMsgUnregister();
#endif

@@ -128,6 +128,7 @@ private:
int handleMsgSetVolume(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgSetBalanceLeft(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgSetBalanceRight(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgSetPanning(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgSetParameterValue(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgSetParameterMidiCC(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgSetParameterMidiChannel(CARLA_ENGINE_OSC_HANDLE_ARGS2);
@@ -136,8 +137,8 @@ private:
int handleMsgNoteOn(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgNoteOff(CARLA_ENGINE_OSC_HANDLE_ARGS2);

int handleMsgBridgeSetInPeak(CARLA_ENGINE_OSC_HANDLE_ARGS2);
int handleMsgBridgeSetOutPeak(CARLA_ENGINE_OSC_HANDLE_ARGS2);
// FIXME - remove once IPC audio is implemented
int handleMsgBridgeSetPeaks(CARLA_ENGINE_OSC_HANDLE_ARGS2);
#endif

#ifdef WANT_LV2
@@ -149,17 +150,22 @@ private:

static void osc_error_handler_TCP(int num, const char* msg, const char* path)
{
carla_stderr2("CarlaEngineOsc::osc_error_handler_TCP(%i, \"%s\", \"%s\")", num, msg, path);
carla_stderr("CarlaEngineOsc::osc_error_handler_TCP(%i, \"%s\", \"%s\")", num, msg, path);
}

static void osc_error_handler_UDP(int num, const char* msg, const char* path)
{
carla_stderr2("CarlaEngineOsc::osc_error_handler_UDP(%i, \"%s\", \"%s\")", num, msg, path);
carla_stderr("CarlaEngineOsc::osc_error_handler_UDP(%i, \"%s\", \"%s\")", num, msg, path);
}

static int osc_message_handler(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg, void* userData)
static int osc_message_handler_TCP(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg, void* userData)
{
return ((CarlaEngineOsc*)userData)->handleMessage(path, argc, argv, types, msg);
return ((CarlaEngineOsc*)userData)->handleMessage(true, path, argc, argv, types, msg);
}

static int osc_message_handler_UDP(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg, void* userData)
{
return ((CarlaEngineOsc*)userData)->handleMessage(false, path, argc, argv, types, msg);
}

CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineOsc)


source/backend/plugin/carla_bridge.cpp → source/backend/plugin/CarlaBridge.cpp View File

@@ -15,7 +15,7 @@
* For a full copy of the GNU General Public License see the GPL.txt file
*/

#include "carla_plugin_internal.hpp"
#include "CarlaPluginInternal.hpp"

#include <QtCore/QDir>
#include <QtCore/QFile>
@@ -1027,4 +1027,13 @@ CarlaPlugin* CarlaPlugin::newBridge(const Initializer& init, BinaryType btype, P
return nullptr;
}

// -------------------------------------------------------------------
// Bridge Helper

int CarlaPluginSetOscBridgeInfo(CarlaPlugin* const plugin, const PluginBridgeInfoType type,
const int argc, const lo_arg* const* const argv, const char* const types)
{
return ((BridgePlugin*)plugin)->setOscPluginBridgeInfo(type, argc, argv, types);
}

CARLA_BACKEND_END_NAMESPACE

source/backend/plugin/carla_plugin.cpp → source/backend/plugin/CarlaPlugin.cpp View File

@@ -15,10 +15,10 @@
* For a full copy of the GNU General Public License see the GPL.txt file
*/

#include "carla_plugin_internal.hpp"
#include "carla_lib_utils.hpp"
#include "carla_state_utils.hpp"
#include "carla_midi.h"
#include "CarlaPluginInternal.hpp"
#include "CarlaLibUtils.hpp"
#include "CarlaStateUtils.hpp"
#include "CarlaMIDI.h"

//#include <QtGui/QtEvents>

@@ -52,14 +52,6 @@ CarlaEngineAudioPort* CarlaPluginGetAudioOutPort(CarlaPlugin* const plugin, uint
return CarlaPluginProtectedData::getAudioOutPort(plugin, index);
}

#if 0
int CarlaPluginSetOscBridgeInfo(CarlaPlugin* const plugin, const PluginBridgeInfoType type,
const int argc, const lo_arg* const* const argv, const char* const types)
{
return ((BridgePlugin*)plugin)->setOscPluginBridgeInfo(type, argc, argv, types);
}
#endif

// -------------------------------------------------------------------
// Constructor and destructor


source/backend/plugin/carla_plugin.pro → source/backend/plugin/CarlaPlugin.pro View File


source/backend/plugin/carla_plugin_internal.hpp → source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -43,33 +43,6 @@ CARLA_BACKEND_START_NAMESPACE

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

#ifndef BUILD_BRIDGE
enum PluginBridgeInfoType {
kPluginBridgeAudioCount,
kPluginBridgeMidiCount,
kPluginBridgeParameterCount,
kPluginBridgeProgramCount,
kPluginBridgeMidiProgramCount,
kPluginBridgePluginInfo,
kPluginBridgeParameterInfo,
kPluginBridgeParameterData,
kPluginBridgeParameterRanges,
kPluginBridgeProgramInfo,
kPluginBridgeMidiProgramInfo,
kPluginBridgeConfigure,
kPluginBridgeSetParameterValue,
kPluginBridgeSetDefaultValue,
kPluginBridgeSetProgram,
kPluginBridgeSetMidiProgram,
kPluginBridgeSetCustomData,
kPluginBridgeSetChunkData,
kPluginBridgeUpdateNow,
kPluginBridgeError
};
#endif

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

const unsigned short MAX_RT_EVENTS = 128;
const unsigned short MAX_MIDI_EVENTS = 512;


source/backend/plugin/carla_plugin_thread.cpp → source/backend/plugin/CarlaPluginThread.cpp View File


source/backend/plugin/carla_plugin_thread.hpp → source/backend/plugin/CarlaPluginThread.hpp View File


+ 7
- 3
source/includes/CarlaDefines.hpp View File

@@ -106,10 +106,14 @@
#endif

// Define CARLA_ASSERT*
#define CARLA_SAFE_ASSERT(cond) ((!(cond)) ? carla_assert(#cond, __FILE__, __LINE__) : pass())
#define CARLA_SAFE_ASSERT_INT(cond, value) ((!(cond)) ? carla_assert_int(#cond, __FILE__, __LINE__, value) : pass())
#define CARLA_SAFE_ASSERT_INT2(cond, v1, v2) ((!(cond)) ? carla_assert_int2(#cond, __FILE__, __LINE__, v1, v2) : pass())

#ifdef NDEBUG
# define CARLA_ASSERT(cond) ((!(cond)) ? carla_assert(#cond, __FILE__, __LINE__) : pass())
# define CARLA_ASSERT_INT(cond, value) ((!(cond)) ? carla_assert_int(#cond, __FILE__, __LINE__, value) : pass())
# define CARLA_ASSERT_INT2(cond, v1, v2) ((!(cond)) ? carla_assert_int2(#cond, __FILE__, __LINE__, v1, v2) : pass())
# define CARLA_ASSERT CARLA_SAFE_ASSERT
# define CARLA_ASSERT_INT CARLA_SAFE_ASSERT_INT
# define CARLA_ASSERT_INT2 CARLA_SAFE_ASSERT_INT2
#else
# define CARLA_ASSERT(cond) assert(cond)
# define CARLA_ASSERT_INT(cond, value) assert(cond)


+ 1
- 0
source/tests/Makefile View File

@@ -9,6 +9,7 @@ include ../Makefile.mk
# --------------------------------------------------------------

BUILD_CXX_FLAGS += -I../backend -I../includes -I../utils -Wall -Wextra
BUILD_CXX_FLAGS += -DWANT_JACK -DWANT_RTAUDIO
# BUILD_CXX_FLAGS += -isystem /usr/include/qt4
# BUILD_CXX_FLAGS += -D_FORTIFY_SOURCE=2 -fstack-protector
# BUILD_CXX_FLAGS += -I/opt/mingw32/include


Loading…
Cancel
Save