summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfalkTX <falktx@gmail.com>2018-08-04 10:58:09 +0200
committerfalkTX <falktx@gmail.com>2018-08-04 10:58:09 +0200
commit259ab6369c23b3934fba4eca743da00b68ff8501 (patch)
treee75b5247b1f7a73e805ac706b2ba321f93a44626
parenta4c9398d0841d5bede808f3ef695ac2b2c661925 (diff)
Use new vestige.h
Closes #60
-rw-r--r--distrho/src/DistrhoPluginVST.cpp45
-rw-r--r--distrho/src/vestige/vestige.h (renamed from distrho/src/vestige/aeffectx.h)123
2 files changed, 105 insertions, 63 deletions
diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp
index e384c4c4..2cce3a99 100644
--- a/distrho/src/DistrhoPluginVST.cpp
+++ b/distrho/src/DistrhoPluginVST.cpp
@@ -41,7 +41,7 @@
#include <string>
#ifdef VESTIGE_HEADER
-# include "vestige/aeffectx.h"
+# include "vestige/vestige.h"
#define effFlagsProgramChunks (1 << 5)
#define effSetProgramName 4
#define effGetParamLabel 6
@@ -51,7 +51,6 @@
#define effCanBeAutomated 26
#define effGetProgramNameIndexed 29
#define effGetPlugCategory 35
-#define effIdle 53
#define effEditKeyDown 59
#define effEditKeyUp 60
#define kPlugCategEffect 1
@@ -1066,17 +1065,10 @@ struct VstObject {
PluginVst* plugin;
};
-#ifdef VESTIGE_HEADER
-# define validObject effect != nullptr && effect->ptr3 != nullptr
-# define validPlugin effect != nullptr && effect->ptr3 != nullptr && ((VstObject*)effect->ptr3)->plugin != nullptr
-# define vstObjectPtr (VstObject*)effect->ptr3
-#else
-# define validObject effect != nullptr && effect->object != nullptr
-# define validPlugin effect != nullptr && effect->object != nullptr && ((VstObject*)effect->object)->plugin != nullptr
-# define vstObjectPtr (VstObject*)effect->object
-#endif
-
-#define pluginPtr (vstObjectPtr)->plugin
+#define validObject effect != nullptr && effect->object != nullptr
+#define validPlugin effect != nullptr && effect->object != nullptr && ((VstObject*)effect->object)->plugin != nullptr
+#define vstObjectPtr (VstObject*)effect->object
+#define pluginPtr (vstObjectPtr)->plugin
static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t index, intptr_t value, void* ptr, float opt)
{
@@ -1144,11 +1136,7 @@ static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t
/* This code invalidates the object created in VSTPluginMain
* Probably not safe against all hosts */
obj->audioMaster = nullptr;
-# ifdef VESTIGE_HEADER
- effect->ptr3 = nullptr;
-# else
- vstObjectPtr = nullptr;
-# endif
+ effect->object = nullptr;
delete obj;
#endif
@@ -1172,14 +1160,14 @@ static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t
return 1;
}
return 0;
-
+
case effGetParameterProperties:
if (ptr != nullptr && index < static_cast<int32_t>(plugin.getParameterCount()))
{
if (VstParameterProperties* const properties = (VstParameterProperties*)ptr)
{
memset(properties, 0, sizeof(VstParameterProperties));
-
+
const uint32_t hints = plugin.getParameterHints(index);
if (hints & kParameterIsOutput)
@@ -1189,7 +1177,7 @@ static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t
{
properties->flags |= kVstParameterIsSwitch;
}
-
+
if (hints & kParameterIsInteger)
{
properties->flags |= kVstParameterUsesIntegerMinMax;
@@ -1208,7 +1196,7 @@ static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t
}
}
return 0;
-
+
case effGetPlugCategory:
#if DISTRHO_PLUGIN_IS_SYNTH
return kPlugCategSynth;
@@ -1315,12 +1303,7 @@ const AEffect* VSTPluginMain(audioMasterCallback audioMaster)
// vst fields
effect->magic = kEffectMagic;
effect->uniqueID = plugin->getUniqueId();
-#ifdef VESTIGE_HEADER
- int32_t* const version = (int32_t*)&effect->unknown1;
- *version = plugin->getVersion();
-#else
- effect->version = plugin->getVersion();
-#endif
+ effect->version = plugin->getVersion();
// VST doesn't support parameter outputs. we can fake them, but it is a hack. Disabled by default.
#ifdef DPF_VST_SHOW_PARAMETER_OUTPUTS
@@ -1371,11 +1354,9 @@ const AEffect* VSTPluginMain(audioMasterCallback audioMaster)
VstObject* const obj(new VstObject());
obj->audioMaster = audioMaster;
obj->plugin = nullptr;
-#ifdef VESTIGE_HEADER
- effect->ptr3 = obj;
-#else
+
+ // done
effect->object = obj;
-#endif
return effect;
}
diff --git a/distrho/src/vestige/aeffectx.h b/distrho/src/vestige/vestige.h
index 23f84f2e..56135fd7 100644
--- a/distrho/src/vestige/aeffectx.h
+++ b/distrho/src/vestige/vestige.h
@@ -1,9 +1,18 @@
/*
- * aeffectx.h - simple header to allow VeSTige compilation and eventually work
+ * IMPORTANT: The author of DPF has no connection with the
+ * author of the VeSTige VST-compatibility header, has had no
+ * involvement in its creation.
+ *
+ * The VeSTige header is included in this package in the good-faith
+ * belief that it has been cleanly and legally reverse engineered
+ * without reference to the official VST SDK and without its
+ * developer(s) having agreed to the VST SDK license agreement.
+ */
+
+/*
+ * simple header to allow VeSTige compilation and eventually work
*
* Copyright (c) 2006 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,8 +31,8 @@
*
*/
#include <stdint.h>
-#ifndef _AEFFECTX_H
-#define _AEFFECTX_H
+#ifndef _VESTIGE_H
+#define _VESTIGE_H
#define CCONST(a, b, c, d)( ( ( (int) a ) << 24 ) | \
( ( (int) b ) << 16 ) | \
@@ -87,11 +96,11 @@
#define effFlagsIsSynth (1 << 8) // currently unused
#define effOpen 0
-#define effClose 1 // currently unused
-#define effSetProgram 2 // currently unused
-#define effGetProgram 3 // currently unused
-#define effGetProgramName 5 // currently unused
-#define effGetParamName 8 // currently unused
+#define effClose 1
+#define effSetProgram 2
+#define effGetProgram 3
+#define effGetProgramName 5
+#define effGetParamName 8
#define effSetSampleRate 10
#define effSetBlockSize 11
#define effMainsChanged 12
@@ -101,22 +110,42 @@
#define effEditIdle 19
#define effEditTop 20
#define effProcessEvents 25
+#define effGetPlugCategory 35
#define effGetEffectName 45
#define effGetVendorString 47
#define effGetProductString 48
#define effGetVendorVersion 49
-#define effCanDo 51 // currently unused
-/* from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
+#define effCanDo 51
+#define effIdle 53
#define effGetParameterProperties 56
-#define effGetVstVersion 58 // currently unused
+#define effGetVstVersion 58
+#define effShellGetNextPlugin 70
+#define effStartProcess 71
+#define effStopProcess 72
+
+#define effBeginSetProgram 67
+#define effEndSetProgram 68
+
+#ifdef WORDS_BIGENDIAN
+// "VstP"
+#define kEffectMagic 0x50747356
+#else
+// "PtsV"
+#define kEffectMagic 0x56737450
+#endif
-#define kEffectMagic (CCONST( 'V', 's', 't', 'P' ))
#define kVstLangEnglish 1
#define kVstMidiType 1
struct RemoteVstPlugin;
+#define kVstTransportChanged 1
#define kVstTransportPlaying (1 << 1)
+#define kVstTransportCycleActive (1 << 2)
+#define kVstTransportRecording (1 << 3)
+
+#define kVstAutomationWriting (1 << 6)
+#define kVstAutomationReading (1 << 7)
#define kVstNanosValid (1 << 8)
#define kVstPpqPosValid (1 << 9)
@@ -174,26 +203,57 @@ struct _VstEvents
VstEvent * events[2];
};
+enum Vestige2StringConstants
+{
+ VestigeMaxNameLen = 64,
+ VestigeMaxLabelLen = 64,
+ VestigeMaxShortLabelLen = 8,
+ VestigeMaxCategLabelLen = 24,
+ VestigeMaxFileNameLen = 100
+};
+
+
+enum VstPlugCategory
+{
+ kPlugCategUnknown = 0,
+ kPlugCategEffect,
+ kPlugCategSynth,
+ kPlugCategAnalysis,
+ kPlugCategMastering,
+ kPlugCategSpacializer,
+ kPlugCategRoomFx,
+ kPlugSurroundFx,
+ kPlugCategRestoration,
+ kPlugCategOfflineProcess,
+ kPlugCategShell,
+ kPlugCategGenerator,
+ kPlugCategMaxCount
+};
+
typedef struct _VstEvents VstEvents;
-/* this struct taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
struct _VstParameterProperties
{
- float stepFloat;
- float smallStepFloat;
- float largeStepFloat;
- char label[64];
- int32_t flags;
- int32_t minInteger;
- int32_t maxInteger;
- int32_t stepInteger;
- int32_t largeStepInteger;
- char shortLabel[8];
+ float stepFloat; /* float step */
+ float smallStepFloat; /* small float step */
+ float largeStepFloat; /* large float step */
+ char label[VestigeMaxLabelLen]; /* parameter label */
+ int32_t flags; /* @see VstParameterFlags */
+ int32_t minInteger; /* integer minimum */
+ int32_t maxInteger; /* integer maximum */
+ int32_t stepInteger; /* integer step */
+ int32_t largeStepInteger; /* large integer step */
+ char shortLabel[VestigeMaxShortLabelLen]; /* short label, recommended: 6 + delimiter */
+ int16_t displayIndex; /* index where this parameter should be displayed (starting with 0) */
+ int16_t category; /* 0: no category, else group index + 1 */
+ int16_t numParametersInCategory; /* number of parameters in category */
+ int16_t reserved; /* zero */
+ char categoryLabel[VestigeMaxCategLabelLen]; /* category label, e.g. "Osc 1" */
+ char future[16]; /* reserved for future use */
};
typedef struct _VstParameterProperties VstParameterProperties;
-/* this enum taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
enum VstParameterFlags
{
kVstParameterIsSwitch = 1 << 0, /* parameter is a switch (on/off) */
@@ -231,18 +291,19 @@ struct _AEffect
// Fill somewhere 28-2b
void *ptr1;
void *ptr2;
- // Zeroes 2c-2f 30-33 34-37 38-3b
- char empty3[4 + 4 + 4];
+ int initialDelay;
+ // Zeroes 30-33 34-37 38-3b
+ char empty2[4 + 4];
// 1.0f 3c-3f
float unkown_float;
// An object? pointer 40-43
- void *ptr3;
+ void *object;
// Zeroes 44-47
void *user;
// Id 48-4b
int32_t uniqueID;
- // Don't know 4c-4f
- char unknown1[4];
+ // plugin version 4c-4f
+ int32_t version;
// processReplacing 50-53
void (* processReplacing) (struct _AEffect *, float **, float **, int);
};