123 lines
3.7 KiB
C++
123 lines
3.7 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Project : SDK Core
|
|
//
|
|
// Category : SDK Core Interfaces
|
|
// Filename : pluginterfaces/base/iplugincompatibility.h
|
|
// Created by : Steinberg, 02/2022
|
|
// Description : Basic Plug-in Interfaces
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// This file is part of a Steinberg SDK. It is subject to the license terms
|
|
// in the LICENSE file found in the top-level directory of this distribution
|
|
// and at www.steinberg.net/sdklicenses.
|
|
// No part of the SDK, including this file, may be copied, modified, propagated,
|
|
// or distributed except according to the terms contained in the LICENSE file.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "ibstream.h"
|
|
|
|
//------------------------------------------------------------------------
|
|
namespace Steinberg {
|
|
|
|
//------------------------------------------------------------------------
|
|
/** moduleinfo.json
|
|
|
|
The moduleinfo.json describes the contents of the plug-in in a JSON5 compatible format (See https://json5.org/).
|
|
It contains the factory info (see PFactoryInfo), the contained classes (see PClassInfo), the
|
|
included snapshots and a list of compatibility of the included classes.
|
|
|
|
An example moduleinfo.json:
|
|
|
|
\code
|
|
{
|
|
"Name": "",
|
|
"Version": "1.0",
|
|
"Factory Info": {
|
|
"Vendor": "Steinberg Media Technologies",
|
|
"URL": "http://www.steinberg.net",
|
|
"E-Mail": "mailto:info@steinberg.de",
|
|
"Flags": {
|
|
"Unicode": true,
|
|
"Classes Discardable": false,
|
|
"Component Non Discardable": false,
|
|
},
|
|
},
|
|
"Compatibility": [
|
|
{
|
|
"New": "B9F9ADE1CD9C4B6DA57E61E3123535FD",
|
|
"Old": [
|
|
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", // just an example
|
|
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB", // another example
|
|
],
|
|
},
|
|
],
|
|
"Classes": [
|
|
{
|
|
"CID": "B9F9ADE1CD9C4B6DA57E61E3123535FD",
|
|
"Category": "Audio Module Class",
|
|
"Name": "AGainSimple VST3",
|
|
"Vendor": "Steinberg Media Technologies",
|
|
"Version": "1.3.0.1",
|
|
"SDKVersion": "VST 3.7.4",
|
|
"Sub Categories": [
|
|
"Fx",
|
|
],
|
|
"Class Flags": 0,
|
|
"Cardinality": 2147483647,
|
|
"Snapshots": [
|
|
],
|
|
},
|
|
],
|
|
}
|
|
\endcode
|
|
|
|
*/
|
|
|
|
#define kPluginCompatibilityClass "Plugin Compatibility Class"
|
|
|
|
//------------------------------------------------------------------------
|
|
/** optional interface to query the compatibility of the plug-ins classes
|
|
- [plug imp]
|
|
|
|
A plug-in can add a class with this interface to its class factory if it cannot provide a
|
|
moduleinfo.json file in its plug-in package/bundle where the compatibility is normally part of.
|
|
|
|
If the module contains a moduleinfo.json the host will ignore this class.
|
|
|
|
The class must write into the stream an UTF-8 encoded json description of the compatibility of
|
|
the other classes in the factory.
|
|
|
|
It is expected that the JSON5 written starts with an array:
|
|
\code
|
|
[
|
|
{
|
|
"New": "B9F9ADE1CD9C4B6DA57E61E3123535FD",
|
|
"Old": [
|
|
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", // just an example
|
|
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB", // another example
|
|
],
|
|
},
|
|
]
|
|
\endcode
|
|
*/
|
|
class IPluginCompatibility : public FUnknown
|
|
{
|
|
public:
|
|
/** get the compatibility stream
|
|
* @param stream the stream the plug-in must write the UTF8 encoded JSON5 compatibility
|
|
* string.
|
|
* @return kResultTrue on success
|
|
*/
|
|
virtual tresult PLUGIN_API getCompatibilityJSON (IBStream* stream) = 0;
|
|
|
|
//------------------------------------------------------------------------
|
|
static const FUID iid;
|
|
};
|
|
|
|
DECLARE_CLASS_IID (IPluginCompatibility, 0x4AFD4B6A, 0x35D7C240, 0xA5C31414, 0xFB7D15E6)
|
|
|
|
//------------------------------------------------------------------------
|
|
} // Steinberg
|