DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 36f018dacdcb96a7e858f2c078e6b876b1921119
parent b96b49329ab217b0f041a0051c8a57a0573ba24c
Author: Robin Gareus <robin@gareus.org>
Date:   Thu, 24 Nov 2022 19:28:01 +0100

VST3 channel buffers are per bus

Previously all inputs (num_channels) were assumed to be
on the first bus. However Vst::ProcessData's input/output
is an array pointing to instances of Vst::AudioBusBuffers
(not a pointer to a single instance).

This fixes CV ports (optional busses) for Cardinal VST3,
and likely also sidechain inputs for other processors.

Diffstat:
Mdistrho/src/DistrhoPluginVST3.cpp | 32++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp @@ -1446,13 +1446,17 @@ public: #if DISTRHO_PLUGIN_NUM_INPUTS > 0 if (data->inputs != nullptr) { - for (int32_t j = 0; j < data->inputs->num_channels; ++j) - { - while (!fEnabledInputs[i] && i < DISTRHO_PLUGIN_NUM_INPUTS) - inputs[i++] = fDummyAudioBuffer; + for (int32_t b = 0; b < data->num_input_buses; ++b) { + for (int32_t j = 0; j < data->inputs[b].num_channels; ++j) + { + DISTRHO_SAFE_ASSERT_INT_BREAK(i < DISTRHO_PLUGIN_NUM_INPUTS, i); + if (!fEnabledInputs[i] && i < DISTRHO_PLUGIN_NUM_INPUTS) { + inputs[i++] = fDummyAudioBuffer; + continue; + } - DISTRHO_SAFE_ASSERT_INT_BREAK(i < DISTRHO_PLUGIN_NUM_INPUTS, i); - inputs[i++] = data->inputs->channel_buffers_32[j]; + inputs[i++] = data->inputs[b].channel_buffers_32[j]; + } } } #endif @@ -1465,13 +1469,17 @@ public: #if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 if (data->outputs != nullptr) { - for (int32_t j = 0; j < data->outputs->num_channels; ++j) - { - while (!fEnabledOutputs[i] && i < DISTRHO_PLUGIN_NUM_OUTPUTS) - outputs[i++] = fDummyAudioBuffer; + for (int32_t b = 0; b < data->num_output_buses; ++b) { + for (int32_t j = 0; j < data->outputs[b].num_channels; ++j) + { + DISTRHO_SAFE_ASSERT_INT_BREAK(i < DISTRHO_PLUGIN_NUM_OUTPUTS, i); + if (!fEnabledOutputs[i] && i < DISTRHO_PLUGIN_NUM_OUTPUTS) { + outputs[i++] = fDummyAudioBuffer; + continue; + } - DISTRHO_SAFE_ASSERT_INT_BREAK(i < DISTRHO_PLUGIN_NUM_OUTPUTS, i); - outputs[i++] = data->outputs->channel_buffers_32[j]; + outputs[i++] = data->outputs[b].channel_buffers_32[j]; + } } } #endif