naspro
view naspro-bridges-bad/dssi/descriptor.c @ 166:1bb57a7a5b46
Removed run_multiple_synths() support completely (and now Hexter doesn't show up :-( )
| author | Stefano D'Angelo <zanga.mail@gmail.com> |
|---|---|
| date | Fri Sep 11 18:54:39 2009 +0200 (2009-09-11) |
| parents | d7568c8379c1 |
| children | 7aeb0c5ff3af |
line source
1 /*
2 * NASPRO - NASPRO Architecture for Sound Processing
3 * DSSI bridge
4 *
5 * Copyright (C) 2007-2009 Stefano D'Angelo <zanga.mail@gmail.com>
6 *
7 * See the COPYING file for license conditions.
8 */
10 #include <stddef.h>
11 #include <string.h>
13 #include <math.h>
15 #include <dssi.h>
16 #include <ladspa.h>
18 #include <NASPRO/core/lib.h>
20 #include "descriptor.h"
21 #include "lv2api.h"
23 void
24 _nadssi_descriptor_fill(struct nacore_descriptor *desc,
25 const DSSI_Descriptor *ddesc)
26 {
27 const LADSPA_Descriptor *ldesc;
28 size_t i;
29 char is_synth;
31 ldesc = ddesc->LADSPA_Plugin;
33 desc->data = (void *)ddesc;
35 desc->name = (char *)ldesc->Name;
36 desc->creator = (*ldesc->Maker != '\0') ? NULL : (char *)ldesc->Maker;
37 desc->rights = strcmp(ldesc->Copyright, "None")
38 ? (char *)ldesc->Copyright : NULL;
40 desc->instantiate = _nadssi_lv2api_instantiate;
41 desc->connect_port = _nadssi_lv2api_connect_port;
42 desc->activate = ldesc->activate != NULL ? _nadssi_lv2api_activate
43 : NULL;
44 desc->run = _nadssi_lv2api_run;
45 desc->deactivate = ldesc->deactivate != NULL
46 ? _nadssi_lv2api_deactivate : NULL;
47 desc->cleanup = _nadssi_lv2api_cleanup;
48 desc->extension_data = NULL;
50 desc->properties = 0;
51 if (LADSPA_IS_REALTIME(ldesc->Properties))
52 desc->properties |= NACORE_DESCRIPTOR_HAS_LIVE_DEP;
53 if (LADSPA_IS_INPLACE_BROKEN(ldesc->Properties))
54 desc->properties |= NACORE_DESCRIPTOR_INPLACE_BROKEN;
55 if (LADSPA_IS_HARD_RT_CAPABLE(ldesc->Properties))
56 desc->properties |= NACORE_DESCRIPTOR_HARD_RT_CAPABLE;
58 desc->classes_1 = 0;
59 desc->classes_2 = 0;
61 is_synth = (ddesc->run_synth != NULL) ? 1 : 0;
62 for (i = 0; i < desc->port_descs_count - is_synth; i++)
63 {
64 /* This check is due to Josh Green's broken vocoder plugin */
65 if (ldesc->PortNames[i] == NULL)
66 desc->port_descs[i].name = "(null)";
67 else
68 desc->port_descs[i].name = (char *)ldesc->PortNames[i];
70 desc->port_descs[i].data = NULL;
71 desc->port_descs[i].scale.unit = nacore_scale_unit_none;
72 desc->port_descs[i].scale.points = NULL;
73 desc->port_descs[i].scale.points_count = 0;
75 desc->port_descs[i].properties = 0;
76 if (LADSPA_IS_PORT_OUTPUT(ldesc->PortDescriptors[i]))
77 desc->port_descs[i].properties |= NACORE_PORT_IS_OUTPUT;
78 if (LADSPA_IS_PORT_AUDIO(ldesc->PortDescriptors[i]))
79 desc->port_descs[i].properties |= NACORE_PORT_IS_AUDIO;
81 if (desc->port_descs[i].properties & NACORE_PORT_IS_AUDIO)
82 continue;
84 if (!strcmp(ldesc->PortNames[i], "latency")
85 || !strcmp(ldesc->PortNames[i], "_latency"))
86 desc->port_descs[i].properties |=
87 NACORE_PORT_REPORTS_LATENCY;
88 if (LADSPA_IS_HINT_TOGGLED(
89 ldesc->PortRangeHints[i].HintDescriptor))
90 desc->port_descs[i].properties |= NACORE_PORT_TOGGLED;
91 if (LADSPA_IS_HINT_SAMPLE_RATE(
92 ldesc->PortRangeHints[i].HintDescriptor))
93 desc->port_descs[i].properties |=
94 NACORE_PORT_SAMPLE_RATE;
95 if (LADSPA_IS_HINT_INTEGER(
96 ldesc->PortRangeHints[i].HintDescriptor))
97 desc->port_descs[i].properties |= NACORE_PORT_INTEGER;
98 if (LADSPA_IS_HINT_LOGARITHMIC(
99 ldesc->PortRangeHints[i].HintDescriptor))
100 desc->port_descs[i].properties |=
101 NACORE_PORT_LOGARITHMIC;
103 desc->port_descs[i].scale.properties = 0;
104 if (LADSPA_IS_HINT_BOUNDED_BELOW(
105 ldesc->PortRangeHints[i].HintDescriptor))
106 {
107 desc->port_descs[i].scale.properties |=
108 NACORE_SCALE_HAS_MIN;
109 desc->port_descs[i].scale.min =
110 ldesc->PortRangeHints[i].LowerBound;
111 }
112 if (LADSPA_IS_HINT_BOUNDED_ABOVE(
113 ldesc->PortRangeHints[i].HintDescriptor))
114 {
115 desc->port_descs[i].scale.properties |=
116 NACORE_SCALE_HAS_MAX;
117 desc->port_descs[i].scale.max =
118 ldesc->PortRangeHints[i].UpperBound;
119 }
120 if (LADSPA_IS_HINT_HAS_DEFAULT(
121 ldesc->PortRangeHints[i].HintDescriptor))
122 {
123 desc->port_descs[i].scale.properties |=
124 NACORE_SCALE_HAS_DEFAULT;
125 if (LADSPA_IS_HINT_DEFAULT_MINIMUM(
126 ldesc->PortRangeHints[i].HintDescriptor))
127 desc->port_descs[i].scale.defaultv =
128 desc->port_descs[i].scale.min;
129 else if (LADSPA_IS_HINT_DEFAULT_LOW(
130 ldesc->PortRangeHints[i].HintDescriptor))
131 desc->port_descs[i].scale.defaultv =
132 (desc->port_descs[i].properties & NACORE_PORT_LOGARITHMIC)
133 ? exp(log(desc->port_descs[i].scale.min) * 0.75 + log(desc->port_descs[i].scale.max) * 0.25)
134 : desc->port_descs[i].scale.min * 0.75 + desc->port_descs[i].scale.max * 0.25;
135 else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(
136 ldesc->PortRangeHints[i].HintDescriptor))
137 desc->port_descs[i].scale.defaultv =
138 (desc->port_descs[i].properties & NACORE_PORT_LOGARITHMIC)
139 ? exp(log(desc->port_descs[i].scale.min) * 0.5 + log(desc->port_descs[i].scale.max) * 0.5)
140 : desc->port_descs[i].scale.min * 0.5 + desc->port_descs[i].scale.max * 0.5;
141 else if (LADSPA_IS_HINT_DEFAULT_HIGH(
142 ldesc->PortRangeHints[i].HintDescriptor))
143 desc->port_descs[i].scale.defaultv =
144 (desc->port_descs[i].properties & NACORE_PORT_LOGARITHMIC)
145 ? exp(log(desc->port_descs[i].scale.min) * 0.25 + log(desc->port_descs[i].scale.max) * 0.75)
146 : desc->port_descs[i].scale.min * 0.25 + desc->port_descs[i].scale.max * 0.75;
147 else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(
148 ldesc->PortRangeHints[i].HintDescriptor))
149 desc->port_descs[i].scale.defaultv =
150 desc->port_descs[i].scale.max;
151 else if (LADSPA_IS_HINT_DEFAULT_0(
152 ldesc->PortRangeHints[i].HintDescriptor))
153 desc->port_descs[i].scale.defaultv = 0.0;
154 else if (LADSPA_IS_HINT_DEFAULT_1(
155 ldesc->PortRangeHints[i].HintDescriptor))
156 desc->port_descs[i].scale.defaultv = 1.0;
157 else if (LADSPA_IS_HINT_DEFAULT_100(
158 ldesc->PortRangeHints[i].HintDescriptor))
159 desc->port_descs[i].scale.defaultv = 100.0;
160 else /* LADSPA_IS_HINT_DEFAULT_440 */
161 desc->port_descs[i].scale.defaultv = 440.0;
162 }
163 }
165 if (ddesc->run_synth != NULL)
166 {
167 desc->port_descs[i].name = "MIDI in";
169 desc->port_descs[i].data = NULL;
170 desc->port_descs[i].scale.unit = nacore_scale_unit_none;
171 desc->port_descs[i].scale.points = NULL;
172 desc->port_descs[i].scale.points_count = 0;
174 desc->port_descs[i].properties = NACORE_PORT_IS_MIDI;
175 }
176 }
