Signed-off-by: falkTX <falktx@falktx.com>tags/v2.1-rc1
| @@ -2058,17 +2058,19 @@ public: | |||||
| if (fHandle2 == nullptr) | if (fHandle2 == nullptr) | ||||
| { | { | ||||
| fDescriptor->process(fHandle, fAudioInBuffers, fAudioOutBuffers, frames, fMidiInEvents, fMidiEventInCount); | |||||
| fDescriptor->process(fHandle, | |||||
| const_cast<const float**>(fAudioInBuffers), fAudioOutBuffers, frames, | |||||
| fMidiInEvents, fMidiEventInCount); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| fDescriptor->process(fHandle, | fDescriptor->process(fHandle, | ||||
| (pData->audioIn.count > 0) ? &fAudioInBuffers[0] : nullptr, | |||||
| (pData->audioIn.count > 0) ? const_cast<const float**>(&fAudioInBuffers[0]) : nullptr, | |||||
| (pData->audioOut.count > 0) ? &fAudioOutBuffers[0] : nullptr, | (pData->audioOut.count > 0) ? &fAudioOutBuffers[0] : nullptr, | ||||
| frames, fMidiInEvents, fMidiEventInCount); | frames, fMidiInEvents, fMidiEventInCount); | ||||
| fDescriptor->process(fHandle2, | fDescriptor->process(fHandle2, | ||||
| (pData->audioIn.count > 0) ? &fAudioInBuffers[1] : nullptr, | |||||
| (pData->audioIn.count > 0) ? const_cast<const float**>(&fAudioInBuffers[1]) : nullptr, | |||||
| (pData->audioOut.count > 0) ? &fAudioOutBuffers[1] : nullptr, | (pData->audioOut.count > 0) ? &fAudioOutBuffers[1] : nullptr, | ||||
| frames, fMidiInEvents, fMidiEventInCount); | frames, fMidiInEvents, fMidiEventInCount); | ||||
| } | } | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugin API | * Carla Native Plugin API | ||||
| * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -199,7 +199,8 @@ typedef struct { | |||||
| const char* (*ui_open_file)(NativeHostHandle handle, bool isDir, const char* title, const char* filter); | const char* (*ui_open_file)(NativeHostHandle handle, bool isDir, const char* title, const char* filter); | ||||
| const char* (*ui_save_file)(NativeHostHandle handle, bool isDir, const char* title, const char* filter); | const char* (*ui_save_file)(NativeHostHandle handle, bool isDir, const char* title, const char* filter); | ||||
| intptr_t (*dispatcher)(NativeHostHandle handle, NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt); | |||||
| intptr_t (*dispatcher)(NativeHostHandle handle, | |||||
| NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt); | |||||
| } NativeHostDescriptor; | } NativeHostDescriptor; | ||||
| @@ -244,12 +245,15 @@ typedef struct _NativePluginDescriptor { | |||||
| void (*activate)(NativePluginHandle handle); | void (*activate)(NativePluginHandle handle); | ||||
| void (*deactivate)(NativePluginHandle handle); | void (*deactivate)(NativePluginHandle handle); | ||||
| void (*process)(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount); | |||||
| void (*process)(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount); | |||||
| char* (*get_state)(NativePluginHandle handle); | char* (*get_state)(NativePluginHandle handle); | ||||
| void (*set_state)(NativePluginHandle handle, const char* data); | void (*set_state)(NativePluginHandle handle, const char* data); | ||||
| intptr_t (*dispatcher)(NativePluginHandle handle, NativePluginDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt); | |||||
| intptr_t (*dispatcher)(NativePluginHandle handle, | |||||
| NativePluginDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt); | |||||
| } NativePluginDescriptor; | } NativePluginDescriptor; | ||||
| @@ -282,7 +282,8 @@ protected: | |||||
| virtual void deactivate() {} | virtual void deactivate() {} | ||||
| virtual void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) = 0; | |||||
| virtual void process(const float** const inBuffer, float** const outBuffer, const uint32_t frames, | |||||
| const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) = 0; | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Plugin UI calls | // Plugin UI calls | ||||
| @@ -454,7 +455,9 @@ public: | |||||
| handlePtr->deactivate(); | handlePtr->deactivate(); | ||||
| } | } | ||||
| static void _process(NativePluginHandle handle, float** inBuffer, float** outBuffer, const uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void _process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, const uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| handlePtr->process(inBuffer, outBuffer, frames, midiEvents, midiEventCount); | handlePtr->process(inBuffer, outBuffer, frames, midiEvents, midiEventCount); | ||||
| } | } | ||||
| @@ -469,7 +472,8 @@ public: | |||||
| handlePtr->setState(data); | handlePtr->setState(data); | ||||
| } | } | ||||
| static intptr_t _dispatcher(NativePluginHandle handle, NativePluginDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt) | |||||
| static intptr_t _dispatcher(NativePluginHandle handle, | |||||
| NativePluginDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt) | |||||
| { | { | ||||
| switch(opcode) | switch(opcode) | ||||
| { | { | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2013-2018 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2013-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -118,7 +118,8 @@ protected: | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Plugin process calls | // Plugin process calls | ||||
| void process(float**, float** const outBuffer, const uint32_t frames, const NativeMidiEvent*, uint32_t) override | |||||
| void process(const float**, float** const outBuffer, const uint32_t frames, | |||||
| const NativeMidiEvent*, uint32_t) override | |||||
| { | { | ||||
| const NativeTimeInfo* const timePos(getTimeInfo()); | const NativeTimeInfo* const timePos(getTimeInfo()); | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2017 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -154,7 +154,8 @@ protected: | |||||
| fOutRight = 0.0f; | fOutRight = 0.0f; | ||||
| } | } | ||||
| void process(float** inputs, float**, const uint32_t frames, const NativeMidiEvent* const, const uint32_t) override | |||||
| void process(const float** inputs, float**, const uint32_t frames, | |||||
| const NativeMidiEvent* const, const uint32_t) override | |||||
| { | { | ||||
| fOutLeft = carla_findMaxNormalizedFloat(inputs[0], frames); | fOutLeft = carla_findMaxNormalizedFloat(inputs[0], frames); | ||||
| fOutRight = carla_findMaxNormalizedFloat(inputs[1], frames); | fOutRight = carla_findMaxNormalizedFloat(inputs[1], frames); | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -30,9 +30,12 @@ static NativePluginHandle bypass_instantiate(const NativeHostDescriptor* host) | |||||
| (void)host; | (void)host; | ||||
| } | } | ||||
| static void bypass_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void bypass_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| memcpy(outBuffer[0], inBuffer[0], sizeof(float)*frames); | |||||
| if (outBuffer[0] != inBuffer[0]) | |||||
| memcpy(outBuffer[0], inBuffer[0], sizeof(float)*frames); | |||||
| return; | return; | ||||
| // unused | // unused | ||||
| @@ -205,7 +205,9 @@ static void lfo_set_parameter_value(NativePluginHandle handle, uint32_t index, f | |||||
| } | } | ||||
| } | } | ||||
| static void lfo_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void lfo_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| const NativeTimeInfo* const timeInfo = host->get_time_info(host->handle); | const NativeTimeInfo* const timeInfo = host->get_time_info(host->handle); | ||||
| @@ -106,7 +106,9 @@ static void midichanab_set_parameter_value(NativePluginHandle handle, uint32_t i | |||||
| handlePtr->channels[index] = (value >= 0.5f); | handlePtr->channels[index] = (value >= 0.5f); | ||||
| } | } | ||||
| static void midichanab_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void midichanab_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| const bool* const channels = handlePtr->channels; | const bool* const channels = handlePtr->channels; | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -106,7 +106,9 @@ static void midichanfilter_set_parameter_value(NativePluginHandle handle, uint32 | |||||
| handlePtr->channels[index] = (value >= 0.5f); | handlePtr->channels[index] = (value >= 0.5f); | ||||
| } | } | ||||
| static void midichanfilter_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void midichanfilter_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| const bool* const channels = handlePtr->channels; | const bool* const channels = handlePtr->channels; | ||||
| @@ -113,7 +113,9 @@ static void midichannelize_set_parameter_value(NativePluginHandle handle, uint32 | |||||
| } | } | ||||
| } | } | ||||
| static void midichannelize_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void midichannelize_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| const int channel = handlePtr->channel; | const int channel = handlePtr->channel; | ||||
| @@ -51,7 +51,7 @@ protected: | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Plugin process calls | // Plugin process calls | ||||
| void process(float**, float**, const uint32_t frames, const NativeMidiEvent* const, const uint32_t) override | |||||
| void process(const float**, float**, const uint32_t frames, const NativeMidiEvent* const, const uint32_t) override | |||||
| { | { | ||||
| const NativeTimeInfo* const timePos(getTimeInfo()); | const NativeTimeInfo* const timePos(getTimeInfo()); | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -168,7 +168,9 @@ static void midigain_set_parameter_value(NativePluginHandle handle, uint32_t ind | |||||
| } | } | ||||
| } | } | ||||
| static void midigain_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void midigain_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| const float gain = handlePtr->gain; | const float gain = handlePtr->gain; | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -47,7 +47,9 @@ static void midijoin_cleanup(NativePluginHandle handle) | |||||
| free(handlePtr); | free(handlePtr); | ||||
| } | } | ||||
| static void midijoin_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void midijoin_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| NativeMidiEvent tmpEvent; | NativeMidiEvent tmpEvent; | ||||
| @@ -210,7 +210,7 @@ protected: | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Plugin process calls | // Plugin process calls | ||||
| void process(float**, float**, const uint32_t frames, const NativeMidiEvent*, uint32_t) override | |||||
| void process(const float**, float**, const uint32_t frames, const NativeMidiEvent*, uint32_t) override | |||||
| { | { | ||||
| if (const NativeTimeInfo* const timeInfo = getTimeInfo()) | if (const NativeTimeInfo* const timeInfo = getTimeInfo()) | ||||
| fTimeInfo = *timeInfo; | fTimeInfo = *timeInfo; | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -46,7 +46,9 @@ static void midisplit_cleanup(NativePluginHandle handle) | |||||
| free(handlePtr); | free(handlePtr); | ||||
| } | } | ||||
| static void midisplit_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void midisplit_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| NativeMidiEvent tmpEvent; | NativeMidiEvent tmpEvent; | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -46,7 +46,9 @@ static void midithrough_cleanup(NativePluginHandle handle) | |||||
| free(handlePtr); | free(handlePtr); | ||||
| } | } | ||||
| static void midithrough_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void midithrough_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -130,7 +130,9 @@ static void miditranspose_set_parameter_value(NativePluginHandle handle, uint32_ | |||||
| } | } | ||||
| } | } | ||||
| static void miditranspose_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| static void miditranspose_process(NativePluginHandle handle, | |||||
| const float** inBuffer, float** outBuffer, uint32_t frames, | |||||
| const NativeMidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | { | ||||
| const NativeHostDescriptor* const host = handlePtr->host; | const NativeHostDescriptor* const host = handlePtr->host; | ||||
| const int octaves = handlePtr->octaves; | const int octaves = handlePtr->octaves; | ||||
| @@ -1,6 +1,6 @@ | |||||
| /* | /* | ||||
| * Carla Native Plugins | * Carla Native Plugins | ||||
| * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com> | |||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
| * modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
| @@ -83,7 +83,7 @@ protected: | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Plugin process calls | // Plugin process calls | ||||
| void process(float**, float**, const uint32_t, const NativeMidiEvent* const, const uint32_t) override | |||||
| void process(const float**, float**, const uint32_t, const NativeMidiEvent* const, const uint32_t) override | |||||
| { | { | ||||
| } | } | ||||
| @@ -287,10 +287,7 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| // FIXME | |||||
| fDescriptor->process(fHandle, | |||||
| const_cast<float**>(fPorts.audioIns), fPorts.audioOuts, frames, | |||||
| fMidiEvents, fMidiEventCount); | |||||
| fDescriptor->process(fHandle, fPorts.audioIns, fPorts.audioOuts, frames, fMidiEvents, fMidiEventCount); | |||||
| if (fWorkerUISignal == -1 && fPorts.hasUI) | if (fWorkerUISignal == -1 && fPorts.hasUI) | ||||
| { | { | ||||
| @@ -101,3 +101,12 @@ intptr_t VSTAudioMaster(AEffect* effect, int32_t opcode, int32_t index, intptr_t | |||||
| const audioMasterCallback audioMaster = (audioMasterCallback)((VstObject*)effect->object)->audioMaster; | const audioMasterCallback audioMaster = (audioMasterCallback)((VstObject*)effect->object)->audioMaster; | ||||
| return audioMaster(effect, opcode, index, value, ptr, opt); | return audioMaster(effect, opcode, index, value, ptr, opt); | ||||
| } | } | ||||
| bool isUsingUILauncher() | |||||
| { | |||||
| #ifdef CARLA_OS_LINUX | |||||
| return false; | |||||
| #else | |||||
| return true; | |||||
| #endif | |||||
| } | |||||
| @@ -63,8 +63,11 @@ static double d_lastSampleRate = 0.0; | |||||
| static const int32_t kBaseUniqueID = CCONST('C', 'r', 'l', 'a'); | static const int32_t kBaseUniqueID = CCONST('C', 'r', 'l', 'a'); | ||||
| static const int32_t kShellUniqueID = CCONST('C', 'r', 'l', 's'); | static const int32_t kShellUniqueID = CCONST('C', 'r', 'l', 's'); | ||||
| static const int32_t kNumParameters = 100; | |||||
| static const int32_t kVstMidiEventSize = static_cast<int32_t>(sizeof(VstMidiEvent)); | static const int32_t kVstMidiEventSize = static_cast<int32_t>(sizeof(VstMidiEvent)); | ||||
| static const bool kIsUsingUILauncher = isUsingUILauncher(); | |||||
| // -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
| // Carla Internal Plugin API exposed as VST plugin | // Carla Internal Plugin API exposed as VST plugin | ||||
| @@ -84,9 +87,7 @@ public: | |||||
| fMidiEventCount(0), | fMidiEventCount(0), | ||||
| fTimeInfo(), | fTimeInfo(), | ||||
| fVstRect(), | fVstRect(), | ||||
| #ifndef HAVE_X11 | |||||
| fUiLauncher(nullptr), | fUiLauncher(nullptr), | ||||
| #endif | |||||
| fHostType(kHostTypeNull), | fHostType(kHostTypeNull), | ||||
| fMidiOutEvents(), | fMidiOutEvents(), | ||||
| #ifdef USING_JUCE | #ifdef USING_JUCE | ||||
| @@ -98,6 +99,9 @@ public: | |||||
| fHost.uiName = carla_strdup("CarlaVST"); | fHost.uiName = carla_strdup("CarlaVST"); | ||||
| fHost.uiParentId = 0; | fHost.uiParentId = 0; | ||||
| std::memset(fProgramName, 0, sizeof(fProgramName)); | |||||
| std::strcpy(fProgramName, "Default"); | |||||
| // find resource dir | // find resource dir | ||||
| using water::File; | using water::File; | ||||
| using water::String; | using water::String; | ||||
| @@ -135,13 +139,17 @@ public: | |||||
| fVstRect.top = 0; | fVstRect.top = 0; | ||||
| fVstRect.left = 0; | fVstRect.left = 0; | ||||
| #ifdef HAVE_X11 | |||||
| fVstRect.bottom = 712; | |||||
| fVstRect.right = 1024; | |||||
| #else | |||||
| fVstRect.bottom = ui_launcher_res::carla_uiHeight; | |||||
| fVstRect.right = ui_launcher_res::carla_uiWidth; | |||||
| #endif | |||||
| if (kIsUsingUILauncher) | |||||
| { | |||||
| fVstRect.bottom = ui_launcher_res::carla_uiHeight; | |||||
| fVstRect.right = ui_launcher_res::carla_uiWidth; | |||||
| } | |||||
| else | |||||
| { | |||||
| fVstRect.bottom = 712; | |||||
| fVstRect.right = 1024; | |||||
| } | |||||
| init(); | init(); | ||||
| } | } | ||||
| @@ -205,7 +213,8 @@ public: | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| intptr_t vst_dispatcher(const int32_t opcode, const int32_t /*index*/, const intptr_t value, void* const ptr, const float opt) | |||||
| intptr_t vst_dispatcher(const int32_t opcode, | |||||
| const int32_t index, const intptr_t value, void* const ptr, const float opt) | |||||
| { | { | ||||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0); | CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0); | ||||
| @@ -213,6 +222,108 @@ public: | |||||
| switch (opcode) | switch (opcode) | ||||
| { | { | ||||
| case effGetProgram: | |||||
| return 0; | |||||
| case effSetProgramName: | |||||
| if (char* const programName = (char*)ptr) | |||||
| { | |||||
| std::strncpy(fProgramName, programName, 32); | |||||
| return 1; | |||||
| } | |||||
| break; | |||||
| case effGetProgramName: | |||||
| if (char* const programName = (char*)ptr) | |||||
| { | |||||
| std::strncpy(programName, fProgramName, 24); | |||||
| return 1; | |||||
| } | |||||
| break; | |||||
| case effGetProgramNameIndexed: | |||||
| if (char* const programName = (char*)ptr) | |||||
| { | |||||
| std::strncpy(programName, fProgramName, 24); | |||||
| return 1; | |||||
| } | |||||
| break; | |||||
| case effGetParamDisplay: | |||||
| CARLA_SAFE_ASSERT_RETURN(index >= 0 && index < kNumParameters, 0); | |||||
| if (char* const cptr = (char*)ptr) | |||||
| { | |||||
| const uint32_t uindex = static_cast<uint32_t>(index); | |||||
| CARLA_SAFE_ASSERT_RETURN(uindex < fDescriptor->paramIns, 0); | |||||
| const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, uindex); | |||||
| CARLA_SAFE_ASSERT_RETURN(param != nullptr, 0); | |||||
| float paramValue = fDescriptor->get_parameter_value(fHandle, uindex); | |||||
| if (param->hints & NATIVE_PARAMETER_IS_BOOLEAN) | |||||
| { | |||||
| const NativeParameterRanges& ranges(param->ranges); | |||||
| const float midRange = ranges.min + (ranges.max - ranges.min) / 2.0f; | |||||
| paramValue = paramValue > midRange ? ranges.max : ranges.min; | |||||
| } | |||||
| else if (param->hints & NATIVE_PARAMETER_IS_INTEGER) | |||||
| { | |||||
| paramValue = std::round(paramValue); | |||||
| } | |||||
| for (uint32_t i = 0; i < param->scalePointCount; ++i) | |||||
| { | |||||
| const NativeParameterScalePoint& scalePoint(param->scalePoints[uindex]); | |||||
| if (carla_isNotEqual(paramValue, scalePoint.value)) | |||||
| continue; | |||||
| std::strncpy(cptr, scalePoint.label, 23); | |||||
| cptr[23] = '\0'; | |||||
| return 1; | |||||
| } | |||||
| if (param->hints & NATIVE_PARAMETER_IS_INTEGER) | |||||
| { | |||||
| std::snprintf(cptr, 23, "%d%s%s", | |||||
| static_cast<int>(paramValue), | |||||
| param->unit != nullptr && param->unit[0] != '\0' ? " " : "", | |||||
| param->unit != nullptr ? param->unit : ""); | |||||
| cptr[23] = '\0'; | |||||
| } | |||||
| else | |||||
| { | |||||
| std::snprintf(cptr, 23, "%f%s%s", | |||||
| static_cast<double>(paramValue), | |||||
| param->unit != nullptr && param->unit[0] != '\0' ? " " : "", | |||||
| param->unit != nullptr ? param->unit : ""); | |||||
| cptr[23] = '\0'; | |||||
| } | |||||
| return 1; | |||||
| } | |||||
| break; | |||||
| case effGetParamName: | |||||
| CARLA_SAFE_ASSERT_RETURN(index >= 0 && index < kNumParameters, 0); | |||||
| if (char* const cptr = (char*)ptr) | |||||
| { | |||||
| const uint32_t uindex = static_cast<uint32_t>(index); | |||||
| CARLA_SAFE_ASSERT_RETURN(uindex < fDescriptor->paramIns, 0); | |||||
| const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, uindex); | |||||
| CARLA_SAFE_ASSERT_RETURN(param != nullptr, 0); | |||||
| std::strncpy(cptr, param->name, 15); | |||||
| cptr[15] = '\0'; | |||||
| return 1; | |||||
| } | |||||
| return 0; | |||||
| case effSetSampleRate: | case effSetSampleRate: | ||||
| CARLA_SAFE_ASSERT_RETURN(opt > 0.0f, 0); | CARLA_SAFE_ASSERT_RETURN(opt > 0.0f, 0); | ||||
| @@ -296,22 +407,27 @@ public: | |||||
| if (fDescriptor->ui_show != nullptr) | if (fDescriptor->ui_show != nullptr) | ||||
| { | { | ||||
| #ifdef HAVE_X11 | #ifdef HAVE_X11 | ||||
| char strBuf[0xff+1]; | |||||
| std::snprintf(strBuf, 0xff, P_INTPTR, (intptr_t)ptr); | |||||
| strBuf[0xff] = '\0'; | |||||
| if (! kIsUsingUILauncher) | |||||
| { | |||||
| char strBuf[0xff+1]; | |||||
| std::snprintf(strBuf, 0xff, P_INTPTR, (intptr_t)ptr); | |||||
| strBuf[0xff] = '\0'; | |||||
| // set CARLA_PLUGIN_EMBED_WINID for external process | |||||
| carla_setenv("CARLA_PLUGIN_EMBED_WINID", strBuf); | |||||
| // set CARLA_PLUGIN_EMBED_WINID for external process | |||||
| carla_setenv("CARLA_PLUGIN_EMBED_WINID", strBuf); | |||||
| // show UI now | |||||
| fDescriptor->ui_show(fHandle, true); | |||||
| // show UI now | |||||
| fDescriptor->ui_show(fHandle, true); | |||||
| // reset CARLA_PLUGIN_EMBED_WINID just in case | |||||
| carla_setenv("CARLA_PLUGIN_EMBED_WINID", "0"); | |||||
| #else | |||||
| destoryUILauncher(fUiLauncher); | |||||
| fUiLauncher = createUILauncher((intptr_t)ptr, fDescriptor, fHandle); | |||||
| // reset CARLA_PLUGIN_EMBED_WINID just in case | |||||
| carla_setenv("CARLA_PLUGIN_EMBED_WINID", "0"); | |||||
| } | |||||
| else | |||||
| #endif | #endif | ||||
| { | |||||
| destoryUILauncher(fUiLauncher); | |||||
| fUiLauncher = createUILauncher((intptr_t)ptr, fDescriptor, fHandle); | |||||
| } | |||||
| ret = 1; | ret = 1; | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -320,20 +436,23 @@ public: | |||||
| if (fDescriptor->ui_show != nullptr) | if (fDescriptor->ui_show != nullptr) | ||||
| { | { | ||||
| #ifdef HAVE_X11 | #ifdef HAVE_X11 | ||||
| fDescriptor->ui_show(fHandle, false); | |||||
| #else | |||||
| destoryUILauncher(fUiLauncher); | |||||
| fUiLauncher = nullptr; | |||||
| if (! kIsUsingUILauncher) | |||||
| { | |||||
| fDescriptor->ui_show(fHandle, false); | |||||
| } | |||||
| else | |||||
| #endif | #endif | ||||
| { | |||||
| destoryUILauncher(fUiLauncher); | |||||
| fUiLauncher = nullptr; | |||||
| } | |||||
| ret = 1; | ret = 1; | ||||
| } | } | ||||
| break; | break; | ||||
| case effEditIdle: | case effEditIdle: | ||||
| #ifndef HAVE_X11 | |||||
| if (fUiLauncher != nullptr) | if (fUiLauncher != nullptr) | ||||
| idleUILauncher(fUiLauncher); | idleUILauncher(fUiLauncher); | ||||
| #endif | |||||
| if (fDescriptor->ui_idle != nullptr) | if (fDescriptor->ui_idle != nullptr) | ||||
| fDescriptor->ui_idle(fHandle); | fDescriptor->ui_idle(fHandle); | ||||
| break; | break; | ||||
| @@ -402,6 +521,10 @@ public: | |||||
| } | } | ||||
| break; | break; | ||||
| case effCanBeAutomated: | |||||
| ret = 1; | |||||
| break; | |||||
| case effCanDo: | case effCanDo: | ||||
| if (const char* const canDo = (const char*)ptr) | if (const char* const canDo = (const char*)ptr) | ||||
| { | { | ||||
| @@ -426,13 +549,46 @@ public: | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| float vst_getParameter(const int32_t /*index*/) | |||||
| float vst_getParameter(const int32_t index) | |||||
| { | { | ||||
| return 0.0f; | |||||
| CARLA_SAFE_ASSERT_RETURN(index >= 0, 0.0f); | |||||
| const uint32_t uindex = static_cast<uint32_t>(index); | |||||
| CARLA_SAFE_ASSERT_RETURN(uindex < fDescriptor->paramIns, 0.0f); | |||||
| const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, uindex); | |||||
| CARLA_SAFE_ASSERT_RETURN(param != nullptr, 0); | |||||
| const float realValue = fDescriptor->get_parameter_value(fHandle, uindex); | |||||
| return (realValue - param->ranges.min) / (param->ranges.max - param->ranges.min); | |||||
| } | } | ||||
| void vst_setParameter(const int32_t /*index*/, const float /*value*/) | |||||
| void vst_setParameter(const int32_t index, const float value) | |||||
| { | { | ||||
| CARLA_SAFE_ASSERT_RETURN(index >= 0,); | |||||
| const uint32_t uindex = static_cast<uint32_t>(index); | |||||
| CARLA_SAFE_ASSERT_RETURN(uindex < fDescriptor->paramIns,); | |||||
| const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, uindex); | |||||
| CARLA_SAFE_ASSERT_RETURN(param != nullptr,); | |||||
| float realValue; | |||||
| if (param->hints & NATIVE_PARAMETER_IS_BOOLEAN) | |||||
| { | |||||
| realValue = value > 0.5f ? param->ranges.max : param->ranges.min; | |||||
| } | |||||
| else | |||||
| { | |||||
| realValue = param->ranges.min + ((param->ranges.max - param->ranges.min) * value); | |||||
| if (param->hints & NATIVE_PARAMETER_IS_INTEGER) | |||||
| realValue = std::round(realValue); | |||||
| } | |||||
| fDescriptor->set_parameter_value(fHandle, uindex, realValue); | |||||
| } | } | ||||
| void vst_processReplacing(const float** const inputs, float** const outputs, const int32_t sampleFrames) | void vst_processReplacing(const float** const inputs, float** const outputs, const int32_t sampleFrames) | ||||
| @@ -464,7 +620,7 @@ public: | |||||
| vst_dispatcher(effMainsChanged, 0, 1, nullptr, 0.0f); | vst_dispatcher(effMainsChanged, 0, 1, nullptr, 0.0f); | ||||
| } | } | ||||
| static const int kWantVstTimeFlags(kVstTransportPlaying|kVstPpqPosValid|kVstTempoValid|kVstTimeSigValid); | |||||
| static const int kWantVstTimeFlags = kVstTransportPlaying|kVstPpqPosValid|kVstTempoValid|kVstTimeSigValid; | |||||
| if (const VstTimeInfo* const vstTimeInfo = (const VstTimeInfo*)hostCallback(audioMasterGetTime, 0, kWantVstTimeFlags)) | if (const VstTimeInfo* const vstTimeInfo = (const VstTimeInfo*)hostCallback(audioMasterGetTime, 0, kWantVstTimeFlags)) | ||||
| { | { | ||||
| @@ -518,7 +674,9 @@ public: | |||||
| if (fHandle != nullptr) | if (fHandle != nullptr) | ||||
| // FIXME | // FIXME | ||||
| fDescriptor->process(fHandle, const_cast<float**>(inputs), outputs, static_cast<uint32_t>(sampleFrames), fMidiEvents, fMidiEventCount); | |||||
| fDescriptor->process(fHandle, | |||||
| inputs, outputs, static_cast<uint32_t>(sampleFrames), | |||||
| fMidiEvents, fMidiEventCount); | |||||
| fMidiEventCount = 0; | fMidiEventCount = 0; | ||||
| @@ -558,8 +716,14 @@ protected: | |||||
| return true; | return true; | ||||
| } | } | ||||
| void handleUiParameterChanged(const uint32_t /*index*/, const float /*value*/) const | |||||
| void handleUiParameterChanged(const uint32_t index, const float value) const | |||||
| { | { | ||||
| const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, index); | |||||
| CARLA_SAFE_ASSERT_RETURN(param != nullptr,); | |||||
| const float normalizedValue = (value - param->ranges.min) / (param->ranges.max - param->ranges.min); | |||||
| hostCallback(audioMasterAutomate, static_cast<int32_t>(index), 0, nullptr, normalizedValue); | |||||
| } | } | ||||
| void handleUiCustomDataChanged(const char* const /*key*/, const char* const /*value*/) const | void handleUiCustomDataChanged(const char* const /*key*/, const char* const /*value*/) const | ||||
| @@ -593,11 +757,14 @@ protected: | |||||
| case NATIVE_HOST_OPCODE_UPDATE_MIDI_PROGRAM: | case NATIVE_HOST_OPCODE_UPDATE_MIDI_PROGRAM: | ||||
| case NATIVE_HOST_OPCODE_RELOAD_PARAMETERS: | case NATIVE_HOST_OPCODE_RELOAD_PARAMETERS: | ||||
| case NATIVE_HOST_OPCODE_RELOAD_MIDI_PROGRAMS: | case NATIVE_HOST_OPCODE_RELOAD_MIDI_PROGRAMS: | ||||
| case NATIVE_HOST_OPCODE_RELOAD_ALL: | |||||
| case NATIVE_HOST_OPCODE_UI_UNAVAILABLE: | case NATIVE_HOST_OPCODE_UI_UNAVAILABLE: | ||||
| case NATIVE_HOST_OPCODE_INTERNAL_PLUGIN: | case NATIVE_HOST_OPCODE_INTERNAL_PLUGIN: | ||||
| break; | break; | ||||
| case NATIVE_HOST_OPCODE_RELOAD_ALL: | |||||
| hostCallback(audioMasterUpdateDisplay); | |||||
| break; | |||||
| case NATIVE_HOST_OPCODE_HOST_IDLE: | case NATIVE_HOST_OPCODE_HOST_IDLE: | ||||
| hostCallback(audioMasterIdle); | hostCallback(audioMasterIdle); | ||||
| break; | break; | ||||
| @@ -626,13 +793,12 @@ private: | |||||
| bool fIsActive; | bool fIsActive; | ||||
| uint32_t fMidiEventCount; | uint32_t fMidiEventCount; | ||||
| NativeMidiEvent fMidiEvents[kMaxMidiEvents]; | NativeMidiEvent fMidiEvents[kMaxMidiEvents]; | ||||
| char fProgramName[32+1]; | |||||
| NativeTimeInfo fTimeInfo; | NativeTimeInfo fTimeInfo; | ||||
| ERect fVstRect; | ERect fVstRect; | ||||
| #ifndef HAVE_X11 | |||||
| // UI button | // UI button | ||||
| CarlaUILauncher* fUiLauncher; | CarlaUILauncher* fUiLauncher; | ||||
| #endif | |||||
| // Host data | // Host data | ||||
| enum HostType { | enum HostType { | ||||
| @@ -647,7 +813,7 @@ private: | |||||
| const int32_t index = 0, | const int32_t index = 0, | ||||
| const intptr_t value = 0, | const intptr_t value = 0, | ||||
| void* const ptr = nullptr, | void* const ptr = nullptr, | ||||
| const float opt = 0.0f) | |||||
| const float opt = 0.0f) const | |||||
| { | { | ||||
| return VSTAudioMaster(fEffect, opcode, index, value, ptr, opt); | return VSTAudioMaster(fEffect, opcode, index, value, ptr, opt); | ||||
| } | } | ||||
| @@ -821,8 +987,8 @@ intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t index, | |||||
| CARLA_SAFE_ASSERT_RETURN(pluginDesc != nullptr, 0); | CARLA_SAFE_ASSERT_RETURN(pluginDesc != nullptr, 0); | ||||
| #ifdef CARLA_VST_SHELL | #ifdef CARLA_VST_SHELL | ||||
| effect->numParams = 0; | |||||
| effect->numPrograms = 0; | |||||
| effect->numPrograms = 1; | |||||
| effect->numParams = static_cast<int>(pluginDesc->paramIns); | |||||
| effect->numInputs = static_cast<int>(pluginDesc->audioIns); | effect->numInputs = static_cast<int>(pluginDesc->audioIns); | ||||
| effect->numOutputs = static_cast<int>(pluginDesc->audioOuts); | effect->numOutputs = static_cast<int>(pluginDesc->audioOuts); | ||||
| @@ -1079,20 +1245,19 @@ const AEffect* VSTPluginMainInit(AEffect* const effect) | |||||
| #endif | #endif | ||||
| // plugin fields | // plugin fields | ||||
| effect->numParams = 0; | |||||
| effect->numPrograms = 0; | |||||
| #if defined(CARLA_VST_SHELL) | |||||
| effect->numInputs = 0; | |||||
| effect->numOutputs = 0; | |||||
| #elif defined(CARLA_PLUGIN_32CH) | |||||
| #ifndef CARLA_VST_SHELL | |||||
| effect->numParams = kNumParameters; | |||||
| effect->numPrograms = 1; | |||||
| # if defined(CARLA_PLUGIN_32CH) | |||||
| effect->numInputs = 32; | effect->numInputs = 32; | ||||
| effect->numOutputs = 32; | effect->numOutputs = 32; | ||||
| #elif defined(CARLA_PLUGIN_16CH) | |||||
| # elif defined(CARLA_PLUGIN_16CH) | |||||
| effect->numInputs = 16; | effect->numInputs = 16; | ||||
| effect->numOutputs = 16; | effect->numOutputs = 16; | ||||
| #else | |||||
| # else | |||||
| effect->numInputs = 2; | effect->numInputs = 2; | ||||
| effect->numOutputs = 2; | effect->numOutputs = 2; | ||||
| # endif | |||||
| #endif | #endif | ||||
| // plugin flags | // plugin flags | ||||
| @@ -19,10 +19,8 @@ | |||||
| #include "CarlaNative.h" | #include "CarlaNative.h" | ||||
| #include "vestige/vestige.h" | #include "vestige/vestige.h" | ||||
| #ifndef HAVE_X11 | |||||
| # include "ui_launcher_res.hpp" | # include "ui_launcher_res.hpp" | ||||
| struct CarlaUILauncher; | struct CarlaUILauncher; | ||||
| #endif | |||||
| class NativePlugin; | class NativePlugin; | ||||
| @@ -31,16 +29,15 @@ struct VstObject { | |||||
| NativePlugin* plugin; | NativePlugin* plugin; | ||||
| }; | }; | ||||
| #ifndef HAVE_X11 | |||||
| CarlaUILauncher* createUILauncher(const intptr_t winId, | CarlaUILauncher* createUILauncher(const intptr_t winId, | ||||
| const NativePluginDescriptor* const d, | const NativePluginDescriptor* const d, | ||||
| const NativePluginHandle h); | const NativePluginHandle h); | ||||
| void idleUILauncher(CarlaUILauncher* const ui); | void idleUILauncher(CarlaUILauncher* const ui); | ||||
| void destoryUILauncher(CarlaUILauncher* const ui); | void destoryUILauncher(CarlaUILauncher* const ui); | ||||
| #endif | |||||
| const AEffect* VSTPluginMainInit(AEffect* const effect); | const AEffect* VSTPluginMainInit(AEffect* const effect); | ||||
| intptr_t VSTAudioMaster(AEffect*, int32_t, int32_t, intptr_t, void*, float); | intptr_t VSTAudioMaster(AEffect*, int32_t, int32_t, intptr_t, void*, float); | ||||
| bool isUsingUILauncher(); | |||||
| intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t index, intptr_t value, void* ptr, float opt); | intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t index, intptr_t value, void* ptr, float opt); | ||||
| float vst_getParameterCallback(AEffect* effect, int32_t index); | float vst_getParameterCallback(AEffect* effect, int32_t index); | ||||
| @@ -204,7 +204,7 @@ void carla_zeroFloats(float floats[], const std::size_t count) noexcept | |||||
| * Find the highest absolute and normalized value within a float array. | * Find the highest absolute and normalized value within a float array. | ||||
| */ | */ | ||||
| static inline | static inline | ||||
| float carla_findMaxNormalizedFloat(float floats[], const std::size_t count) | |||||
| float carla_findMaxNormalizedFloat(const float floats[], const std::size_t count) | |||||
| { | { | ||||
| CARLA_SAFE_ASSERT_RETURN(floats != nullptr, 0.0f); | CARLA_SAFE_ASSERT_RETURN(floats != nullptr, 0.0f); | ||||
| CARLA_SAFE_ASSERT_RETURN(count > 0, 0.0f); | CARLA_SAFE_ASSERT_RETURN(count > 0, 0.0f); | ||||