Browse Source

Misc fixing, needed for pizmidi plugs

tags/1.9.4
falkTX 11 years ago
parent
commit
70dea828b9
3 changed files with 42 additions and 30 deletions
  1. +2
    -2
      source/backend/plugin/CarlaPluginInternal.hpp
  2. +26
    -10
      source/backend/plugin/VstPlugin.cpp
  3. +14
    -18
      source/utils/CarlaString.hpp

+ 2
- 2
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -560,12 +560,12 @@ struct CarlaPluginProtectedData {
if (client->isActive()) if (client->isActive())
client->deactivate(); client->deactivate();


clearBuffers();

delete client; delete client;
client = nullptr; client = nullptr;
} }


clearBuffers();

for (auto it = custom.begin(); it.valid(); it.next()) for (auto it = custom.begin(); it.valid(); it.next())
{ {
CustomData& cData(*it); CustomData& cData(*it);


+ 26
- 10
source/backend/plugin/VstPlugin.cpp View File

@@ -1790,24 +1790,41 @@ protected:
return 0; return 0;
if (ptr == nullptr) if (ptr == nullptr)
return 0; return 0;
#if 0
if (! isProcessing)
if (! fIsProcessing)
{ {
carla_stderr2("VstPlugin::handleAudioMasterProcessEvents(%p) - received MIDI out events outside audio thread, ignoring", vstEvents);
carla_stderr2("audioMasterProcessEvents(%p) - received MIDI out events outside audio thread, ignoring", ptr);
return 0; return 0;
} }


for (int32_t i=0; i < vstEvents->numEvents && events.numEvents < MAX_MIDI_EVENTS*2; ++i)
if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
return 0;


{
const VstEvents* const vstEvents((const VstEvents*)ptr);

for (int32_t i=0; i < vstEvents->numEvents && i < MAX_MIDI_EVENTS*2; ++i)
{ {
if (! vstEvents->events[i])
if (vstEvents->events[i] == nullptr)
break; break;


const VstMidiEvent* const vstMidiEvent = (const VstMidiEvent*)vstEvents->events[i]; const VstMidiEvent* const vstMidiEvent = (const VstMidiEvent*)vstEvents->events[i];


if (vstMidiEvent->type == kVstMidiType)
memcpy(&midiEvents[events.numEvents++], vstMidiEvent, sizeof(VstMidiEvent));
if (vstMidiEvent->type != kVstMidiType)
continue;

// reverse-find first free event, and put it there
for (uint32_t j=(MAX_MIDI_EVENTS*2)-1; j >= fMidiEventCount; --j)
{
if (fMidiEvents[j].type == 0)
{
std::memcpy(&fMidiEvents[j], vstMidiEvent, sizeof(VstMidiEvent));
break;
}
}
} }
#endif
}

ret = 1; ret = 1;
break; break;


@@ -2210,13 +2227,12 @@ public:
// set default options // set default options
fOptions = 0x0; fOptions = 0x0;


fOptions |= PLUGIN_OPTION_FIXED_BUFFER;
fOptions |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; fOptions |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;


if (fEffect->flags & effFlagsProgramChunks) if (fEffect->flags & effFlagsProgramChunks)
fOptions |= PLUGIN_OPTION_USE_CHUNKS; fOptions |= PLUGIN_OPTION_USE_CHUNKS;


//if (mIns > 0)
if (vstPluginCanDo(fEffect, "receiveVstEvents") || vstPluginCanDo(fEffect, "receiveVstMidiEvent") || (fEffect->flags & effFlagsIsSynth) > 0 || (fHints & PLUGIN_WANTS_MIDI_INPUT))
{ {
fOptions |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; fOptions |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE;
fOptions |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; fOptions |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH;


+ 14
- 18
source/utils/CarlaString.hpp View File

@@ -50,47 +50,43 @@ public:


explicit CarlaString(const int value) explicit CarlaString(const int value)
{ {
const size_t strBufSize = static_cast<size_t>(std::abs(value/10) + 3);
char strBuf[strBufSize];
std::snprintf(strBuf, strBufSize, "%d", value);
char strBuf[0xff] = { '\0' };
std::snprintf(strBuf, 0xff, "%d", value);


_init(); _init();
_dup(strBuf, strBufSize);
_dup(strBuf);
} }


explicit CarlaString(const unsigned int value, const bool hexadecimal = false) explicit CarlaString(const unsigned int value, const bool hexadecimal = false)
{ {
const size_t strBufSize = value/10 + 2 + (hexadecimal ? 2 : 0);
char strBuf[strBufSize];
std::snprintf(strBuf, strBufSize, hexadecimal ? "0x%x" : "%u", value);
char strBuf[0xff] = { '\0' };
std::snprintf(strBuf, 0xff, hexadecimal ? "0x%x" : "%u", value);


_init(); _init();
_dup(strBuf, strBufSize);
_dup(strBuf);
} }


explicit CarlaString(const long int value) explicit CarlaString(const long int value)
{ {
const size_t strBufSize = static_cast<size_t>(std::abs(value/10) + 3);
char strBuf[strBufSize];
std::snprintf(strBuf, strBufSize, "%ld", value);
char strBuf[0xff] = { '\0' };
std::snprintf(strBuf, 0xff, "%ld", value);


_init(); _init();
_dup(strBuf, strBufSize);
_dup(strBuf);
} }


explicit CarlaString(const unsigned long int value, const bool hexadecimal = false) explicit CarlaString(const unsigned long int value, const bool hexadecimal = false)
{ {
const size_t strBufSize = value/10 + 2 + (hexadecimal ? 2 : 0);
char strBuf[strBufSize];
std::snprintf(strBuf, strBufSize, hexadecimal ? "0x%lx" : "%lu", value);
char strBuf[0xff] = { '\0' };
std::snprintf(strBuf, 0xff, hexadecimal ? "0x%lx" : "%lu", value);


_init(); _init();
_dup(strBuf, strBufSize);
_dup(strBuf);
} }


explicit CarlaString(const float value) explicit CarlaString(const float value)
{ {
char strBuf[0xff];
char strBuf[0xff] = { '\0' };
std::snprintf(strBuf, 0xff, "%f", value); std::snprintf(strBuf, 0xff, "%f", value);


_init(); _init();
@@ -99,7 +95,7 @@ public:


explicit CarlaString(const double value) explicit CarlaString(const double value)
{ {
char strBuf[0xff];
char strBuf[0xff] = { '\0' };
std::snprintf(strBuf, 0xff, "%g", value); std::snprintf(strBuf, 0xff, "%g", value);


_init(); _init();


Loading…
Cancel
Save