Browse Source

Save parameter midi CC mapping for plugins that use chunks

Closes #116
tags/1.9.6
falkTX 10 years ago
parent
commit
fe00c682af
3 changed files with 17 additions and 31 deletions
  1. +12
    -26
      source/backend/plugin/CarlaPlugin.cpp
  2. +4
    -4
      source/utils/CarlaStateUtils.cpp
  3. +1
    -1
      source/utils/CarlaStateUtils.hpp

+ 12
- 26
source/backend/plugin/CarlaPlugin.cpp View File

@@ -516,6 +516,8 @@ const CarlaStateSave& CarlaPlugin::getStateSave(const bool callPrepareForSave)
pData->stateSave.ctrlChannel = pData->ctrlChannel; pData->stateSave.ctrlChannel = pData->ctrlChannel;
#endif #endif


bool usingChunk = false;

// --------------------------------------------------------------- // ---------------------------------------------------------------
// Chunk // Chunk


@@ -526,29 +528,8 @@ const CarlaStateSave& CarlaPlugin::getStateSave(const bool callPrepareForSave)


if (data != nullptr && dataSize > 0) if (data != nullptr && dataSize > 0)
{ {
usingChunk = true;
pData->stateSave.chunk = CarlaString::asBase64(data, dataSize).dup(); pData->stateSave.chunk = CarlaString::asBase64(data, dataSize).dup();

// Don't save anything else if using chunks
// Well, except properties

for (LinkedList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next())
{
const CustomData& cData(it.getValue(kCustomDataFallback));
CARLA_SAFE_ASSERT_CONTINUE(cData.isValid());

if (std::strcmp(cData.type, CUSTOM_DATA_TYPE_PROPERTY) != 0)
continue;

CarlaStateSave::CustomData* stateCustomData(new CarlaStateSave::CustomData());

stateCustomData->type = carla_strdup(cData.type);
stateCustomData->key = carla_strdup(cData.key);
stateCustomData->value = carla_strdup(cData.value);

pData->stateSave.customData.append(stateCustomData);
}

return pData->stateSave;
} }
} }


@@ -584,10 +565,15 @@ const CarlaStateSave& CarlaPlugin::getStateSave(const bool callPrepareForSave)
if ((paramData.hints & PARAMETER_IS_ENABLED) == 0) if ((paramData.hints & PARAMETER_IS_ENABLED) == 0)
continue; continue;


const bool dummy = paramData.type != PARAMETER_INPUT || usingChunk;

if (dummy && paramData.midiCC <= -1)
continue;

CarlaStateSave::Parameter* const stateParameter(new CarlaStateSave::Parameter()); CarlaStateSave::Parameter* const stateParameter(new CarlaStateSave::Parameter());


stateParameter->isInput = (paramData.type == PARAMETER_INPUT);
stateParameter->index = paramData.index;
stateParameter->dummy = dummy;
stateParameter->index = paramData.index;
#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
stateParameter->midiCC = paramData.midiCC; stateParameter->midiCC = paramData.midiCC;
stateParameter->midiChannel = paramData.midiChannel; stateParameter->midiChannel = paramData.midiChannel;
@@ -633,7 +619,7 @@ void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
const bool usesMultiProgs(pData->extraHints & PLUGIN_EXTRA_HINT_USES_MULTI_PROGS); const bool usesMultiProgs(pData->extraHints & PLUGIN_EXTRA_HINT_USES_MULTI_PROGS);


// --------------------------------------------------------------- // ---------------------------------------------------------------
// Part 1 - PRE-set custom data (only that which reload programs)
// Part 1 - PRE-set custom data (only those which reload programs)


for (CarlaStateSave::CustomDataItenerator it = stateSave.customData.begin(); it.valid(); it.next()) for (CarlaStateSave::CustomDataItenerator it = stateSave.customData.begin(); it.valid(); it.next())
{ {
@@ -780,7 +766,7 @@ void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
{ {
//CARLA_SAFE_ASSERT(stateParameter->isInput == (pData //CARLA_SAFE_ASSERT(stateParameter->isInput == (pData


if (stateParameter->isInput)
if (! stateParameter->dummy)
{ {
if (pData->param.data[index].hints & PARAMETER_USES_SAMPLERATE) if (pData->param.data[index].hints & PARAMETER_USES_SAMPLERATE)
stateParameter->value *= sampleRate; stateParameter->value *= sampleRate;


+ 4
- 4
source/utils/CarlaStateUtils.cpp View File

@@ -116,7 +116,7 @@ static const char* xmlSafeStringCharDup(const String& string, const bool toXml)
// StateParameter // StateParameter


CarlaStateSave::Parameter::Parameter() noexcept CarlaStateSave::Parameter::Parameter() noexcept
: isInput(true),
: dummy(false),
index(-1), index(-1),
name(nullptr), name(nullptr),
symbol(nullptr), symbol(nullptr),
@@ -590,9 +590,6 @@ String CarlaStateSave::toString() const
if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0')
parameterXml << " <Symbol>" << xmlSafeString(stateParameter->symbol, true) << "</Symbol>\n"; parameterXml << " <Symbol>" << xmlSafeString(stateParameter->symbol, true) << "</Symbol>\n";


if (stateParameter->isInput)
parameterXml << " <Value>" << String(stateParameter->value, 15) << "</Value>\n";

#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
if (stateParameter->midiCC > 0) if (stateParameter->midiCC > 0)
{ {
@@ -601,6 +598,9 @@ String CarlaStateSave::toString() const
} }
#endif #endif


if (! stateParameter->dummy)
parameterXml << " <Value>" << String(stateParameter->value, 15) << "</Value>\n";

parameterXml << " </Parameter>\n"; parameterXml << " </Parameter>\n";


content << parameterXml; content << parameterXml;


+ 1
- 1
source/utils/CarlaStateUtils.hpp View File

@@ -29,7 +29,7 @@ CARLA_BACKEND_START_NAMESPACE


struct CarlaStateSave { struct CarlaStateSave {
struct Parameter { struct Parameter {
bool isInput;
bool dummy; // if true only midiChannel/CC are used
int32_t index; int32_t index;
const char* name; const char* name;
const char* symbol; const char* symbol;


Loading…
Cancel
Save