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;
#endif

bool usingChunk = false;

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

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

if (data != nullptr && dataSize > 0)
{
usingChunk = true;
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)
continue;

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

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

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
stateParameter->midiCC = paramData.midiCC;
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);

// ---------------------------------------------------------------
// 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())
{
@@ -780,7 +766,7 @@ void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
{
//CARLA_SAFE_ASSERT(stateParameter->isInput == (pData

if (stateParameter->isInput)
if (! stateParameter->dummy)
{
if (pData->param.data[index].hints & PARAMETER_USES_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

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

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

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

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

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

content << parameterXml;


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

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

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


Loading…
Cancel
Save