From 78d5e3bbfb05b5d95cd1c21d7270cc9caffe3079 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Fri, 18 Dec 2020 21:29:02 +0100 Subject: [PATCH] Implement IEditController::normalizedValueToPlain --- src/common/logging/vst3.cpp | 11 ++++++++++ src/common/logging/vst3.h | 2 ++ src/common/serialization/vst3.h | 1 + .../vst3/plugin/edit-controller.h | 22 +++++++++++++++++++ .../bridges/vst3-impls/plugin-proxy.cpp | 15 +++++++------ src/wine-host/bridges/vst3.cpp | 9 ++++++-- 6 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index b7bb7d46..c8d57369 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -333,6 +333,17 @@ void Vst3Logger::log_request( }); } +void Vst3Logger::log_request( + bool is_host_vst, + const YaEditController2::NormalizedParamToPlain& request) { + log_request_base(is_host_vst, [&](auto& message) { + message << request.instance_id + << ": IEditController::normalizedParamToPlain(id = " + << request.id + << ", valueNormalized = " << request.value_normalized << ")"; + }); +} + void Vst3Logger::log_request(bool is_host_vst, const YaPluginBase::Initialize& request) { log_request_base(is_host_vst, [&](auto& message) { diff --git a/src/common/logging/vst3.h b/src/common/logging/vst3.h index 37d82312..c5a84b53 100644 --- a/src/common/logging/vst3.h +++ b/src/common/logging/vst3.h @@ -90,6 +90,8 @@ class Vst3Logger { const YaEditController2::GetParamStringByValue&); void log_request(bool is_host_vst, const YaEditController2::GetParamValueByString&); + void log_request(bool is_host_vst, + const YaEditController2::NormalizedParamToPlain&); void log_request(bool is_host_vst, const YaPluginBase::Initialize&); void log_request(bool is_host_vst, const YaPluginBase::Terminate&); void log_request(bool is_host_vst, const YaPluginFactory::Construct&); diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index 5960daab..97bf7619 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -81,6 +81,7 @@ using ControlRequest = std::variant; + + native_size_t instance_id; + + Steinberg::Vst::ParamID id; + Steinberg::Vst::ParamValue value_normalized; + + template + void serialize(S& s) { + s.value8b(instance_id); + s.value4b(id); + s.value8b(value_normalized); + } + }; + virtual Steinberg::Vst::ParamValue PLUGIN_API normalizedParamToPlain( Steinberg::Vst::ParamID id, Steinberg::Vst::ParamValue valueNormalized) override = 0; diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 609d505c..fe1ed8d1 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -276,9 +276,10 @@ Steinberg::Vst::ParamValue PLUGIN_API Vst3PluginProxyImpl::normalizedParamToPlain( Steinberg::Vst::ParamID id, Steinberg::Vst::ParamValue valueNormalized) { - // TODO: Implement - bridge.logger.log("TODO IEditController::normalizedParamToPlain()"); - return Steinberg::kNotImplemented; + return bridge.send_message(YaEditController2::NormalizedParamToPlain{ + .instance_id = instance_id(), + .id = id, + .value_normalized = valueNormalized}); } Steinberg::Vst::ParamValue PLUGIN_API @@ -339,10 +340,10 @@ tresult PLUGIN_API Vst3PluginProxyImpl::openAboutBox(TBool onlyCheck) { } tresult PLUGIN_API Vst3PluginProxyImpl::initialize(FUnknown* context) { - // This `context` will likely be an `IHostApplication`. If it is, we will - // store it here, and we'll proxy through all calls to it made from the Wine - // side. Otherwise we'll still call `IPluginBase::initialize()` but with a - // null pointer instead. + // This `context` will likely be an `IHostApplication`. If it is, we + // will store it here, and we'll proxy through all calls to it made from + // the Wine side. Otherwise we'll still call `IPluginBase::initialize()` + // but with a null pointer instead. host_application_context = context; std::optional diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 46a878a7..2c27817d 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -281,7 +281,7 @@ void Vst3Bridge::run() { return YaEditController2::GetParameterInfoResponse{ .result = result, .updated_info = request.info}; }, - [&](YaEditController2::GetParamStringByValue& request) + [&](const YaEditController2::GetParamStringByValue& request) -> YaEditController2::GetParamStringByValue::Response { Steinberg::Vst::String128 string{0}; const tresult result = @@ -293,7 +293,7 @@ void Vst3Bridge::run() { .result = result, .string = tchar_pointer_to_u16string(string)}; }, - [&](YaEditController2::GetParamValueByString& request) + [&](const YaEditController2::GetParamValueByString& request) -> YaEditController2::GetParamValueByString::Response { Steinberg::Vst::ParamValue value_normalized; const tresult result = @@ -308,6 +308,11 @@ void Vst3Bridge::run() { return YaEditController2::GetParamValueByStringResponse{ .result = result, .value_normalized = value_normalized}; }, + [&](const YaEditController2::NormalizedParamToPlain& request) { + return object_instances[request.instance_id] + .edit_controller->normalizedParamToPlain( + request.id, request.value_normalized); + }, [&](YaPluginBase::Initialize& request) -> YaPluginBase::Initialize::Response { // If we got passed a host context, we'll create a proxy object