From 67e754feb5ac48217c96d7252545f1b8176b6b49 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sat, 12 Jun 2021 20:05:39 +0200 Subject: [PATCH] Make the maximum block size in VST2 optional --- src/wine-host/bridges/vst2.cpp | 6 +++--- src/wine-host/bridges/vst2.h | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/wine-host/bridges/vst2.cpp b/src/wine-host/bridges/vst2.cpp index 8fed5970..58993e37 100644 --- a/src/wine-host/bridges/vst2.cpp +++ b/src/wine-host/bridges/vst2.cpp @@ -747,19 +747,19 @@ AudioShmBuffer::Config Vst2Bridge::setup_shared_audio_buffers() { // audio channel are in samples (since they'll be used with pointer // arithmetic in `AudioShmBuffer`), and we'll only use the first bus (since // VST2 plugins don't have multiple audio busses). - assert(max_samples_per_block != 0); + assert(max_samples_per_block); uint32_t current_offset = 0; std::vector input_channel_offsets(plugin->numInputs); for (int channel = 0; channel < plugin->numInputs; channel++) { input_channel_offsets[channel] = current_offset; - current_offset += max_samples_per_block; + current_offset += *max_samples_per_block; } std::vector output_channel_offsets(plugin->numOutputs); for (int channel = 0; channel < plugin->numOutputs; channel++) { output_channel_offsets[channel] = current_offset; - current_offset += max_samples_per_block; + current_offset += *max_samples_per_block; } // The size of the buffer is in bytes, and it will depend on whether the diff --git a/src/wine-host/bridges/vst2.h b/src/wine-host/bridges/vst2.h index a937517c..c2e74d4c 100644 --- a/src/wine-host/bridges/vst2.h +++ b/src/wine-host/bridges/vst2.h @@ -146,8 +146,12 @@ class Vst2Bridge : public HostBridge { * `processReplacing()`/`processDoubleReplacing()`/`process()`. This is * indicated using a call to `effSetBlockSize()` prior to * `effMainsChanged()`. + * + * Some hosts forget to call this, so it will be a nullopt until it is + * called. In that case we'll use the value obtained through + * `audioMasterGetBlockSize()` instead. */ - uint32_t max_samples_per_block = 0; + std::optional max_samples_per_block; /** * Whether the host is going to send double precision audio or not. This