19 #ifndef _ardour_vst3_host_h_
20 #define _ardour_vst3_host_h_
32 #include "vst3/vst3.h"
34 #define QUERY_INTERFACE_IMPL(Interface) \
35 tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) SMTG_OVERRIDE \
37 QUERY_INTERFACE (_iid, obj, FUnknown::iid, Interface) \
38 QUERY_INTERFACE (_iid, obj, Interface::iid, Interface) \
40 return kNoInterface; \
43 #if defined(__clang__)
44 # pragma clang diagnostic push
45 # pragma clang diagnostic ignored "-Wnon-virtual-dtor"
46 # pragma clang diagnostic ignored "-Wdelete-non-virtual-dtor"
47 # pragma clang diagnostic ignored "-Wdelete-non-abstract-non-virtual-dtor"
48 #elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)
49 # pragma GCC diagnostic push
50 # pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
51 # pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor"
101 memcpy (
v.
stringValue, value, _size * sizeof (Vst::TChar));
157 uint32 PLUGIN_API
addRef () SMTG_OVERRIDE;
161 std::atomic<
int> _cnt;
172 uint32 PLUGIN_API
addRef () SMTG_OVERRIDE
182 tresult PLUGIN_API
setInt (AttrID aid, int64 value) SMTG_OVERRIDE;
183 tresult PLUGIN_API
getInt (AttrID aid, int64& value) SMTG_OVERRIDE;
184 tresult PLUGIN_API
setFloat (AttrID aid,
double value) SMTG_OVERRIDE;
185 tresult PLUGIN_API
getFloat (AttrID aid,
double& value) SMTG_OVERRIDE;
186 tresult PLUGIN_API
setString (AttrID aid,
const Vst::TChar*
string) SMTG_OVERRIDE;
187 tresult PLUGIN_API
getString (AttrID aid, Vst::TChar*
string, uint32 size) SMTG_OVERRIDE;
188 tresult PLUGIN_API
setBinary (AttrID aid,
const void* data, uint32 size) SMTG_OVERRIDE;
189 tresult PLUGIN_API
getBinary (AttrID aid,
const void*& data, uint32& size) SMTG_OVERRIDE;
194 std::map<std::string, HostAttribute*>
list;
205 uint32 PLUGIN_API
addRef () SMTG_OVERRIDE
216 void PLUGIN_API setMessageID (const
char* messageID) SMTG_OVERRIDE;
217 Vst::IAttributeList* PLUGIN_API getAttributes () SMTG_OVERRIDE;
232 uint32 PLUGIN_API addRef () SMTG_OVERRIDE
243 tresult PLUGIN_API
connect (Vst::IConnectionPoint*) SMTG_OVERRIDE;
244 tresult PLUGIN_API
disconnect (Vst::IConnectionPoint*) SMTG_OVERRIDE;
245 tresult PLUGIN_API
notify (Vst::IMessage*) SMTG_OVERRIDE;
260 uint32 PLUGIN_API
addRef () SMTG_OVERRIDE
294 uint32 PLUGIN_API
addRef () SMTG_OVERRIDE
305 tresult PLUGIN_API
createInstance (TUID cid, TUID _iid,
void** obj) SMTG_OVERRIDE;
320 class LIBARDOUR_LOCAL Vst3ParamValueQueue :
public Vst::IParamValueQueue
325 uint32 PLUGIN_API addRef () SMTG_OVERRIDE
330 uint32 PLUGIN_API
release () SMTG_OVERRIDE
335 static const int maxNumPoints = 64;
337 Vst3ParamValueQueue ()
339 _values.reserve (maxNumPoints);
340 _id = Vst::kNoParamId;
343 Vst::ParamID PLUGIN_API getParameterId () SMTG_OVERRIDE
348 void setParameterId (Vst::ParamID
id)
354 int32 PLUGIN_API getPointCount () SMTG_OVERRIDE
356 return _values.size ();
359 tresult PLUGIN_API getPoint (int32 index, int32&, Vst::ParamValue&) SMTG_OVERRIDE;
360 tresult PLUGIN_API addPoint (int32, Vst::ParamValue, int32&) SMTG_OVERRIDE;
364 Value (Vst::ParamValue v, int32 offset)
366 , sampleOffset (offset)
369 Vst::ParamValue value;
373 std::vector<Value> _values;
377 class LIBARDOUR_LOCAL Vst3ParameterChanges :
public Vst::IParameterChanges
382 uint32 PLUGIN_API addRef () SMTG_OVERRIDE
387 uint32 PLUGIN_API
release () SMTG_OVERRIDE
392 Vst3ParameterChanges ()
397 void set_n_params (
int n)
404 _used_queue_count = 0;
407 int32 PLUGIN_API getParameterCount () SMTG_OVERRIDE
409 return _used_queue_count;
412 Vst::IParamValueQueue* PLUGIN_API getParameterData (int32 index) SMTG_OVERRIDE;
413 Vst::IParamValueQueue* PLUGIN_API addParameterData (Vst::ParamID
const&
id, int32& index) SMTG_OVERRIDE;
416 std::vector<Vst3ParamValueQueue> _queue;
417 int _used_queue_count;
425 _events.reserve (128);
430 uint32 PLUGIN_API addRef () SMTG_OVERRIDE
435 uint32 PLUGIN_API
release () SMTG_OVERRIDE
440 int32 PLUGIN_API PLUGIN_API getEventCount () SMTG_OVERRIDE
442 return _events.size ();
445 tresult PLUGIN_API getEvent (int32 index, Vst::Event& e) SMTG_OVERRIDE
447 if (index >= 0 && index < (int32)_events.size ()) {
455 tresult PLUGIN_API addEvent (Vst::Event& e) SMTG_OVERRIDE
457 _events.push_back (e);
467 std::vector<Vst::Event> _events;
470 class LIBARDOUR_LOCAL RAMStream :
public IBStream,
public ISizeableStream,
public Vst::IStreamAttributes
474 RAMStream (uint8_t* data,
size_t size);
475 RAMStream (std::string
const& fn);
477 virtual ~RAMStream ();
479 tresult PLUGIN_API queryInterface (
const TUID _iid,
void** obj) SMTG_OVERRIDE;
481 uint32 PLUGIN_API addRef () SMTG_OVERRIDE
486 uint32 PLUGIN_API
release () SMTG_OVERRIDE
492 tresult PLUGIN_API read (
void* buffer, int32 numBytes, int32* numBytesRead) SMTG_OVERRIDE;
493 tresult PLUGIN_API write (
void* buffer, int32 numBytes, int32* numBytesWritten) SMTG_OVERRIDE;
494 tresult PLUGIN_API seek (int64 pos, int32 mode, int64* result) SMTG_OVERRIDE;
495 tresult PLUGIN_API tell (int64* pos) SMTG_OVERRIDE;
498 tresult PLUGIN_API getStreamSize (int64&) SMTG_OVERRIDE;
499 tresult PLUGIN_API setStreamSize (int64) SMTG_OVERRIDE;
502 tresult PLUGIN_API getFileName (Vst::String128
name) SMTG_OVERRIDE;
503 Vst::IAttributeList* PLUGIN_API getAttributes () SMTG_OVERRIDE;
511 bool readonly ()
const
516 bool write_int32 (int32 i);
517 bool write_int64 (int64 i);
519 bool write_TUID (
const TUID& tuid);
521 bool read_int32 (int32& i);
522 bool read_int64 (int64& i);
524 bool read_TUID (TUID& tuid);
527 uint8_t
const* data ()
const
538 void hexdump (int64 max_len = 64)
const;
542 bool reallocate_buffer (int64 size,
bool exact);
544 template <
typename T>
548 read ((
void*)&t,
sizeof (T), &n_read);
549 return n_read ==
sizeof (T);
552 template <
typename T>
553 bool write_pod (
const T& t)
556 write (
const_cast<void*
> ((
const void*)&t),
sizeof (T), &written);
557 return written ==
sizeof (T);
566 HostAttributeList attribute_list;
572 ROMStream (IBStream& src, TSize offset, TSize size);
573 virtual ~ROMStream ();
575 tresult PLUGIN_API queryInterface (
const TUID _iid,
void** obj) SMTG_OVERRIDE;
577 uint32 PLUGIN_API addRef () SMTG_OVERRIDE
582 uint32 PLUGIN_API
release () SMTG_OVERRIDE
588 tresult PLUGIN_API read (
void* buffer, int32 numBytes, int32* numBytesRead) SMTG_OVERRIDE;
589 tresult PLUGIN_API write (
void* buffer, int32 numBytes, int32* numBytesWritten) SMTG_OVERRIDE;
590 tresult PLUGIN_API seek (int64 pos, int32 mode, int64* result) SMTG_OVERRIDE;
591 tresult PLUGIN_API tell (int64* pos) SMTG_OVERRIDE;
605 #if defined(__clang__)
606 #pragma clang diagnostic pop
607 #elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
608 #pragma GCC diagnostic pop
~ConnectionProxy() SMTG_OVERRIDE
tresult PLUGIN_API notify(Vst::IMessage *) SMTG_OVERRIDE
tresult PLUGIN_API disconnect(Vst::IConnectionPoint *) SMTG_OVERRIDE
uint32 PLUGIN_API release() SMTG_OVERRIDE
tresult PLUGIN_API connect(Vst::IConnectionPoint *) SMTG_OVERRIDE
ConnectionProxy(IConnectionPoint *src)
static HostApplication * theHostContext()
tresult PLUGIN_API queryInterface(const TUID _iid, void **obj) SMTG_OVERRIDE
tresult PLUGIN_API getContextInfoValue(int32 &, FIDString) SMTG_OVERRIDE
std::unique_ptr< PlugInterfaceSupport > _plug_interface_support
void set_session(ARDOUR::Session *)
uint32 PLUGIN_API addRef() SMTG_OVERRIDE
tresult PLUGIN_API createInstance(TUID cid, TUID _iid, void **obj) SMTG_OVERRIDE
static Vst::IHostApplication * getHostContext()
tresult PLUGIN_API getContextInfoString(Vst::TChar *, int32, FIDString) SMTG_OVERRIDE
virtual ~HostApplication()
tresult PLUGIN_API getName(Vst::String128 name) SMTG_OVERRIDE
uint32 PLUGIN_API release() SMTG_OVERRIDE
ARDOUR::Session * _session
tresult PLUGIN_API setBinary(AttrID aid, const void *data, uint32 size) SMTG_OVERRIDE
virtual ~HostAttributeList()
tresult PLUGIN_API getBinary(AttrID aid, const void *&data, uint32 &size) SMTG_OVERRIDE
std::map< std::string, HostAttribute * > list
uint32 PLUGIN_API release() SMTG_OVERRIDE
tresult PLUGIN_API setString(AttrID aid, const Vst::TChar *string) SMTG_OVERRIDE
tresult PLUGIN_API setInt(AttrID aid, int64 value) SMTG_OVERRIDE
uint32 PLUGIN_API addRef() SMTG_OVERRIDE
void removeAttrID(AttrID aid)
tresult PLUGIN_API getFloat(AttrID aid, double &value) SMTG_OVERRIDE
tresult PLUGIN_API setFloat(AttrID aid, double value) SMTG_OVERRIDE
tresult PLUGIN_API getInt(AttrID aid, int64 &value) SMTG_OVERRIDE
tresult PLUGIN_API getString(AttrID aid, Vst::TChar *string, uint32 size) SMTG_OVERRIDE
double floatValue() const
HostAttribute(const void *value, uint32 size)
HostAttribute(int64 value)
const Vst::TChar * stringValue(uint32 &stringSize)
const void * binaryValue(uint32 &binarySize)
HostAttribute(HostAttribute const &other)
HostAttribute(const Vst::TChar *value, uint32 size)
HostAttribute(double value)
uint32 PLUGIN_API release() SMTG_OVERRIDE
const char *PLUGIN_API getMessageID() SMTG_OVERRIDE
uint32 PLUGIN_API addRef() SMTG_OVERRIDE
uint32 PLUGIN_API addRef() SMTG_OVERRIDE
uint32 PLUGIN_API release() SMTG_OVERRIDE
void addPlugInterfaceSupported(const TUID)
std::vector< FUID > _interfaces
tresult PLUGIN_API isPlugInterfaceSupported(const TUID) SMTG_OVERRIDE
uint32 PLUGIN_API release() SMTG_OVERRIDE
uint32 PLUGIN_API addRef() SMTG_OVERRIDE
GtkImageIconNameData name
static const int32 kClassIDSize
static const int32 kListOffsetPos
static const int32 kHeaderSize
std::string tchar_to_utf8(Vst::TChar const *s)
bool utf8_to_tchar(Vst::TChar *rv, const char *s, size_t l=0)
#define QUERY_INTERFACE_IMPL(Interface)