diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index 5dfc079b..563b842b 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -1766,6 +1766,19 @@ void Vst3Logger::log_response( }); } +void Vst3Logger::log_response( + bool is_host_vst, + const YaAudioProcessor::SetupProcessingResponse& response) { + log_response_base(is_host_vst, [&](auto& message) { + message << response.result.string(); + if (response.result == Steinberg::kResultOk) { + message << ", "; + } + }); +} + void Vst3Logger::log_response( bool is_host_vst, const YaAudioProcessor::ProcessResponse& response) { diff --git a/src/common/logging/vst3.h b/src/common/logging/vst3.h index 7e298226..6d1ca160 100644 --- a/src/common/logging/vst3.h +++ b/src/common/logging/vst3.h @@ -309,6 +309,8 @@ class Vst3Logger { void log_response(bool is_host_vst, const YaAudioProcessor::GetBusArrangementResponse&); + void log_response(bool is_host_vst, + const YaAudioProcessor::SetupProcessingResponse&); void log_response(bool is_host_vst, const YaAudioProcessor::ProcessResponse&); void log_response(bool is_host_vst, diff --git a/src/common/serialization/vst3/plugin/audio-processor.h b/src/common/serialization/vst3/plugin/audio-processor.h index 4e32107f..2d3743e3 100644 --- a/src/common/serialization/vst3/plugin/audio-processor.h +++ b/src/common/serialization/vst3/plugin/audio-processor.h @@ -19,6 +19,7 @@ #include #include +#include "../../../audio-shm.h" #include "../../common.h" #include "../base.h" #include "../process-data.h" @@ -175,12 +176,27 @@ class YaAudioProcessor : public Steinberg::Vst::IAudioProcessor { virtual uint32 PLUGIN_API getLatencySamples() override = 0; + /** + * The response code and written state for a call to + * `IAudioProcessor::setupProcessing(setup)`. + */ + struct SetupProcessingResponse { + UniversalTResult result; + AudioShmBuffer::Config audio_buffers_config; + + template + void serialize(S& s) { + s.object(result); + s.object(audio_buffers_config); + } + }; + /** * Message to pass through a call to * `IAudioProcessor::setupProcessing(setup)` to the Wine plugin host. */ struct SetupProcessing { - using Response = UniversalTResult; + using Response = SetupProcessingResponse; native_size_t instance_id; diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 11f680a3..6fd8f000 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -182,9 +182,11 @@ uint32 PLUGIN_API Vst3PluginProxyImpl::getLatencySamples() { tresult PLUGIN_API Vst3PluginProxyImpl::setupProcessing(Steinberg::Vst::ProcessSetup& setup) { - return bridge.send_audio_processor_message( - YaAudioProcessor::SetupProcessing{.instance_id = instance_id(), - .setup = setup}); + // TOOD: Set up the shared audio buffers next + return bridge + .send_audio_processor_message(YaAudioProcessor::SetupProcessing{ + .instance_id = instance_id(), .setup = setup}) + .result; } tresult PLUGIN_API Vst3PluginProxyImpl::setProcessing(TBool state) { diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index ce3be9b9..e7fbb062 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -1219,8 +1219,15 @@ size_t Vst3Bridge::register_object_instance( }, [&](YaAudioProcessor::SetupProcessing& request) -> YaAudioProcessor::SetupProcessing::Response { - return object_instances[request.instance_id] - .audio_processor->setupProcessing(request.setup); + const tresult result = + object_instances[request.instance_id] + .audio_processor->setupProcessing( + request.setup); + return YaAudioProcessor::SetupProcessingResponse{ + .result = result, + // TODO: Send the configuration for the shared audio + // buffers + .audio_buffers_config{}}; }, [&](const YaAudioProcessor::SetProcessing& request) -> YaAudioProcessor::SetProcessing::Response {