From dcfbc34ba1df9055c47026885d00d66fd0b662dd Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Mon, 4 Jan 2021 22:17:19 +0100 Subject: [PATCH] Add stubs for IAudioPresentationLatency --- src/common/serialization/vst3/plugin-proxy.cpp | 10 +++++++++- src/common/serialization/vst3/plugin-proxy.h | 7 ++++++- src/plugin/bridges/vst3-impls/plugin-proxy.cpp | 11 +++++++++++ src/plugin/bridges/vst3-impls/plugin-proxy.h | 6 ++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/common/serialization/vst3/plugin-proxy.cpp b/src/common/serialization/vst3/plugin-proxy.cpp index 934d7968..ffe6e7d0 100644 --- a/src/common/serialization/vst3/plugin-proxy.cpp +++ b/src/common/serialization/vst3/plugin-proxy.cpp @@ -22,6 +22,7 @@ Vst3PluginProxy::ConstructArgs::ConstructArgs( Steinberg::IPtr object, size_t instance_id) : instance_id(instance_id), + audio_presentation_latency_args(object), audio_processor_args(object), component_args(object), connection_point_args(object), @@ -35,7 +36,9 @@ Vst3PluginProxy::ConstructArgs::ConstructArgs( unit_info_args(object) {} Vst3PluginProxy::Vst3PluginProxy(const ConstructArgs&& args) - : YaAudioProcessor(std::move(args.audio_processor_args)), + : YaAudioPresentationLatency( + std::move(args.audio_presentation_latency_args)), + YaAudioProcessor(std::move(args.audio_processor_args)), YaComponent(std::move(args.component_args)), YaConnectionPoint(std::move(args.connection_point_args)), YaEditController(std::move(args.edit_controller_args)), @@ -78,6 +81,11 @@ tresult PLUGIN_API Vst3PluginProxy::queryInterface(Steinberg::FIDString _iid, return ::Steinberg ::kResultOk; } } + if (YaAudioPresentationLatency::supported()) { + QUERY_INTERFACE(_iid, obj, + Steinberg::Vst::IAudioPresentationLatency::iid, + Steinberg::Vst::IAudioPresentationLatency) + } if (YaAudioProcessor::supported()) { QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IAudioProcessor::iid, Steinberg::Vst::IAudioProcessor) diff --git a/src/common/serialization/vst3/plugin-proxy.h b/src/common/serialization/vst3/plugin-proxy.h index 427eb91e..a25d8bf1 100644 --- a/src/common/serialization/vst3/plugin-proxy.h +++ b/src/common/serialization/vst3/plugin-proxy.h @@ -19,6 +19,7 @@ #include #include "../common.h" +#include "plugin/audio-presentation-latency.h" #include "plugin/audio-processor.h" #include "plugin/component.h" #include "plugin/connection-point.h" @@ -57,7 +58,8 @@ * implements any interface such an object might also implement, we can allow * perfect proxying behaviour for connecting components. */ -class Vst3PluginProxy : public YaAudioProcessor, +class Vst3PluginProxy : public YaAudioPresentationLatency, + public YaAudioProcessor, public YaComponent, public YaConnectionPoint, public YaEditController, @@ -86,6 +88,8 @@ class Vst3PluginProxy : public YaAudioProcessor, */ native_size_t instance_id; + YaAudioPresentationLatency::ConstructArgs + audio_presentation_latency_args; YaAudioProcessor::ConstructArgs audio_processor_args; YaComponent::ConstructArgs component_args; YaConnectionPoint::ConstructArgs connection_point_args; @@ -102,6 +106,7 @@ class Vst3PluginProxy : public YaAudioProcessor, template void serialize(S& s) { s.value8b(instance_id); + s.object(audio_presentation_latency_args); s.object(audio_processor_args); s.object(component_args); s.object(connection_point_args); diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index a8937309..4da62329 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -39,6 +39,17 @@ Vst3PluginProxyImpl::queryInterface(const Steinberg::TUID _iid, void** obj) { return result; } +tresult PLUGIN_API Vst3PluginProxyImpl::setAudioPresentationLatencySamples( + Steinberg::Vst::BusDirection dir, + int32 busIndex, + uint32 latencyInSamples) { + // TODO: Implement + bridge.logger.log( + "TODO: " + "IAudioPresentationLatency::setAudioPresentationLatencySamples()"); + return Steinberg::kNotImplemented; +} + tresult PLUGIN_API Vst3PluginProxyImpl::setBusArrangements( Steinberg::Vst::SpeakerArrangement* inputs, int32 numIns, diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.h b/src/plugin/bridges/vst3-impls/plugin-proxy.h index e8465fff..4ff42cc7 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.h +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.h @@ -38,6 +38,12 @@ class Vst3PluginProxyImpl : public Vst3PluginProxy { tresult PLUGIN_API queryInterface(const Steinberg::TUID _iid, void** obj) override; + // From `IAudioPresentationLatency` + tresult PLUGIN_API + setAudioPresentationLatencySamples(Steinberg::Vst::BusDirection dir, + int32 busIndex, + uint32 latencyInSamples) override; + // From `IAudioProcessor` tresult PLUGIN_API setBusArrangements(Steinberg::Vst::SpeakerArrangement* inputs,