projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LuaProc::can_support_io_configuration: don't mix int and int32_t
[ardour.git]
/
libs
/
ardour
/
vst_plugin.cc
diff --git
a/libs/ardour/vst_plugin.cc
b/libs/ardour/vst_plugin.cc
index 52e139db84fab0bcc7ab722006271cac9b4e2931..8188354062c4b6adfeb3b79952008d18818c84ab 100644
(file)
--- a/
libs/ardour/vst_plugin.cc
+++ b/
libs/ardour/vst_plugin.cc
@@
-18,14
+18,13
@@
*/
#include <glib.h>
*/
#include <glib.h>
-#include
<glib/gstdio.h>
+#include
"pbd/gstdio_compat.h"
#include <glibmm/fileutils.h>
#include <glibmm/miscutils.h>
#include "pbd/floating.h"
#include "pbd/locale_guard.h"
#include <glibmm/fileutils.h>
#include <glibmm/miscutils.h>
#include "pbd/floating.h"
#include "pbd/locale_guard.h"
-#include "pbd/pathscanner.h"
#include "ardour/vst_plugin.h"
#include "ardour/vestige/aeffectx.h"
#include "ardour/vst_plugin.h"
#include "ardour/vestige/aeffectx.h"
@@
-34,7
+33,7
@@
#include "ardour/filesystem_paths.h"
#include "ardour/audio_buffer.h"
#include "ardour/filesystem_paths.h"
#include "ardour/audio_buffer.h"
-#include "i18n.h"
+#include "
pbd/
i18n.h"
using namespace std;
using namespace PBD;
using namespace std;
using namespace PBD;
@@
-45,8
+44,12
@@
VSTPlugin::VSTPlugin (AudioEngine& engine, Session& session, VSTHandle* handle)
, _handle (handle)
, _state (0)
, _plugin (0)
, _handle (handle)
, _state (0)
, _plugin (0)
+ , _pi (0)
+ , _num (0)
+ , _transport_frame (0)
+ , _transport_speed (0.f)
{
{
-
+ memset (&_timeInfo, 0, sizeof(_timeInfo));
}
VSTPlugin::~VSTPlugin ()
}
VSTPlugin::~VSTPlugin ()
@@
-88,9
+91,9
@@
VSTPlugin::set_block_size (pframes_t nframes)
}
float
}
float
-VSTPlugin::default_value (uint32_t)
+VSTPlugin::default_value (uint32_t
which
)
{
{
- return
0
;
+ return
_parameter_defaults[which]
;
}
float
}
float
@@
-159,7
+162,7
@@
VSTPlugin::set_chunk (gchar const * data, bool single)
void
VSTPlugin::add_state (XMLNode* root) const
{
void
VSTPlugin::add_state (XMLNode* root) const
{
- LocaleGuard lg
(X_("POSIX"))
;
+ LocaleGuard lg;
if (_plugin->flags & 32 /* effFlagsProgramsChunks */) {
if (_plugin->flags & 32 /* effFlagsProgramsChunks */) {
@@
-196,7
+199,7
@@
VSTPlugin::add_state (XMLNode* root) const
int
VSTPlugin::set_state (const XMLNode& node, int version)
{
int
VSTPlugin::set_state (const XMLNode& node, int version)
{
- LocaleGuard lg
(X_("POSIX"))
;
+ LocaleGuard lg;
int ret = -1;
if (node.name() != state_node_name()) {
int ret = -1;
if (node.name() != state_node_name()) {
@@
-250,6
+253,7
@@
VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
{
VstParameterProperties prop;
{
VstParameterProperties prop;
+ memset (&prop, 0, sizeof (VstParameterProperties));
desc.min_unbound = false;
desc.max_unbound = false;
prop.flags = 0;
desc.min_unbound = false;
desc.max_unbound = false;
prop.flags = 0;
@@
-257,6
+261,7
@@
VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
if (_plugin->dispatcher (_plugin, effGetParameterProperties, which, 0, &prop, 0)) {
/* i have yet to find or hear of a VST plugin that uses this */
if (_plugin->dispatcher (_plugin, effGetParameterProperties, which, 0, &prop, 0)) {
/* i have yet to find or hear of a VST plugin that uses this */
+ /* RG: faust2vsti does use this :) */
if (prop.flags & kVstParameterUsesIntegerMinMax) {
desc.lower = prop.minInteger;
if (prop.flags & kVstParameterUsesIntegerMinMax) {
desc.lower = prop.minInteger;
@@
-287,6
+292,10
@@
VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
desc.largestep = desc.step * 10.0f;
}
desc.largestep = desc.step * 10.0f;
}
+ if (strlen(prop.label) == 0) {
+ _plugin->dispatcher (_plugin, effGetParamName, which, 0, prop.label, 0);
+ }
+
desc.toggled = prop.flags & kVstParameterIsSwitch;
desc.logarithmic = false;
desc.sr_dependent = false;
desc.toggled = prop.flags & kVstParameterIsSwitch;
desc.logarithmic = false;
desc.sr_dependent = false;
@@
-314,6
+323,9
@@
VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
desc.sr_dependent = false;
}
desc.sr_dependent = false;
}
+ desc.normal = get_parameter (which);
+ _parameter_defaults[which] = desc.normal;
+
return 0;
}
return 0;
}
@@
-370,7
+382,7
@@
VSTPlugin::load_user_preset (PresetRecord r)
XMLNode* root = t->root ();
for (XMLNodeList::const_iterator i = root->children().begin(); i != root->children().end(); ++i) {
XMLNode* root = t->root ();
for (XMLNodeList::const_iterator i = root->children().begin(); i != root->children().end(); ++i) {
- XMLProperty* label = (*i)->property (X_("label"));
+ XMLProperty
const
* label = (*i)->property (X_("label"));
assert (label);
assert (label);
@@
-404,8
+416,8
@@
VSTPlugin::load_user_preset (PresetRecord r)
for (XMLNodeList::const_iterator j = (*i)->children().begin(); j != (*i)->children().end(); ++j) {
if ((*j)->name() == X_("Parameter")) {
for (XMLNodeList::const_iterator j = (*i)->children().begin(); j != (*i)->children().end(); ++j) {
if ((*j)->name() == X_("Parameter")) {
- XMLProperty* index = (*j)->property (X_("index"));
- XMLProperty* value = (*j)->property (X_("value"));
+ XMLProperty
const
* index = (*j)->property (X_("index"));
+ XMLProperty
const
* value = (*j)->property (X_("value"));
assert (index);
assert (value);
assert (index);
assert (value);
@@
-505,7
+517,11
@@
VSTPlugin::signal_latency () const
return _user_latency;
}
return _user_latency;
}
+#if ( defined(__x86_64__) || defined(_M_X64) )
+ return *((int32_t *) (((char *) &_plugin->flags) + 24)); /* initialDelay */
+#else
return *((int32_t *) (((char *) &_plugin->flags) + 12)); /* initialDelay */
return *((int32_t *) (((char *) &_plugin->flags) + 12)); /* initialDelay */
+#endif
}
set<Evoral::Parameter>
}
set<Evoral::Parameter>
@@
-522,10
+538,14
@@
VSTPlugin::automatable () const
int
VSTPlugin::connect_and_run (BufferSet& bufs,
int
VSTPlugin::connect_and_run (BufferSet& bufs,
+ framepos_t start, framepos_t end, double speed,
ChanMapping in_map, ChanMapping out_map,
pframes_t nframes, framecnt_t offset)
{
ChanMapping in_map, ChanMapping out_map,
pframes_t nframes, framecnt_t offset)
{
- Plugin::connect_and_run (bufs, in_map, out_map, nframes, offset);
+ Plugin::connect_and_run(bufs, start, end, speed, in_map, out_map, nframes, offset);
+
+ _transport_frame = start;
+ _transport_speed = speed;
ChanCount bufs_count;
bufs_count.set(DataType::AUDIO, 1);
ChanCount bufs_count;
bufs_count.set(DataType::AUDIO, 1);
@@
-544,7
+564,7
@@
VSTPlugin::connect_and_run (BufferSet& bufs,
*/
float** ins = (float**)alloca(_plugin->numInputs*sizeof(float*));
*/
float** ins = (float**)alloca(_plugin->numInputs*sizeof(float*));
- float** outs = (float**)alloca(_plugin->num
In
puts*sizeof(float*));
+ float** outs = (float**)alloca(_plugin->num
Out
puts*sizeof(float*));
int32_t i;
int32_t i;
@@
-564,8
+584,8
@@
VSTPlugin::connect_and_run (BufferSet& bufs,
bool valid = false;
index = out_map.get(DataType::AUDIO, out_index++, &valid);
outs[i] = (valid)
bool valid = false;
index = out_map.get(DataType::AUDIO, out_index++, &valid);
outs[i] = (valid)
-
? bufs.get_audio(index).data(offset)
-
: scratch_bufs.get_audio(0).data(offset);
+ ? bufs.get_audio(index).data(offset)
+ : scratch_bufs.get_audio(0).data(offset);
}
if (bufs.count().n_midi() > 0) {
}
if (bufs.count().n_midi() > 0) {
@@
-609,6
+629,9
@@
VSTPlugin::unique_id () const
const char *
VSTPlugin::name () const
{
const char *
VSTPlugin::name () const
{
+ if (!_info->name.empty ()) {
+ return _info->name.c_str();
+ }
return _handle->name;
}
return _handle->name;
}
@@
-666,7
+689,7
@@
VSTPlugin::find_presets ()
int const vst_version = _plugin->dispatcher (_plugin, effGetVstVersion, 0, 0, NULL, 0);
for (int i = 0; i < _plugin->numPrograms; ++i) {
int const vst_version = _plugin->dispatcher (_plugin, effGetVstVersion, 0, 0, NULL, 0);
for (int i = 0; i < _plugin->numPrograms; ++i) {
- PresetRecord r (string_compose (X_("VST:%1:%2"), unique_id (), i), "",
-1,
false);
+ PresetRecord r (string_compose (X_("VST:%1:%2"), unique_id (), i), "", false);
if (vst_version >= 2) {
char buf[256];
if (vst_version >= 2) {
char buf[256];
@@
-690,13
+713,13
@@
VSTPlugin::find_presets ()
XMLNode* root = t->root ();
for (XMLNodeList::const_iterator i = root->children().begin(); i != root->children().end(); ++i) {
XMLNode* root = t->root ();
for (XMLNodeList::const_iterator i = root->children().begin(); i != root->children().end(); ++i) {
- XMLProperty* uri = (*i)->property (X_("uri"));
- XMLProperty* label = (*i)->property (X_("label"));
+ XMLProperty
const
* uri = (*i)->property (X_("uri"));
+ XMLProperty
const
* label = (*i)->property (X_("label"));
assert (uri);
assert (label);
assert (uri);
assert (label);
- PresetRecord r (uri->value(), label->value(),
-1,
true);
+ PresetRecord r (uri->value(), label->value(), true);
_presets.insert (make_pair (r.uri, r));
}
}
_presets.insert (make_pair (r.uri, r));
}
}