naspro
view src/ladspa/descriptor.c @ 161:cf56ca881571
Fixed some bugs
| author | Stefano D'Angelo <zanga.mail@gmail.com> |
|---|---|
| date | Sun Jul 19 03:50:39 2009 +0200 (2009-07-19) |
| parents | cc067fdfbaf4 |
| children |
line source
1 /*
2 * NASPRO - NASPRO Architecture for Sound Processing
3 * LADSPA 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 <ladspa.h>
17 #include <NASPRO/core/lib.h>
19 #include "src/ladspa/descriptor.h"
20 #include "src/ladspa/lrdf.h"
21 #include "src/ladspa/lv2api.h"
23 void
24 _naladspa_descriptor_fill(struct nacore_descriptor *desc,
25 const LADSPA_Descriptor *ldesc)
26 {
27 size_t i;
29 desc->data = (void *)ldesc;
31 desc->name = (char *)ldesc->Name;
32 desc->creator = (*ldesc->Maker != '\0') ? NULL : (char *)ldesc->Maker;
33 desc->rights = strcmp(ldesc->Copyright, "None")
34 ? (char *)ldesc->Copyright : NULL;
36 desc->instantiate = _naladspa_lv2api_instantiate;
37 desc->connect_port = _naladspa_lv2api_connect_port;
38 desc->activate = ldesc->activate != NULL ? _naladspa_lv2api_activate
39 : NULL;
40 desc->run = _naladspa_lv2api_run;
41 desc->deactivate = ldesc->deactivate != NULL
42 ? _naladspa_lv2api_deactivate : NULL;
43 desc->cleanup = _naladspa_lv2api_cleanup;
44 desc->extension_data = NULL;
46 desc->properties = 0;
47 if (LADSPA_IS_REALTIME(ldesc->Properties))
48 desc->properties |= NACORE_DESCRIPTOR_HAS_LIVE_DEP;
49 if (LADSPA_IS_INPLACE_BROKEN(ldesc->Properties))
50 desc->properties |= NACORE_DESCRIPTOR_INPLACE_BROKEN;
51 if (LADSPA_IS_HARD_RT_CAPABLE(ldesc->Properties))
52 desc->properties |= NACORE_DESCRIPTOR_HARD_RT_CAPABLE;
54 desc->classes_1 = 0;
55 desc->classes_2 = 0;
56 _naladspa_lrdf_get_classes(desc);
58 for (i = 0; i < desc->port_descs_count; i++)
59 {
60 /* This check is due to Josh Green's broken vocoder plugin */
61 if (ldesc->PortNames[i] == NULL)
62 desc->port_descs[i].name = "(null)";
63 else
64 desc->port_descs[i].name = (char *)ldesc->PortNames[i];
66 desc->port_descs[i].data = NULL;
67 desc->port_descs[i].scale.unit = nacore_scale_unit_none;
68 desc->port_descs[i].scale.points = NULL;
69 desc->port_descs[i].scale.points_count = 0;
71 desc->port_descs[i].properties = 0;
72 if (LADSPA_IS_PORT_OUTPUT(ldesc->PortDescriptors[i]))
73 desc->port_descs[i].properties |= NACORE_PORT_IS_OUTPUT;
74 if (LADSPA_IS_PORT_AUDIO(ldesc->PortDescriptors[i]))
75 desc->port_descs[i].properties |= NACORE_PORT_IS_AUDIO;
77 if (desc->port_descs[i].properties & NACORE_PORT_IS_AUDIO)
78 continue;
80 if (!strcmp(ldesc->PortNames[i], "latency")
81 || !strcmp(ldesc->PortNames[i], "_latency"))
82 desc->port_descs[i].properties |=
83 NACORE_PORT_REPORTS_LATENCY;
84 if (LADSPA_IS_HINT_TOGGLED(
85 ldesc->PortRangeHints[i].HintDescriptor))
86 desc->port_descs[i].properties |= NACORE_PORT_TOGGLED;
87 if (LADSPA_IS_HINT_SAMPLE_RATE(
88 ldesc->PortRangeHints[i].HintDescriptor))
89 desc->port_descs[i].properties |=
90 NACORE_PORT_SAMPLE_RATE;
91 if (LADSPA_IS_HINT_INTEGER(
92 ldesc->PortRangeHints[i].HintDescriptor))
93 desc->port_descs[i].properties |= NACORE_PORT_INTEGER;
94 if (LADSPA_IS_HINT_LOGARITHMIC(
95 ldesc->PortRangeHints[i].HintDescriptor))
96 desc->port_descs[i].properties |=
97 NACORE_PORT_LOGARITHMIC;
99 desc->port_descs[i].scale.properties = 0;
100 if (LADSPA_IS_HINT_BOUNDED_BELOW(
101 ldesc->PortRangeHints[i].HintDescriptor))
102 {
103 desc->port_descs[i].scale.properties |=
104 NACORE_SCALE_HAS_MIN;
105 desc->port_descs[i].scale.min =
106 ldesc->PortRangeHints[i].LowerBound;
107 }
108 if (LADSPA_IS_HINT_BOUNDED_ABOVE(
109 ldesc->PortRangeHints[i].HintDescriptor))
110 {
111 desc->port_descs[i].scale.properties |=
112 NACORE_SCALE_HAS_MAX;
113 desc->port_descs[i].scale.max =
114 ldesc->PortRangeHints[i].UpperBound;
115 }
116 if (LADSPA_IS_HINT_HAS_DEFAULT(
117 ldesc->PortRangeHints[i].HintDescriptor))
118 {
119 desc->port_descs[i].scale.properties |=
120 NACORE_SCALE_HAS_DEFAULT;
121 if (LADSPA_IS_HINT_DEFAULT_MINIMUM(
122 ldesc->PortRangeHints[i].HintDescriptor))
123 desc->port_descs[i].scale.defaultv =
124 desc->port_descs[i].scale.min;
125 else if (LADSPA_IS_HINT_DEFAULT_LOW(
126 ldesc->PortRangeHints[i].HintDescriptor))
127 desc->port_descs[i].scale.defaultv =
128 (desc->port_descs[i].properties & NACORE_PORT_LOGARITHMIC)
129 ? exp(log(desc->port_descs[i].scale.min) * 0.75 + log(desc->port_descs[i].scale.max) * 0.25)
130 : desc->port_descs[i].scale.min * 0.75 + desc->port_descs[i].scale.max * 0.25;
131 else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(
132 ldesc->PortRangeHints[i].HintDescriptor))
133 desc->port_descs[i].scale.defaultv =
134 (desc->port_descs[i].properties & NACORE_PORT_LOGARITHMIC)
135 ? exp(log(desc->port_descs[i].scale.min) * 0.5 + log(desc->port_descs[i].scale.max) * 0.5)
136 : desc->port_descs[i].scale.min * 0.5 + desc->port_descs[i].scale.max * 0.5;
137 else if (LADSPA_IS_HINT_DEFAULT_HIGH(
138 ldesc->PortRangeHints[i].HintDescriptor))
139 desc->port_descs[i].scale.defaultv =
140 (desc->port_descs[i].properties & NACORE_PORT_LOGARITHMIC)
141 ? exp(log(desc->port_descs[i].scale.min) * 0.25 + log(desc->port_descs[i].scale.max) * 0.75)
142 : desc->port_descs[i].scale.min * 0.25 + desc->port_descs[i].scale.max * 0.75;
143 else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(
144 ldesc->PortRangeHints[i].HintDescriptor))
145 desc->port_descs[i].scale.defaultv =
146 desc->port_descs[i].scale.max;
147 else if (LADSPA_IS_HINT_DEFAULT_0(
148 ldesc->PortRangeHints[i].HintDescriptor))
149 desc->port_descs[i].scale.defaultv = 0.0;
150 else if (LADSPA_IS_HINT_DEFAULT_1(
151 ldesc->PortRangeHints[i].HintDescriptor))
152 desc->port_descs[i].scale.defaultv = 1.0;
153 else if (LADSPA_IS_HINT_DEFAULT_100(
154 ldesc->PortRangeHints[i].HintDescriptor))
155 desc->port_descs[i].scale.defaultv = 100.0;
156 else /* LADSPA_IS_HINT_DEFAULT_440 */
157 desc->port_descs[i].scale.defaultv = 440.0;
158 }
160 _naladspa_lrdf_get_scale_units(desc, desc->port_descs + i, i);
161 _naladspa_lrdf_get_scale_points(desc, desc->port_descs + i, i);
162 }
164 _naladspa_lrdf_get_scale_defaults(desc, desc->port_descs);
165 }
167 void
168 _naladspa_descriptor_free_data(struct nacore_descriptor *desc)
169 {
170 size_t i;
172 for (i = 0; i < desc->port_descs_count; i++)
173 _naladspa_lrdf_free_data(desc->port_descs + i);
174 }
