28#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
43 const plugin_metadata_iface *metadata;
44 audio_module_iface *module;
47 LV2_Atom_Sequence *event_in_data, *event_out_data;
50 uint32_t midi_event_type, property_type, string_type, sequence_type;
53 float **
ins, **outs, **params;
62 std::vector<lv2_var> vars;
63 std::map<uint32_t, int> uri_to_var;
65 lv2_instance(audio_module_iface *_module);
69 void post_instantiate();
71 virtual bool activate_preset(
int bank,
int program) {
74 virtual float get_level(
unsigned int port) {
return 0.f; }
75 virtual void execute(
int cmd_no) {
76 module->execute(cmd_no);
78 virtual void report_progress(
float percentage,
const std::string &
message) {
79 if (progress_report_feature)
82 void send_configures(send_configure_iface *sci) {
83 module->send_configures(sci);
88 char *configure(
const char *
key,
const char *
value) {
90 return module->configure(key, value);
96 uint32_t hdr_size =
sizeof(LV2_Atom_Event);
97 if (remaining <
sizeof(LV2_Atom_Event) + data_size)
100 event->time.frames = time_frames;
101 event->body.type =
type;
102 event->body.size = data_size;
104 return ((
uint8_t *)event) + hdr_size;
106 void output_event_string(
const char *str,
int len = -1);
107 void output_event_property(
const char *
key,
const char *
value);
108 void process_event_string(
const char *str);
109 void process_event_property(
const LV2_Atom_Property *prop);
110 void process_events(
uint32_t &offset);
111 void run(
uint32_t SampleCount,
bool has_simulate_stereo_input_flag);
112 virtual float get_param_value(
int param_no)
115 if (param_no >= real_param_count)
117 return (*params)[param_no];
119 virtual void set_param_value(
int param_no,
float value)
122 if (param_no >= real_param_count)
124 *params[param_no] =
value;
126 virtual const plugin_metadata_iface *get_metadata_iface()
const {
return metadata; }
127 virtual const line_graph_iface *get_line_graph_iface()
const {
return module->get_line_graph_iface(); }
128 virtual const phase_graph_iface *get_phase_graph_iface()
const {
return module->get_phase_graph_iface(); }
129 virtual int send_status_updates(send_updates_iface *sui,
int last_serial) {
return module->send_status_updates(sui, last_serial); }
132struct LV2_Calf_Descriptor {
133 plugin_ctl_iface *(*get_pci)(
LV2_Handle Instance);
143 virtual void send_configure(
const char *
key,
const char *
value);
147template<
class Module>
150 typedef lv2_instance instance;
152 static LV2_Calf_Descriptor calf_descriptor;
158 ladspa_plugin_info &
info = Module::plugin_info;
159 uri =
"http://calf.sourceforge.net/plugins/" + std::string(
info.label);
168 state_iface.
save = cb_state_save;
169 state_iface.
restore = cb_state_restore;
170 calf_descriptor.
get_pci = cb_get_pci;
175 instance *
const mod = (instance *)Instance;
176 const plugin_metadata_iface *
md = mod->metadata;
177 unsigned long ins =
md->get_input_count();
178 unsigned long outs =
md->get_output_count();
179 unsigned long params =
md->get_param_count();
180 bool has_event_in =
md->get_midi() ||
md->sends_live_updates();
181 bool has_event_out =
md->sends_live_updates();
184 mod->ins[
port] = (
float *)DataLocation;
185 else if (port < ins + outs)
186 mod->outs[
port -
ins] = (
float *)DataLocation;
187 else if (port < ins + outs + params) {
189 mod->params[
i] = (
float *)DataLocation;
191 else if (has_event_in && port == ins + outs + params) {
192 mod->event_in_data = (LV2_Atom_Sequence *)DataLocation;
194 else if (has_event_out && port == ins + outs + params + (has_event_in ? 1 : 0)) {
195 mod->event_out_data = (LV2_Atom_Sequence *)DataLocation;
201 instance *
const mod = (instance *)Instance;
202 mod->set_srate =
true;
205 static void cb_deactivate(
LV2_Handle Instance)
207 instance *
const mod = (instance *)Instance;
208 mod->module->deactivate();
213 instance *mod =
new instance(
new Module);
214 mod->lv2_instantiate(Descriptor, sample_rate, bundle_path, features);
217 static plugin_ctl_iface *cb_get_pci(
LV2_Handle Instance)
219 return static_cast<plugin_ctl_iface *
>(Instance);
224 instance *
const inst = (instance *)Instance;
225 inst->run(SampleCount, Module::simulate_stereo_input);
229 instance *
const mod = (instance *)Instance;
234 static const void *cb_ext_data(
const char *
URI)
236 if (!strcmp(
URI,
"http://foltman.com/ns/calf-plugin-instance"))
237 return &calf_descriptor;
246 instance *
const inst = (instance *)Instance;
247 return inst->state_save(store, handle, flags, features);
253 instance *
const inst = (instance *)Instance;
254 inst->impl_restore(retrieve, callback_data);
258 static lv2_wrapper &
get() {
259 static lv2_wrapper instance;
static LV2_Handle lv2_instantiate(const LV2_Descriptor *lv2Descriptor, double sampleRate, const char *bundlePath, const LV2_Feature *const *features)
Definition CarlaBridgeSingleLV2.cpp:565
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
static const LV2_Descriptor descriptor
Definition bindings_test_plugin.c:165
static void run(LV2_Handle instance, uint32_t n_samples)
Definition bindings_test_plugin.c:112
unsigned md
Definition inflate.c:944
register unsigned i
Definition inflate.c:1575
static PuglViewHint int value
Definition pugl.h:1708
static const char * name
Definition pugl.h:1582
void * LV2_Handle
Definition lv2.h:133
struct _LV2_Descriptor LV2_Descriptor
struct _LV2_Feature LV2_Feature
struct _LV2_Options_Interface LV2_Options_Interface
void * LV2_State_Handle
Opaque handle for state save/restore.
Definition state.h:54
#define LV2_STATE__interface
http://lv2plug.in/ns/ext/state#interface
Definition state.h:41
LV2_State_Status(* LV2_State_Store_Function)(LV2_State_Handle handle, uint32_t key, const void *value, size_t size, uint32_t type, uint32_t flags)
Definition state.h:147
const void *(* LV2_State_Retrieve_Function)(LV2_State_Handle handle, uint32_t key, size_t *size, uint32_t *type, uint32_t *flags)
Definition state.h:173
LV2_State_Status
Definition state.h:104
@ LV2_STATE_SUCCESS
Definition state.h:105
struct _LV2_URID_Map LV2_URID_Map
static uint32_t lv2_atom_pad_size(uint32_t size)
Definition atom-util.h:48
static const LV2_Atom_Event * lv2_atom_sequence_end(const LV2_Atom_Sequence_Body *body, uint32_t size)
Definition atom-util.h:90
struct backing_store_struct * info
Definition jmemsys.h:183
LV2 progress notification extension definition.
struct _LV2_Progress LV2_Progress
host feature structure
struct _LV2_State_Interface LV2_State_Interface
static LilvNode * urid_map
Definition lv2bench.c:37
unsigned int uint32_t
Definition mid.cpp:100
unsigned char uint8_t
Definition mid.cpp:98
Definition benchmark.cpp:53
auto & get(ProcessorChain< Processors... > &chain) noexcept
Definition juce_ProcessorChain.h:133
jack_client_t client jack_client_t client jack_client_t client jack_client_t JackInfoShutdownCallback void arg jack_client_t jack_port_t * port
Definition juce_linux_JackAudio.cpp:65
Instrument * ins
Definition HydrogenImport.cpp:138
void * context
Definition lv2_progress.h:63
void(* progress)(void *context, float progress, const char *message)
Definition lv2_progress.h:75
LV2_Atom atom
Definition atom.h:244
LV2_Atom_Sequence_Body body
Definition atom.h:245
uint32_t size
Definition atom.h:107
plugin_ctl_iface *(* get_pci)(LV2_Handle Instance)
Definition lv2gui.cpp:39
void(* deactivate)(LV2_Handle instance)
Definition lv2.h:324
const char * URI
Definition lv2.h:188
void(* run)(LV2_Handle instance, uint32_t sample_count)
Definition lv2.h:304
void(* connect_port)(LV2_Handle instance, uint32_t port, void *data_location)
Definition lv2.h:256
void(* cleanup)(LV2_Handle instance)
Definition lv2.h:337
LV2_Handle(* instantiate)(const struct LV2_Descriptor *descriptor, double sample_rate, const char *bundle_path, const LV2_Feature *const *features)
Definition lv2.h:217
void(* activate)(LV2_Handle instance)
Definition lv2.h:279
const void *(* extension_data)(const char *uri)
Definition lv2.h:352
LV2_State_Status(* restore)(LV2_Handle instance, LV2_State_Retrieve_Function retrieve, LV2_State_Handle handle, uint32_t flags, const LV2_Feature *const *features)
Definition state.h:266
LV2_State_Status(* save)(LV2_Handle instance, LV2_State_Store_Function store, LV2_State_Handle handle, uint32_t flags, const LV2_Feature *const *features)
Definition state.h:235
Interface for host-GUI-plugin interaction (should be really split in two, but ... meh).
Definition giface.h:389
ZCONST char * key
Definition crypt.c:587