mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-13 01:56:34 +01:00
update vestige header; fix 64 bit issues
git-svn-id: svn://localhost/ardour2/branches/3.0@10185 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
63cf87beb7
commit
f81821c68e
5 changed files with 170 additions and 269 deletions
|
|
@ -744,10 +744,10 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
||||||
|
|
||||||
/*Native linuxVST support*/
|
/*Native linuxVST support*/
|
||||||
|
|
||||||
static long lxvst_callback (AEffect* effect,
|
static intptr_t lxvst_callback (AEffect* effect,
|
||||||
long opcode,
|
int32_t opcode,
|
||||||
long index,
|
int32_t index,
|
||||||
long value,
|
intptr_t value,
|
||||||
void* ptr,
|
void* ptr,
|
||||||
float opt);
|
float opt);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,130 +21,108 @@
|
||||||
* Boston, MA 02110-1301 USA.
|
* Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#ifndef _AEFFECTX_H
|
#ifndef _AEFFECTX_H
|
||||||
#define _AEFFECTX_H
|
#define _AEFFECTX_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#define CCONST(a, b, c, d)( ( ( (int) a ) << 24 ) | \
|
||||||
|
( ( (int) b ) << 16 ) | \
|
||||||
|
( ( (int) c ) << 8 ) | \
|
||||||
|
( ( (int) d ) << 0 ) )
|
||||||
|
|
||||||
#define audioMasterAutomate 0
|
const int audioMasterAutomate = 0;
|
||||||
#define audioMasterVersion 1
|
const int audioMasterVersion = 1;
|
||||||
#define audioMasterCurrentId 2
|
const int audioMasterCurrentId = 2;
|
||||||
#define audioMasterIdle 3
|
const int audioMasterIdle = 3;
|
||||||
#define audioMasterPinConnected 4
|
const int audioMasterPinConnected = 4;
|
||||||
// unsupported? 5
|
// unsupported? 5
|
||||||
#define audioMasterWantMidi 6
|
const int audioMasterWantMidi = 6;
|
||||||
#define audioMasterGetTime 7
|
const int audioMasterGetTime = 7;
|
||||||
#define audioMasterProcessEvents 8
|
const int audioMasterProcessEvents = 8;
|
||||||
#define audioMasterSetTime 9
|
const int audioMasterSetTime = 9;
|
||||||
#define audioMasterTempoAt 10
|
const int audioMasterTempoAt = 10;
|
||||||
#define audioMasterGetNumAutomatableParameters 11
|
const int audioMasterGetNumAutomatableParameters = 11;
|
||||||
#define audioMasterGetParameterQuantization 12
|
const int audioMasterGetParameterQuantization = 12;
|
||||||
#define audioMasterIOChanged 13
|
const int audioMasterIOChanged = 13;
|
||||||
#define audioMasterNeedIdle 14
|
const int audioMasterNeedIdle = 14;
|
||||||
#define audioMasterSizeWindow 15
|
const int audioMasterSizeWindow = 15;
|
||||||
#define audioMasterGetSampleRate 16
|
const int audioMasterGetSampleRate = 16;
|
||||||
#define audioMasterGetBlockSize 17
|
const int audioMasterGetBlockSize = 17;
|
||||||
#define audioMasterGetInputLatency 18
|
const int audioMasterGetInputLatency = 18;
|
||||||
#define audioMasterGetOutputLatency 19
|
const int audioMasterGetOutputLatency = 19;
|
||||||
#define audioMasterGetPreviousPlug 20
|
const int audioMasterGetPreviousPlug = 20;
|
||||||
#define audioMasterGetNextPlug 21
|
const int audioMasterGetNextPlug = 21;
|
||||||
#define audioMasterWillReplaceOrAccumulate 22
|
const int audioMasterWillReplaceOrAccumulate = 22;
|
||||||
#define audioMasterGetCurrentProcessLevel 23
|
const int audioMasterGetCurrentProcessLevel = 23;
|
||||||
#define audioMasterGetAutomationState 24
|
const int audioMasterGetAutomationState = 24;
|
||||||
#define audioMasterOfflineStart 25
|
const int audioMasterOfflineStart = 25;
|
||||||
#define audioMasterOfflineRead 26
|
const int audioMasterOfflineRead = 26;
|
||||||
#define audioMasterOfflineWrite 27
|
const int audioMasterOfflineWrite = 27;
|
||||||
#define audioMasterOfflineGetCurrentPass 28
|
const int audioMasterOfflineGetCurrentPass = 28;
|
||||||
#define audioMasterOfflineGetCurrentMetaPass 29
|
const int audioMasterOfflineGetCurrentMetaPass = 29;
|
||||||
#define audioMasterSetOutputSampleRate 30
|
const int audioMasterSetOutputSampleRate = 30;
|
||||||
// unsupported? 31
|
// unsupported? 31
|
||||||
#define audioMasterGetSpeakerArrangement 31 // deprecated in 2.4?
|
const int audioMasterGetSpeakerArrangement = 31; // deprecated in 2.4?
|
||||||
#define audioMasterGetVendorString 32
|
const int audioMasterGetVendorString = 32;
|
||||||
#define audioMasterGetProductString 33
|
const int audioMasterGetProductString = 33;
|
||||||
#define audioMasterGetVendorVersion 34
|
const int audioMasterGetVendorVersion = 34;
|
||||||
#define audioMasterVendorSpecific 35
|
const int audioMasterVendorSpecific = 35;
|
||||||
#define audioMasterSetIcon 36
|
const int audioMasterSetIcon = 36;
|
||||||
#define audioMasterCanDo 37
|
const int audioMasterCanDo = 37;
|
||||||
#define audioMasterGetLanguage 38
|
const int audioMasterGetLanguage = 38;
|
||||||
#define audioMasterOpenWindow 39
|
const int audioMasterOpenWindow = 39;
|
||||||
#define audioMasterCloseWindow 40
|
const int audioMasterCloseWindow = 40;
|
||||||
#define audioMasterGetDirectory 41
|
const int audioMasterGetDirectory = 41;
|
||||||
#define audioMasterUpdateDisplay 42
|
const int audioMasterUpdateDisplay = 42;
|
||||||
#define audioMasterBeginEdit 43
|
const int audioMasterBeginEdit = 43;
|
||||||
#define audioMasterEndEdit 44
|
const int audioMasterEndEdit = 44;
|
||||||
#define audioMasterOpenFileSelector 45
|
const int audioMasterOpenFileSelector = 45;
|
||||||
#define audioMasterCloseFileSelector 46// currently unused
|
const int audioMasterCloseFileSelector = 46; // currently unused
|
||||||
#define audioMasterEditFile 47// currently unused
|
const int audioMasterEditFile = 47; // currently unused
|
||||||
#define audioMasterGetChunkFile 48// currently unused
|
const int audioMasterGetChunkFile = 48; // currently unused
|
||||||
#define audioMasterGetInputSpeakerArrangement 49 // currently unused
|
const int audioMasterGetInputSpeakerArrangement = 49; // currently unused
|
||||||
|
|
||||||
#define effFlagsHasEditor 1
|
const int effFlagsHasEditor = 1;
|
||||||
// very likely
|
const int effFlagsCanReplacing = 1 << 4; // very likely
|
||||||
#define effFlagsCanReplacing (1 << 4)
|
const int effFlagsIsSynth = 1 << 8; // currently unused
|
||||||
// currently unused
|
|
||||||
#define effFlagsIsSynth (1 << 8)
|
|
||||||
|
|
||||||
#define effOpen 0
|
const int effOpen = 0;
|
||||||
//currently unused
|
const int effClose = 1; // currently unused
|
||||||
#define effClose 1
|
const int effSetProgram = 2; // currently unused
|
||||||
// currently unused
|
const int effGetProgram = 3; // currently unused
|
||||||
#define effSetProgram 2
|
const int effGetProgramName = 5; // currently unused
|
||||||
// currently unused
|
const int effGetParamName = 8; // currently unused
|
||||||
#define effGetProgram 3
|
const int effSetSampleRate = 10;
|
||||||
// currently unused
|
const int effSetBlockSize = 11;
|
||||||
#define effGetProgramName 5
|
const int effMainsChanged = 12;
|
||||||
#define effGetParamLabel 6
|
const int effEditGetRect = 13;
|
||||||
// currently unused
|
const int effEditOpen = 14;
|
||||||
#define effGetParamName 8
|
const int effEditClose = 15;
|
||||||
// this is a guess
|
const int effEditIdle = 19;
|
||||||
#define effSetSampleRate 10
|
const int effEditTop = 20;
|
||||||
#define effSetBlockSize 11
|
const int effProcessEvents = 25;
|
||||||
#define effMainsChanged 12
|
const int effGetEffectName = 45;
|
||||||
#define effEditGetRect 13
|
const int effGetParameterProperties = 47; // missing
|
||||||
#define effEditOpen 14
|
const int effGetVendorString = 47;
|
||||||
#define effEditClose 15
|
const int effGetProductString = 48;
|
||||||
#define effEditIdle 19
|
const int effGetVendorVersion = 49;
|
||||||
#define effProcessEvents 25
|
const int effCanDo = 51; // currently unused
|
||||||
#define effGetEffectName 45
|
const int effGetVstVersion = 58; // currently unused
|
||||||
// missing
|
|
||||||
#define effGetParameterProperties 47
|
|
||||||
#define effGetVendorString 47
|
|
||||||
#define effGetProductString 48
|
|
||||||
#define effGetVendorVersion 49
|
|
||||||
// currently unused
|
|
||||||
#define effCanDo 51
|
|
||||||
// currently unused
|
|
||||||
#define effGetVstVersion 58
|
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
const int kEffectMagic = CCONST( 'V', 's', 't', 'P' );
|
||||||
// "VstP"
|
const int kVstLangEnglish = 1;
|
||||||
#define kEffectMagic 0x50747356
|
const int kVstMidiType = 1;
|
||||||
#else
|
const int kVstParameterUsesFloatStep = 1 << 2;
|
||||||
// "PtsV"
|
const int kVstTempoValid = 1 << 10;
|
||||||
#define kEffectMagic 0x56737450
|
const int kVstTransportPlaying = 1 << 1;
|
||||||
#endif
|
|
||||||
|
|
||||||
#define kVstLangEnglish 1
|
|
||||||
#define kVstMidiType 1
|
|
||||||
#define kVstTransportPlaying (1 << 1)
|
|
||||||
|
|
||||||
/* validity flags for a VstTimeINfo structure this info comes from the web */
|
class RemoteVstPlugin;
|
||||||
|
|
||||||
#define kVstNanosValid (1 << 8)
|
|
||||||
#define kVstPpqPosValid (1 << 9)
|
|
||||||
#define kVstTempoValid (1 << 10)
|
|
||||||
#define kVstBarsValid (1 << 11)
|
|
||||||
#define kVstCyclePosValid (1 << 12)
|
|
||||||
#define kVstTimeSigValid (1 << 13)
|
|
||||||
#define kVstSmpteValid (1 << 14)
|
|
||||||
#define kVstClockValid (1 << 15)
|
|
||||||
|
|
||||||
#define kVstTransportChanged 1
|
class VstMidiEvent
|
||||||
|
|
||||||
typedef struct VstMidiEvent
|
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
// 00
|
// 00
|
||||||
int type;
|
int type;
|
||||||
// 04
|
// 04
|
||||||
|
|
@ -168,87 +146,69 @@ typedef struct VstMidiEvent
|
||||||
// 1f?
|
// 1f?
|
||||||
char reserved2;
|
char reserved2;
|
||||||
|
|
||||||
} VstMidiEvent;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct VstEvent
|
class VstEvent
|
||||||
{
|
{
|
||||||
char dump[sizeof( VstMidiEvent )];
|
char dump[sizeof( VstMidiEvent )];
|
||||||
|
|
||||||
} VstEvent ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct VstEvents
|
class VstEvents
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
// 00
|
// 00
|
||||||
int numEvents;
|
int numEvents;
|
||||||
// 04
|
// 04
|
||||||
int reserved;
|
void *reserved;
|
||||||
// 08
|
// 08
|
||||||
VstEvent * events[];
|
VstEvent * events[];
|
||||||
} VstEvents;
|
|
||||||
|
|
||||||
/* constants from http://www.rawmaterialsoftware.com/juceforum/viewtopic.php?t=3740&sid=183f74631fee71a493316735e2b9f28b */
|
} ;
|
||||||
|
|
||||||
enum Vestige2StringConstants
|
|
||||||
|
|
||||||
|
|
||||||
|
// Not finished, neither really used
|
||||||
|
class VstParameterProperties
|
||||||
{
|
{
|
||||||
VestigeMaxNameLen = 64,
|
public:
|
||||||
VestigeMaxLabelLen = 64,
|
float stepFloat;
|
||||||
VestigeMaxShortLabelLen = 8,
|
char label[64];
|
||||||
VestigeMaxCategLabelLen = 24,
|
int flags;
|
||||||
VestigeMaxFileNameLen = 100
|
int minInteger;
|
||||||
};
|
int maxInteger;
|
||||||
|
int stepInteger;
|
||||||
|
char shortLabel[8];
|
||||||
|
int category;
|
||||||
|
char categoryLabel[24];
|
||||||
|
char empty[128];
|
||||||
|
|
||||||
/* this struct taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
|
} ;
|
||||||
struct VstParameterProperties
|
|
||||||
{
|
|
||||||
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 */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* this enum taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
|
|
||||||
enum VstParameterFlags
|
|
||||||
{
|
|
||||||
kVstParameterIsSwitch = 1 << 0, /* parameter is a switch (on/off) */
|
|
||||||
kVstParameterUsesIntegerMinMax = 1 << 1, /* minInteger, maxInteger valid */
|
|
||||||
kVstParameterUsesFloatStep = 1 << 2, /* stepFloat, smallStepFloat, largeStepFloat valid */
|
|
||||||
kVstParameterUsesIntStep = 1 << 3, /* stepInteger, largeStepInteger valid */
|
|
||||||
kVstParameterSupportsDisplayIndex = 1 << 4, /* displayIndex valid */
|
|
||||||
kVstParameterSupportsDisplayCategory = 1 << 5, /* category, etc. valid */
|
|
||||||
kVstParameterCanRamp = 1 << 6 /* set if parameter value can ramp up/down */
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct AEffect
|
|
||||||
|
|
||||||
|
class AEffect
|
||||||
{
|
{
|
||||||
// Never use c++!!!
|
public:
|
||||||
|
// Never use virtual functions!!!
|
||||||
// 00-03
|
// 00-03
|
||||||
int magic;
|
int magic;
|
||||||
// dispatcher 04-07
|
// dispatcher 04-07
|
||||||
int (* dispatcher)( struct AEffect * , int , int , int , void * , float );
|
intptr_t (* dispatcher)( AEffect * , int , int , intptr_t, void * , float );
|
||||||
// process, quite sure 08-0b
|
// process, quite sure 08-0b
|
||||||
void (* process)( struct AEffect * , float * * , float * * , int );
|
void (* process)( AEffect * , float * * , float * * , int );
|
||||||
// setParameter 0c-0f
|
// setParameter 0c-0f
|
||||||
void (* setParameter)( struct AEffect * , int , float );
|
void (* setParameter)( AEffect * , int , float );
|
||||||
// getParameter 10-13
|
// getParameter 10-13
|
||||||
float (* getParameter)( struct AEffect * , int );
|
float (* getParameter)( AEffect * , int );
|
||||||
// programs 14-17
|
// programs 14-17
|
||||||
int numPrograms;
|
int numPrograms;
|
||||||
// Params 18-1b
|
// Params 18-1b
|
||||||
|
|
@ -260,57 +220,55 @@ typedef struct AEffect
|
||||||
// flags 24-27
|
// flags 24-27
|
||||||
int flags;
|
int flags;
|
||||||
// Fill somewhere 28-2b
|
// Fill somewhere 28-2b
|
||||||
void * user;
|
void *ptr1;
|
||||||
|
void *ptr2;
|
||||||
// Zeroes 2c-2f 30-33 34-37 38-3b
|
// Zeroes 2c-2f 30-33 34-37 38-3b
|
||||||
char empty3[4 + 4 + 4 + 4];
|
char empty3[4 + 4 + 4];
|
||||||
// 1.0f 3c-3f
|
// 1.0f 3c-3f
|
||||||
float unkown_float;
|
float unkown_float;
|
||||||
// An object? pointer 40-43
|
// An object? pointer 40-43
|
||||||
char empty4[4];
|
void *ptr3;
|
||||||
// Zeroes 44-47
|
// Zeroes 44-47
|
||||||
char empty5[4];
|
void *user;
|
||||||
// Id 48-4b
|
// Id 48-4b
|
||||||
char unused_id[4];
|
int32_t uniqueID;
|
||||||
// Don't know 4c-4f
|
// Don't know 4c-4f
|
||||||
char unknown1[4];
|
char unknown1[4];
|
||||||
// processReplacing 50-53
|
// processReplacing 50-53
|
||||||
void (* processReplacing)( struct AEffect * , float * * , float * * , int );
|
void (* processReplacing)( AEffect * , float * * , float * * , int );
|
||||||
|
|
||||||
int uniqueID;
|
} ;
|
||||||
|
|
||||||
} AEffect;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct VstTimeInfo
|
class VstTimeInfo
|
||||||
{
|
{
|
||||||
/* info from online documentation of VST provided by Steinberg */
|
public:
|
||||||
|
// 00
|
||||||
|
double samplePos;
|
||||||
|
// 08
|
||||||
|
double sampleRate;
|
||||||
|
// unconfirmed 10 18
|
||||||
|
char empty1[8 + 8];
|
||||||
|
// 20?
|
||||||
|
double tempo;
|
||||||
|
// unconfirmed 28 30 38
|
||||||
|
char empty2[8 + 8 + 8];
|
||||||
|
// 40?
|
||||||
|
int timeSigNumerator;
|
||||||
|
// 44?
|
||||||
|
int timeSigDenominator;
|
||||||
|
// unconfirmed 48 4c 50
|
||||||
|
char empty3[4 + 4 + 4];
|
||||||
|
// 54
|
||||||
|
int flags;
|
||||||
|
|
||||||
double samplePos;
|
} ;
|
||||||
double sampleRate;
|
|
||||||
double nanoSeconds;
|
|
||||||
double ppqPos;
|
|
||||||
double tempo;
|
|
||||||
double barStartPos;
|
|
||||||
double cycleStartPos;
|
|
||||||
double cycleEndPos;
|
|
||||||
double timeSigNumerator;
|
|
||||||
double timeSigDenominator;
|
|
||||||
long smpteOffset;
|
|
||||||
long smpteFrameRate;
|
|
||||||
long samplesToNextClock;
|
|
||||||
long flags;
|
|
||||||
|
|
||||||
} VstTimeInfo;
|
|
||||||
|
|
||||||
|
|
||||||
typedef long int (* audioMasterCallback)( AEffect * , long int , long int ,
|
|
||||||
long int , void * , float );
|
|
||||||
// we don't use it, may be noise
|
|
||||||
#define VSTCALLBACK
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef intptr_t (* audioMasterCallback)( AEffect * , int32_t, int32_t, intptr_t, void * , float );
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
#include <lrdf.h>
|
#include <lrdf.h>
|
||||||
|
|
||||||
/*Include for the new native vst engine - vstfx.h*/
|
/*Include for the new native vst engine - vstfx.h*/
|
||||||
|
#include <stdint.h>
|
||||||
#include <ardour/vstfx.h>
|
#include <ardour/vstfx.h>
|
||||||
|
|
||||||
#include "pbd/compose.h"
|
#include "pbd/compose.h"
|
||||||
|
|
@ -547,38 +547,8 @@ LXVSTPlugin::connect_and_run (BufferSet& bufs,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we already know it can support processReplacing */
|
/* we already know it can support processReplacing */
|
||||||
|
|
||||||
#ifdef LXVST_32BIT
|
|
||||||
_plugin->processReplacing (_plugin, ins, outs, nframes);
|
_plugin->processReplacing (_plugin, ins, outs, nframes);
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined LXVST_64BIT && defined VESTIGE_HEADER
|
|
||||||
|
|
||||||
/* Vestige doesn't work for 64Bit - some of the AEffect struct member types
|
|
||||||
appear not to be correct which throws the data alignment. We have two choices
|
|
||||||
|
|
||||||
1) Fix Vestige - preferable from a technical standpoint, but perhaps
|
|
||||||
not viable without affecting its 'clean room' status
|
|
||||||
|
|
||||||
2) Correct for the alignment error - a bit of a kludge, but it can work,
|
|
||||||
assuming the following data types / sizes on x86-64
|
|
||||||
|
|
||||||
char 1Byte : Byte aligned
|
|
||||||
int 4Bytes : 4Byte aligned
|
|
||||||
long 8Bytes : 8Byte aligned
|
|
||||||
pointers 8Bytes : 8Byte aligned
|
|
||||||
|
|
||||||
This gives an offset of 8 Bytes - inclusive of padding
|
|
||||||
to translate to the correct address for processReplacing
|
|
||||||
*/
|
|
||||||
|
|
||||||
((AEffect*)(((char*)(_plugin)) + 8))->processReplacing(_plugin, ins, outs, nframes);
|
|
||||||
|
|
||||||
#elif defined LXVST_64BIT
|
|
||||||
|
|
||||||
_plugin->processReplacing(_plugin, ins, outs, nframes);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -600,23 +570,9 @@ LXVSTPlugin::unique_id() const
|
||||||
{
|
{
|
||||||
char buf[32];
|
char buf[32];
|
||||||
|
|
||||||
#if defined LXVST_64BIT && defined VESTIGE_HEADER
|
|
||||||
|
|
||||||
/*The vestige header appears not to have correct data
|
|
||||||
alignment in AEffect struct for 64Bit, possibly due
|
|
||||||
to incorrect data types - see previous comments*/
|
|
||||||
|
|
||||||
snprintf (buf, sizeof (buf), "%d", *((int32_t*) &((AEffect*)(((char*)(_plugin)) + 12))->unused_id));
|
|
||||||
|
|
||||||
#elif defined LXVST_32BIT && defined VESTIGE_HEADER
|
|
||||||
|
|
||||||
snprintf (buf, sizeof (buf), "%d", *((int32_t*) &_plugin->unused_id));
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
snprintf (buf, sizeof (buf), "%d", _plugin->uniqueID);
|
snprintf (buf, sizeof (buf), "%d", _plugin->uniqueID);
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return string (buf);
|
return string (buf);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
#include <stdint.h>
|
||||||
#include <ardour/vstfx.h>
|
#include <ardour/vstfx.h>
|
||||||
#include <ardour/vestige/aeffectx.h>
|
#include <ardour/vestige/aeffectx.h>
|
||||||
|
|
||||||
|
|
@ -45,10 +45,10 @@ static int debug_callbacks = -1;
|
||||||
|
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
|
|
||||||
long Session::lxvst_callback (AEffect* effect,
|
intptr_t Session::lxvst_callback (AEffect* effect,
|
||||||
long opcode,
|
int32_t opcode,
|
||||||
long index,
|
int32_t index,
|
||||||
long value,
|
intptr_t value,
|
||||||
void* ptr,
|
void* ptr,
|
||||||
float opt)
|
float opt)
|
||||||
{
|
{
|
||||||
|
|
@ -65,13 +65,13 @@ long Session::lxvst_callback (AEffect* effect,
|
||||||
{
|
{
|
||||||
plug = (LXVSTPlugin*) (effect->user);
|
plug = (LXVSTPlugin*) (effect->user);
|
||||||
session = &plug->session();
|
session = &plug->session();
|
||||||
SHOW_CALLBACK ("am callback 0x%x, opcode = %ld, plugin = \"%s\" ", (unsigned int)pthread_self(), opcode, plug->name());
|
SHOW_CALLBACK ("am callback 0x%x, opcode = %d, plugin = \"%s\" ", (unsigned int)pthread_self(), opcode, plug->name());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
plug = 0;
|
plug = 0;
|
||||||
session = 0;
|
session = 0;
|
||||||
SHOW_CALLBACK ("am callback 0x%x, opcode = %ld", (unsigned int)pthread_self(), opcode);
|
SHOW_CALLBACK ("am callback 0x%x, opcode = %d", (unsigned int)pthread_self(), opcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(opcode){
|
switch(opcode){
|
||||||
|
|
@ -136,12 +136,13 @@ long Session::lxvst_callback (AEffect* effect,
|
||||||
_timeInfo.tempo = t.beats_per_minute ();
|
_timeInfo.tempo = t.beats_per_minute ();
|
||||||
_timeInfo.flags |= (kVstTempoValid);
|
_timeInfo.flags |= (kVstTempoValid);
|
||||||
}
|
}
|
||||||
if (value & (kVstBarsValid)) {
|
// NOTE: 'kVstBarsValid' is no longer defined in vestige headers -- I have no idea how important this is
|
||||||
|
/*if (value & (kVstBarsValid)) {
|
||||||
const Meter& m (session->tempo_map().meter_at (session->transport_frame()));
|
const Meter& m (session->tempo_map().meter_at (session->transport_frame()));
|
||||||
_timeInfo.timeSigNumerator = m.beats_per_bar ();
|
_timeInfo.timeSigNumerator = m.beats_per_bar ();
|
||||||
_timeInfo.timeSigDenominator = m.note_divisor ();
|
_timeInfo.timeSigDenominator = m.note_divisor ();
|
||||||
_timeInfo.flags |= (kVstBarsValid);
|
_timeInfo.flags |= (kVstBarsValid);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
if (session->transport_speed() != 0.0f) {
|
if (session->transport_speed() != 0.0f) {
|
||||||
_timeInfo.flags |= kVstTransportPlaying;
|
_timeInfo.flags |= kVstTransportPlaying;
|
||||||
|
|
|
||||||
|
|
@ -249,23 +249,8 @@ static VSTFXInfo* vstfx_info_from_plugin(VSTFX *vstfx)
|
||||||
info->creator = strdup (creator);
|
info->creator = strdup (creator);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined LXVST_64BIT && defined VESTIGE_HEADER
|
|
||||||
|
|
||||||
/*On 64Bit the data alignment in AEffect struct is
|
|
||||||
incorrect using vestige. see lxvst_plugin.cc*/
|
|
||||||
|
|
||||||
info->UniqueID = *((int32_t *) &((AEffect*)(((char*)(plugin)) + 12))->unused_id);
|
|
||||||
|
|
||||||
#elif defined LXVST_32BIT && defined VESTIGE_HEADER
|
|
||||||
|
|
||||||
info->UniqueID = *((int32_t *) &plugin->unused_id);
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
info->UniqueID = plugin->uniqueID;
|
info->UniqueID = plugin->uniqueID;
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
info->Category = strdup("None"); // FIXME:
|
info->Category = strdup("None"); // FIXME:
|
||||||
info->numInputs = plugin->numInputs;
|
info->numInputs = plugin->numInputs;
|
||||||
info->numOutputs = plugin->numOutputs;
|
info->numOutputs = plugin->numOutputs;
|
||||||
|
|
@ -288,7 +273,8 @@ static VSTFXInfo* vstfx_info_from_plugin(VSTFX *vstfx)
|
||||||
plugin->dispatcher (plugin, effGetParamName, i, 0, name, 0);
|
plugin->dispatcher (plugin, effGetParamName, i, 0, name, 0);
|
||||||
info->ParamNames[i] = strdup(name);
|
info->ParamNames[i] = strdup(name);
|
||||||
|
|
||||||
plugin->dispatcher (plugin, effGetParamLabel, i, 0, label, 0);
|
//NOTE: 'effGetParamLabel' is no longer defined in vestige headers
|
||||||
|
//plugin->dispatcher (plugin, effGetParamLabel, i, 0, label, 0);
|
||||||
info->ParamLabels[i] = strdup(label);
|
info->ParamLabels[i] = strdup(label);
|
||||||
}
|
}
|
||||||
return info;
|
return info;
|
||||||
|
|
@ -297,7 +283,7 @@ static VSTFXInfo* vstfx_info_from_plugin(VSTFX *vstfx)
|
||||||
/* A simple 'dummy' audiomaster callback which should be ok,
|
/* A simple 'dummy' audiomaster callback which should be ok,
|
||||||
we will only be instantiating the plugin in order to get its info*/
|
we will only be instantiating the plugin in order to get its info*/
|
||||||
|
|
||||||
static long simple_master_callback(struct AEffect *, long opcode, long, long, void *, float)
|
static long simple_master_callback(struct AEffect *, int32_t opcode, int32_t, intptr_t, void *, float)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (opcode == audioMasterVersion)
|
if (opcode == audioMasterVersion)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue