Add a proxy class for IXmlRepresentationController

This commit is contained in:
Robbert van der Helm
2021-01-08 17:33:49 +01:00
parent 30bb6d3b97
commit ebd887d565
4 changed files with 134 additions and 24 deletions
+2
View File
@@ -120,6 +120,7 @@ vst3_plugin_sources = [
'src/common/serialization/vst3/plugin/program-list-data.cpp', 'src/common/serialization/vst3/plugin/program-list-data.cpp',
'src/common/serialization/vst3/plugin/unit-data.cpp', 'src/common/serialization/vst3/plugin/unit-data.cpp',
'src/common/serialization/vst3/plugin/unit-info.cpp', 'src/common/serialization/vst3/plugin/unit-info.cpp',
'src/common/serialization/vst3/plugin/xml-representation-controller.cpp',
'src/common/serialization/vst3/attribute-list.cpp', 'src/common/serialization/vst3/attribute-list.cpp',
'src/common/serialization/vst3/base.cpp', 'src/common/serialization/vst3/base.cpp',
'src/common/serialization/vst3/component-handler-proxy.cpp', 'src/common/serialization/vst3/component-handler-proxy.cpp',
@@ -192,6 +193,7 @@ if with_vst3
'src/common/serialization/vst3/plugin/program-list-data.cpp', 'src/common/serialization/vst3/plugin/program-list-data.cpp',
'src/common/serialization/vst3/plugin/unit-data.cpp', 'src/common/serialization/vst3/plugin/unit-data.cpp',
'src/common/serialization/vst3/plugin/unit-info.cpp', 'src/common/serialization/vst3/plugin/unit-info.cpp',
'src/common/serialization/vst3/plugin/xml-representation-controller.cpp',
'src/common/serialization/vst3/attribute-list.cpp', 'src/common/serialization/vst3/attribute-list.cpp',
'src/common/serialization/vst3/base.cpp', 'src/common/serialization/vst3/base.cpp',
'src/common/serialization/vst3/component-handler-proxy.cpp', 'src/common/serialization/vst3/component-handler-proxy.cpp',
+24 -24
View File
@@ -6,35 +6,35 @@ for more information on how the serialization works.
The following interfaces are not yet implemented: The following interfaces are not yet implemented:
- Every interface introduced after VST 3.1.0, although most of the VST 3.5.0 - Every interface introduced after VST 3.5.0
interfaces have already been implemented
- The [Presonus extensions](https://presonussoftware.com/en_US/developer), - The [Presonus extensions](https://presonussoftware.com/en_US/developer),
although most of these things seem to overlap with newer VST3 interfaces although most of these things seem to overlap with newer VST3 interfaces
VST3 plugin interfaces are implemented as follows: VST3 plugin interfaces are implemented as follows:
| yabridge class | Included in | Interfaces | | yabridge class | Included in | Interfaces |
| ----------------------------- | ------------------- | ------------------------------------------------------ | | ------------------------------- | ------------------- | ------------------------------------------------------ |
| `YaPluginFactory` | | `IPluginFactory`, `IPluginFactory2`, `IPluginFactory3` | | `YaPluginFactory` | | `IPluginFactory`, `IPluginFactory2`, `IPluginFactory3` |
| `Vst3ConnectionPointProxy` | | `IConnectionPoint` through `YaConnectionPoint` | | `Vst3ConnectionPointProxy` | | `IConnectionPoint` through `YaConnectionPoint` |
| `Vst3PlugViewProxy` | | All of the below: | | `Vst3PlugViewProxy` | | All of the below: |
| `YaParameterFinder` | `Vst3PlugViewProxy` | `IParameterFinder` | | `YaParameterFinder` | `Vst3PlugViewProxy` | `IParameterFinder` |
| `YaPlugView` | `Vst3PlugViewProxy` | `IPlugView` | | `YaPlugView` | `Vst3PlugViewProxy` | `IPlugView` |
| `Vst3PluginProxy` | | All of the below: | | `Vst3PluginProxy` | | All of the below: |
| `YaAudioPresentationLatency` | `Vst3PluginProxy` | `IAudioPresentationLatency` | | `YaAudioPresentationLatency` | `Vst3PluginProxy` | `IAudioPresentationLatency` |
| `YaAudioProcessor` | `Vst3PluginProxy` | `IAudioProcessor` | | `YaAudioProcessor` | `Vst3PluginProxy` | `IAudioProcessor` |
| `YaComponent` | `Vst3PluginProxy` | `IComponent` | | `YaComponent` | `Vst3PluginProxy` | `IComponent` |
| `YaConnectionPoint` | `Vst3PluginProxy` | `IConnectionPoint` | | `YaConnectionPoint` | `Vst3PluginProxy` | `IConnectionPoint` |
| `YaEditController` | `Vst3PluginProxy` | `IEditController` | | `YaEditController` | `Vst3PluginProxy` | `IEditController` |
| `YaEditController2` | `Vst3PluginProxy` | `IEditController2` | | `YaEditController2` | `Vst3PluginProxy` | `IEditController2` |
| `YaEditControllerHostEditing` | `Vst3PluginProxy` | `IEditControllerHostEditing` | | `YaEditControllerHostEditing` | `Vst3PluginProxy` | `IEditControllerHostEditing` |
| `YaKeyswitchController` | `Vst3PluginProxy` | `IKeyswitchController` | | `YaKeyswitchController` | `Vst3PluginProxy` | `IKeyswitchController` |
| `YaMidiMapping` | `Vst3PluginProxy` | `IMidiMapping` | | `YaMidiMapping` | `Vst3PluginProxy` | `IMidiMapping` |
| `YaNoteExpressionController` | `Vst3PluginProxy` | `INoteExpressionController` | | `YaNoteExpressionController` | `Vst3PluginProxy` | `INoteExpressionController` |
| `YaPluginBase` | `Vst3PluginProxy` | `IPluginBase` | | `YaPluginBase` | `Vst3PluginProxy` | `IPluginBase` |
| `YaProgramListData` | `Vst3PluginProxy` | `IProgramListData` | | `YaProgramListData` | `Vst3PluginProxy` | `IProgramListData` |
| `YaUnitData` | `Vst3PluginProxy` | `IUnitData` | | `YaUnitData` | `Vst3PluginProxy` | `IUnitData` |
| `YaUnitInfo` | `Vst3PluginProxy` | `IUnitInfo` | | `YaUnitInfo` | `Vst3PluginProxy` | `IUnitInfo` |
| `YaXmlRepresentationController` | `Vst3PluginProxy` | `IXmlRepresentationController` |
VST3 host interfaces are implemented as follows: VST3 host interfaces are implemented as follows:
@@ -0,0 +1,29 @@
// yabridge: a Wine VST bridge
// Copyright (C) 2020-2021 Robbert van der Helm
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#include "xml-representation-controller.h"
YaXmlRepresentationController::ConstructArgs::ConstructArgs() {}
YaXmlRepresentationController::ConstructArgs::ConstructArgs(
Steinberg::IPtr<Steinberg::FUnknown> object)
: supported(
Steinberg::FUnknownPtr<Steinberg::Vst::IXmlRepresentationController>(
object)) {}
YaXmlRepresentationController::YaXmlRepresentationController(
const ConstructArgs&& args)
: arguments(std::move(args)) {}
@@ -0,0 +1,79 @@
// yabridge: a Wine VST bridge
// Copyright (C) 2020-2021 Robbert van der Helm
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#pragma once
#include <pluginterfaces/vst/ivstrepresentation.h>
#include "../../common.h"
#include "../base.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
/**
* Wraps around `IXmlRepresentationController` for serialization purposes. This
* is instantiated as part of `Vst3PluginProxy`.
*
* XXX: The docs talk about standard locations for XML representation files. Do
* plugins actually use these representations, do they place them in the
* standard locations, and do hosts use them? If so we should be symlinking
* them in yabridgectl. See
* https://steinbergmedia.github.io/vst3_doc/vstinterfaces/representation.html
*/
class YaXmlRepresentationController
: public Steinberg::Vst::IXmlRepresentationController {
public:
/**
* These are the arguments for creating a `YaXmlRepresentationController`.
*/
struct ConstructArgs {
ConstructArgs();
/**
* Check whether an existing implementation implements
* `IXmlRepresentationController` and read arguments from it.
*/
ConstructArgs(Steinberg::IPtr<Steinberg::FUnknown> object);
/**
* Whether the object supported this interface.
*/
bool supported;
template <typename S>
void serialize(S& s) {
s.value1b(supported);
}
};
/**
* Instantiate this instance with arguments read from another interface
* implementation.
*/
YaXmlRepresentationController(const ConstructArgs&& args);
inline bool supported() const { return arguments.supported; }
virtual tresult PLUGIN_API
getXmlRepresentationStream(Steinberg::Vst::RepresentationInfo& info /*in*/,
Steinberg::IBStream* stream /*out*/) = 0;
protected:
ConstructArgs arguments;
};
#pragma GCC diagnostic pop