Mercurial > mplayer.hg
annotate libaf/af_ladspa.c @ 25063:29260745e4fa
Pass all available formats to chain building routine and
establish connection with first of available formats.
This will make further format negotiation patch slightly
simpler.
To avoid pins connection error due to unsuported format
at top of the list, put requested video format to the
top of list. This will also useful with upcoming patch -
negotiation will be started from requested format.
author | voroshil |
---|---|
date | Sun, 18 Nov 2007 10:51:22 +0000 |
parents | b2402b4f0afa |
children | d6ba514769b9 |
rev | line source |
---|---|
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
1 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
2 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
3 /* |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
4 * af_ladspa.c, LADSPA plugin loader |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
5 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
6 * Written by Ivo van Poorten <ivop@euronet.nl> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
7 * Copyright (C) 2004, 2005 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
8 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
9 * This program is free software; you can redistribute it and/or |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
10 * modify it under the terms of the GNU General Public License |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
11 * as published by the Free Software Foundation; either version 2 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
12 * of the License, or (at your option) any later version. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
13 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
14 * This program is distributed in the hope that it will be useful, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
17 * GNU General Public License for more details. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
18 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
19 * You should have received a copy of the GNU General Public License |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
20 * along with this program; if not, write to the Free Software |
19614 | 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
22 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
23 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
24 * Changelog |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
25 * |
15790
3d77e868023d
10l for me. two usages of mp_msg instead of af_msg slipped through
ivo
parents:
14848
diff
changeset
|
26 * 2005-06-21 Replaced erroneous use of mp_msg by af_msg |
16195
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
27 * 2005-05-30 Removed int16 to float conversion; leave that to af_format |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
28 * 2004-12-23 Added to CVS |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
29 * 2004-12-22 Cleaned up cosmetics |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
30 * Made conversion loops in play() more cache-friendly |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
31 * 2004-12-20 Fixed bug for stereo effect on mono signal |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
32 * (trivial >1 to >=1 change; would segfault otherwise :-) ) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
33 * Removed trailing whitespace and fixed warn/err messages |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
34 * Have CONTROL_REINIT return a proper value |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
35 * 2004-12-13 More Doxygen comments |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
36 * 2004-12-12 Made af_ladspa optional (updated configure, af.c, etc.) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
37 * 2004-12-11 Added deactivate and cleanup to uninit. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
38 * Finished Doxygen comments. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
39 * Moved translatable messages to help_mp-en.h |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
40 * 2004-12-10 Added ranges to list of controls for ease of use. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
41 * Fixed sig11 bug. Implemented (dummy) outputcontrols. Some |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
42 * perfectly normal audio processing filters also have output |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
43 * controls. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
44 * 2004-12-08 Added support for generators (no input, one output) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
45 * Added support for stereo effects |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
46 * Added LADSPA_PATH support! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
47 * 2004-12-07 Fixed changing buffersize. Now it's really working, also in |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
48 * real-time. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
49 * 2004-12-06 First working version, mono-effects (1 input --> 1 output) only |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
50 * 2004-12-05 Started, Loading of plugin/label, Check inputs/outputs/controls |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
51 * Due to lack of documentation, I studied the ladspa_sdk source |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
52 * code and the loader code of Audacity (by Dominic Mazzoni). So, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
53 * certain similarities in (small) pieces of code are not |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
54 * coincidental :-) No C&P jobs though! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
55 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
56 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
57 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
58 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
59 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
60 /* Global Includes */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
61 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
62 #include <stdio.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
63 #include <stdlib.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
64 #include <string.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
65 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
66 #include <inttypes.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
67 #include <math.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
68 #include <limits.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
69 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
70 #include <dlfcn.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
71 #include <ladspa.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
72 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
73 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
74 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
75 /* Local Includes */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
76 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
77 #include "af.h" |
16982 | 78 #include "help_mp.h" |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
79 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
80 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
81 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
82 /* Filter specific data */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
83 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
84 typedef struct af_ladspa_s |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
85 { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
86 int status; /**< Status of the filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
87 * Either AF_OK or AF_ERROR |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
88 * Because MPlayer re-inits audio filters that |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
89 * _clearly_ returned AF_ERROR anyway, I use this |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
90 * in play() to skip the processing and return |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
91 * the data unchanged. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
92 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
93 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
94 int activated; /**< 0 or 1. Activate LADSPA filters only once, even |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
95 * if the buffers get resized, to avoid a stuttering |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
96 * filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
97 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
98 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
99 char *file; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
100 char *label; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
101 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
102 char *myname; /**< It's easy to have a concatenation of file and label */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
103 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
104 void *libhandle; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
105 const LADSPA_Descriptor *plugin_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
106 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
107 int nports; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
108 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
109 int ninputs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
110 int *inputs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
111 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
112 int noutputs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
113 int *outputs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
114 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
115 int ninputcontrols; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
116 int *inputcontrolsmap; /**< Map input port number [0-] to actual port */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
117 float *inputcontrols; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
118 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
119 int noutputcontrols; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
120 int *outputcontrolsmap; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
121 float *outputcontrols; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
122 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
123 int nch; /**< number of channels */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
124 int bufsize; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
125 float **inbufs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
126 float **outbufs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
127 LADSPA_Handle *chhandles; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
128 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
129 } af_ladspa_t; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
130 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
131 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
132 |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
22156
diff
changeset
|
133 static int af_open(af_instance_t *af); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
134 static int af_ladspa_malloc_failed(char*); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
135 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
136 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
137 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
138 /* Description */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
139 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
140 af_info_t af_info_ladspa = { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
141 "LADSPA plugin loader", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
142 "ladspa", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
143 "Ivo van Poorten", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
144 "", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
145 AF_FLAGS_REENTRANT, |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
22156
diff
changeset
|
146 af_open |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
147 }; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
148 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
149 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
150 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
151 /* By lack of a better word (in my vocabulary) this is called 'parse'. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
152 * Feel free to suggest an alternative. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
153 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
154 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
155 /** \brief Check for inputs, outputs and controls of a given filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
156 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
157 * This function counts and checks all input, output and control ports |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
158 * of the filter that was loaded. If it turns out to be a valid |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
159 * filter for MPlayer use, it prints out a list of all controls and |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
160 * the corresponding range of its value at message level MSGL_V. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
161 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
162 * \param setup Current setup of the filter. Must have its |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
163 * plugin_descriptor set! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
164 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
165 * \return Returns AF_OK if it has a valid input/output/controls |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
166 * configuration. Else, it returns AF_ERROR. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
167 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
168 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
169 static int af_ladspa_parse_plugin(af_ladspa_t *setup) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
170 int p, i; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
171 const LADSPA_Descriptor *pdes = setup->plugin_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
172 LADSPA_PortDescriptor d; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
173 LADSPA_PortRangeHint hint; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
174 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
175 if (!setup->libhandle) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
176 return AF_ERROR; /* only call parse after a succesful load */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
177 if (!setup->plugin_descriptor) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
178 return AF_ERROR; /* same as above */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
179 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
180 /* let's do it */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
181 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
182 setup->nports = pdes->PortCount; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
183 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
184 /* allocate memory for all inputs/outputs/controls */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
185 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
186 setup->inputs = calloc(setup->nports, sizeof(int)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
187 if (!setup->inputs) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
188 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
189 setup->outputs = calloc(setup->nports, sizeof(int)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
190 if (!setup->outputs) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
191 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
192 setup->inputcontrolsmap = calloc(setup->nports, sizeof(int)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
193 if (!setup->inputcontrolsmap) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
194 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
195 setup->inputcontrols = calloc(setup->nports, sizeof(float)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
196 if (!setup->inputcontrols) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
197 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
198 setup->outputcontrolsmap = calloc(setup->nports, sizeof(int)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
199 if (!setup->outputcontrolsmap) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
200 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
201 setup->outputcontrols = calloc(setup->nports, sizeof(float)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
202 if (!setup->outputcontrols) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
203 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
204 /* set counts to zero */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
205 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
206 setup->ninputs = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
207 setup->noutputs = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
208 setup->ninputcontrols = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
209 setup->noutputcontrols = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
210 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
211 /* check all ports, see what type it is and set variables according to |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
212 * what we have found |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
213 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
214 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
215 for (p=0; p<setup->nports; p++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
216 d = pdes->PortDescriptors[p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
217 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
218 if (LADSPA_IS_PORT_AUDIO(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
219 if (LADSPA_IS_PORT_INPUT(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
220 setup->inputs[setup->ninputs] = p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
221 setup->ninputs++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
222 } else if (LADSPA_IS_PORT_OUTPUT(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
223 setup->outputs[setup->noutputs] = p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
224 setup->noutputs++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
225 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
226 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
227 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
228 if (LADSPA_IS_PORT_CONTROL(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
229 if (LADSPA_IS_PORT_INPUT(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
230 setup->inputcontrolsmap[setup->ninputcontrols] = p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
231 setup->ninputcontrols++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
232 /* set control to zero. set values after reading the rest |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
233 * of the suboptions and check LADSPA_?_HINT's later. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
234 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
235 setup->inputcontrols[p] = 0.0f; |
14848 | 236 } else if (LADSPA_IS_PORT_OUTPUT(d)) { |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
237 /* read and handle these too, otherwise filters that have them |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
238 * will sig11 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
239 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
240 setup->outputcontrolsmap[setup->noutputcontrols]=p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
241 setup->noutputcontrols++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
242 setup->outputcontrols[p] = 0.0f; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
243 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
244 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
245 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
246 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
247 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
248 if (setup->ninputs == 0) { |
14390 | 249 af_msg(AF_MSG_WARN, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
250 MSGTR_AF_LADSPA_WarnNoInputs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
251 } else if (setup->ninputs == 1) { |
14390 | 252 af_msg(AF_MSG_VERBOSE, "%s: this is a mono effect\n", setup->myname); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
253 } else if (setup->ninputs == 2) { |
14390 | 254 af_msg(AF_MSG_VERBOSE, "%s: this is a stereo effect\n", setup->myname); |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
255 } else { |
22156 | 256 af_msg(AF_MSG_VERBOSE, "%s: this is a %i-channel effect, " |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
257 "support is experimental\n", setup->myname, setup->ninputs); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
258 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
259 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
260 if (setup->noutputs == 0) { |
14390 | 261 af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
262 MSGTR_AF_LADSPA_ErrNoOutputs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
263 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
264 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
265 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
266 if (setup->noutputs != setup->ninputs ) { |
14390 | 267 af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
268 MSGTR_AF_LADSPA_ErrInOutDiff); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
269 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
270 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
271 |
14390 | 272 af_msg(AF_MSG_VERBOSE, "%s: this plugin has %d input control(s)\n", |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
273 setup->myname, setup->ninputcontrols); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
274 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
275 /* Print list of controls and its range of values it accepts */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
276 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
277 for (i=0; i<setup->ninputcontrols; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
278 p = setup->inputcontrolsmap[i]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
279 hint = pdes->PortRangeHints[p]; |
14390 | 280 af_msg(AF_MSG_VERBOSE, " --- %d %s [", i, pdes->PortNames[p]); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
281 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
282 if (LADSPA_IS_HINT_BOUNDED_BELOW(hint.HintDescriptor)) { |
14390 | 283 af_msg(AF_MSG_VERBOSE, "%0.2f , ", hint.LowerBound); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
284 } else { |
14390 | 285 af_msg(AF_MSG_VERBOSE, "... , "); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
286 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
287 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
288 if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint.HintDescriptor)) { |
14390 | 289 af_msg(AF_MSG_VERBOSE, "%0.2f]\n", hint.UpperBound); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
290 } else { |
14390 | 291 af_msg(AF_MSG_VERBOSE, "...]\n"); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
292 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
293 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
294 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
295 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
296 return AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
297 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
298 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
299 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
300 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
301 /* This function might "slightly" look like dlopenLADSPA in the LADSPA SDK :-) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
302 * But, I changed a few things, because imho it was broken. It did not support |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
303 * relative paths, only absolute paths that start with a / |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
304 * I think ../../some/dir/foobar.so is just as valid. And if one wants to call |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
305 * his library '...somename...so' he's crazy, but it should be allowed. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
306 * So, search the path first, try plain *filename later. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
307 * Also, try adding .so first! I like the recursion the SDK did, but it's |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
308 * better the other way around. -af ladspa=cmt:amp_stereo:0.5 is easier to type |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
309 * than -af ladspa=cmt.so:amp_stereo:0.5 :-)) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
310 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
311 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
312 /** \brief dlopen() wrapper |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
313 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
314 * This is a wrapper around dlopen(). It tries various variations of the |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
315 * filename (with or without the addition of the .so extension) in various |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
316 * directories specified by the LADSPA_PATH environment variable. If all fails |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
317 * it tries the filename directly as an absolute path to the library. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
318 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
319 * \param filename filename of the library to load. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
320 * \param flag see dlopen(3) for a description of the flags. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
321 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
322 * \return returns a pointer to the loaded library on success, or |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
323 * NULL if it fails to load. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
324 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
325 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
326 static void* mydlopen(const char *filename, int flag) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
327 char *buf; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
328 const char *end, *start, *ladspapath; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
329 int endsinso, needslash; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
330 size_t filenamelen; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
331 void *result = NULL; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
332 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
333 # ifdef WIN32 /* for windows there's only absolute path support. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
334 * if you have a windows machine, feel free to fix |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
335 * this. (path separator, shared objects extension, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
336 * et cetera). |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
337 */ |
14390 | 338 af_msg(AF_MSG_VERBOSE, "\ton windows, only absolute pathnames " |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
339 "are supported\n"); |
14390 | 340 af_msg(AF_MSG_VERBOSE, "\ttrying %s\n", filename); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
341 return dlopen(filename, flag); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
342 # endif |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
343 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
344 filenamelen = strlen(filename); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
345 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
346 endsinso = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
347 if (filenamelen > 3) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
348 endsinso = (strcmp(filename+filenamelen-3, ".so") == 0); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
349 if (!endsinso) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
350 buf=malloc(filenamelen+4); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
351 strcpy(buf, filename); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
352 strcat(buf, ".so"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
353 result=mydlopen(buf, flag); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
354 free(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
355 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
356 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
357 if (result) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
358 return result; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
359 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
360 ladspapath=getenv("LADSPA_PATH"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
361 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
362 if (ladspapath) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
363 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
364 start=ladspapath; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
365 while (*start != '\0') { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
366 end=start; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
367 while ( (*end != ':') && (*end != '\0') ) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
368 end++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
369 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
370 buf=malloc(filenamelen + 2 + (end-start) ); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
371 if (end > start) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
372 strncpy(buf, start, end-start); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
373 needslash=0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
374 if (end > start) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
375 if (*(end-1) != '/') { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
376 needslash = 1; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
377 buf[end-start] = '/'; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
378 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
379 strcpy(buf+needslash+(end-start), filename); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
380 |
14390 | 381 af_msg(AF_MSG_VERBOSE, "\ttrying %s\n", buf); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
382 result=dlopen(buf, flag); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
383 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
384 free(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
385 if (result) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
386 return result; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
387 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
388 start = end; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
389 if (*start == ':') |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
390 start++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
391 } /* end while there's still more in the path */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
392 } /* end if there's a ladspapath */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
393 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
394 /* last resort, just open it again, so the dlerror() message is correct */ |
14390 | 395 af_msg(AF_MSG_VERBOSE, "\ttrying %s\n", filename); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
396 return dlopen(filename,flag); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
397 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
398 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
399 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
400 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
401 /** \brief Load a LADSPA Plugin |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
402 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
403 * This function loads the LADSPA plugin specified by the file and label |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
404 * that are present in the setup variable. First, it loads the library. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
405 * If it fails, it returns AF_ERROR. If not, it continues to look for the |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
406 * specified label. If it finds it, it sets the plugin_descriptor inside |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
407 * setup and returns AF_OK. If it doesn't, it returns AF_ERROR. Special case |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
408 * is a label called 'help'. In that case, it prints a list of all available |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
409 * labels (filters) in the library specified by file. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
410 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
411 * \param setup Current setup of the filter. Contains filename and label. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
412 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
413 * \return Either AF_ERROR or AF_OK, depending on the success of the operation. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
414 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
415 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
416 static int af_ladspa_load_plugin(af_ladspa_t *setup) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
417 const LADSPA_Descriptor *ladspa_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
418 LADSPA_Descriptor_Function descriptor_function; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
419 int i; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
420 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
421 /* load library */ |
14390 | 422 af_msg(AF_MSG_VERBOSE, "%s: loading ladspa plugin library %s\n", |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
423 setup->myname, setup->file); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
424 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
425 setup->libhandle = mydlopen(setup->file, RTLD_NOW); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
426 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
427 if (!setup->libhandle) { |
14390 | 428 af_msg(AF_MSG_ERROR, "%s: %s %s\n\t%s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
429 MSGTR_AF_LADSPA_ErrFailedToLoad, setup->file, dlerror() ); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
430 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
431 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
432 |
14390 | 433 af_msg(AF_MSG_VERBOSE, "%s: library found.\n", setup->myname); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
434 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
435 /* find descriptor function */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
436 dlerror(); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
437 descriptor_function = (LADSPA_Descriptor_Function) dlsym (setup->libhandle, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
438 "ladspa_descriptor"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
439 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
440 if (!descriptor_function) { |
14390 | 441 af_msg(AF_MSG_ERROR, "%s: %s\n\t%s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
442 MSGTR_AF_LADSPA_ErrNoDescriptor, dlerror()); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
443 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
444 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
445 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
446 /* if label == help, list all labels in library and exit */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
447 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
448 if (strcmp(setup->label, "help") == 0) { |
14390 | 449 af_msg(AF_MSG_INFO, "%s: %s %s:\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
450 MSGTR_AF_LADSPA_AvailableLabels, setup->file); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
451 for (i=0; ; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
452 ladspa_descriptor = descriptor_function(i); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
453 if (ladspa_descriptor == NULL) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
454 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
455 } |
14390 | 456 af_msg(AF_MSG_INFO, " %-16s - %s (%lu)\n", |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
457 ladspa_descriptor->Label, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
458 ladspa_descriptor->Name, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
459 ladspa_descriptor->UniqueID); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
460 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
461 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
462 |
14390 | 463 af_msg(AF_MSG_VERBOSE, "%s: looking for label\n", setup->myname); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
464 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
465 /* find label in library */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
466 for (i=0; ; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
467 ladspa_descriptor = descriptor_function(i); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
468 if (ladspa_descriptor == NULL) { |
14390 | 469 af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
470 MSGTR_AF_LADSPA_ErrLabelNotFound); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
471 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
472 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
473 if (strcmp(ladspa_descriptor->Label, setup->label) == 0) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
474 setup->plugin_descriptor = ladspa_descriptor; |
14390 | 475 af_msg(AF_MSG_VERBOSE, "%s: %s found\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
476 setup->label); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
477 return AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
478 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
479 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
480 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
481 return AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
482 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
483 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
484 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
485 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
486 /** \brief Print a malloc() failed error message. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
487 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
488 * Generic function which can be called if a call to malloc(), calloc(), |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
489 * strdup(), et cetera, failed. It prints a message to the console and |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
490 * returns AF_ERROR. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
491 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
492 * \return AF_ERROR |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
493 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
494 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
495 static int af_ladspa_malloc_failed(char *myname) { |
16904
a95819f390f4
MSGTR_MemAllocFailed printout changed to fit its definition in help/help_mp-en.h
ptt
parents:
16195
diff
changeset
|
496 af_msg(AF_MSG_ERROR, "%s: %s", myname, MSGTR_MemAllocFailed); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
497 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
498 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
499 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
500 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
501 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
502 /** \brief Controls the filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
503 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
504 * Control the behaviour of the filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
505 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
506 * Commands: |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
507 * CONTROL_REINIT Sets the af structure with proper values for number |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
508 * of channels, rate, format, et cetera. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
509 * CONTROL_COMMAND_LINE Parses the suboptions given to this filter |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
510 * through arg. It first parses the filename and |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
511 * the label. After that, it loads the filter |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
512 * and finds out its proprties. Then in continues |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
513 * parsing the controls given on the commandline, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
514 * if any are needed. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
515 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
516 * \param af Audio filter instance |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
517 * \param cmd The command to execute |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
518 * \param arg Arguments to the command |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
519 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
520 * \return Either AF_ERROR or AF_OK, depending on the succes of the |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
521 * operation. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
522 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
523 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
524 static int control(struct af_instance_s *af, int cmd, void *arg) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
525 af_ladspa_t *setup = (af_ladspa_t*) af->setup; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
526 int i, r; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
527 float val; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
528 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
529 switch(cmd) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
530 case AF_CONTROL_REINIT: |
15790
3d77e868023d
10l for me. two usages of mp_msg instead of af_msg slipped through
ivo
parents:
14848
diff
changeset
|
531 af_msg(AF_MSG_VERBOSE, "%s: (re)init\n", setup->myname); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
532 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
533 if (!arg) return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
534 |
16195
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
535 /* accept FLOAT, let af_format do conversion */ |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
536 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
537 af->data->rate = ((af_data_t*)arg)->rate; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
538 af->data->nch = ((af_data_t*)arg)->nch; |
16195
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
539 af->data->format = AF_FORMAT_FLOAT_NE; |
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
540 af->data->bps = 4; |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
541 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
542 /* arg->len is not set here yet, so init of buffers and connecting the |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
543 * filter, has to be done in play() :-/ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
544 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
545 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
546 return af_test_output(af, (af_data_t*)arg); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
547 case AF_CONTROL_COMMAND_LINE: { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
548 char *buf; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
549 |
15790
3d77e868023d
10l for me. two usages of mp_msg instead of af_msg slipped through
ivo
parents:
14848
diff
changeset
|
550 af_msg(AF_MSG_VERBOSE, "%s: parse suboptions\n", setup->myname); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
551 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
552 /* suboption parser here! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
553 * format is (ladspa=)file:label:controls.... |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
554 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
555 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
556 if (!arg) { |
14390 | 557 af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
558 MSGTR_AF_LADSPA_ErrNoSuboptions); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
559 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
560 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
561 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
562 buf = malloc(strlen(arg)+1); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
563 if (!buf) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
564 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
565 /* file... */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
566 buf[0] = '\0'; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
567 sscanf(arg, "%[^:]", buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
568 if (buf[0] == '\0') { |
14390 | 569 af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
570 MSGTR_AF_LADSPA_ErrNoLibFile); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
571 free(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
572 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
573 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
574 arg += strlen(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
575 setup->file = strdup(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
576 if (!setup->file) return af_ladspa_malloc_failed(setup->myname); |
14390 | 577 af_msg(AF_MSG_VERBOSE, "%s: file --> %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
578 setup->file); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
579 if (*(char*)arg != '\0') arg++; /* read ':' */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
580 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
581 /* label... */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
582 buf[0] = '\0'; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
583 sscanf(arg, "%[^:]", buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
584 if (buf[0] == '\0') { |
14390 | 585 af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
586 MSGTR_AF_LADSPA_ErrNoLabel); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
587 free(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
588 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
589 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
590 arg += strlen(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
591 setup->label = strdup(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
592 if (!setup->label) return af_ladspa_malloc_failed(setup->myname); |
14390 | 593 af_msg(AF_MSG_VERBOSE, "%s: label --> %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
594 setup->label); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
595 /* if (*(char*)arg != '0') arg++; */ /* read ':' */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
596 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
597 free(buf); /* no longer needed */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
598 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
599 /* set new setup->myname */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
600 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
601 if(setup->myname) free(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
602 setup->myname = calloc(strlen(af_info_ladspa.name)+strlen(setup->file)+ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
603 strlen(setup->label)+6, 1); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
604 snprintf(setup->myname, strlen(af_info_ladspa.name)+ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
605 strlen(setup->file)+strlen(setup->label)+6, "%s: (%s:%s)", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
606 af_info_ladspa.name, setup->file, setup->label); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
607 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
608 /* load plugin :) */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
609 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
610 if ( af_ladspa_load_plugin(setup) != AF_OK ) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
611 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
612 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
613 /* see what inputs, outputs and controls this plugin has */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
614 if ( af_ladspa_parse_plugin(setup) != AF_OK ) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
615 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
616 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
617 /* ninputcontrols is set by now, read control values from arg */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
618 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
619 for(i=0; i<setup->ninputcontrols; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
620 if (!arg || (*(char*)arg != ':') ) { |
14390 | 621 af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
622 MSGTR_AF_LADSPA_ErrNotEnoughControls); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
623 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
624 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
625 arg++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
626 r = sscanf(arg, "%f", &val); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
627 if (r!=1) { |
14390 | 628 af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
629 MSGTR_AF_LADSPA_ErrNotEnoughControls); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
630 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
631 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
632 setup->inputcontrols[setup->inputcontrolsmap[i]] = val; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
633 arg = strchr(arg, ':'); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
634 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
635 |
14390 | 636 af_msg(AF_MSG_VERBOSE, "%s: input controls: ", setup->myname); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
637 for(i=0; i<setup->ninputcontrols; i++) { |
14390 | 638 af_msg(AF_MSG_VERBOSE, "%0.4f ", |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
639 setup->inputcontrols[setup->inputcontrolsmap[i]]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
640 } |
14390 | 641 af_msg(AF_MSG_VERBOSE, "\n"); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
642 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
643 /* check boundaries of inputcontrols */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
644 |
14390 | 645 af_msg(AF_MSG_VERBOSE, "%s: checking boundaries of input controls\n", |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
646 setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
647 for(i=0; i<setup->ninputcontrols; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
648 int p = setup->inputcontrolsmap[i]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
649 LADSPA_PortRangeHint hint = |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
650 setup->plugin_descriptor->PortRangeHints[p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
651 val = setup->inputcontrols[p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
652 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
653 if (LADSPA_IS_HINT_BOUNDED_BELOW(hint.HintDescriptor) && |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
654 val < hint.LowerBound) { |
14390 | 655 af_msg(AF_MSG_ERROR, MSGTR_AF_LADSPA_ErrControlBelow, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
656 setup->myname, i, hint.LowerBound); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
657 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
658 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
659 if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint.HintDescriptor) && |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
660 val > hint.UpperBound) { |
14390 | 661 af_msg(AF_MSG_ERROR, MSGTR_AF_LADSPA_ErrControlAbove, |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
662 setup->myname, i, hint.UpperBound); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
663 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
664 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
665 } |
14390 | 666 af_msg(AF_MSG_VERBOSE, "%s: all controls have sane values\n", |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
667 setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
668 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
669 /* All is well! */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
670 setup->status = AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
671 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
672 return AF_OK; } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
673 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
674 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
675 return AF_UNKNOWN; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
676 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
677 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
678 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
679 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
680 /** \brief Uninitialise the LADSPA Plugin Loader filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
681 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
682 * This function deactivates the plugin(s), cleans up, frees all allocated |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
683 * memory and exits. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
684 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
685 * \return No return value. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
686 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
687 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
688 static void uninit(struct af_instance_s *af) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
689 int i; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
690 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
691 if (af->data) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
692 free(af->data); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
693 if (af->setup) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
694 af_ladspa_t *setup = (af_ladspa_t*) af->setup; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
695 const LADSPA_Descriptor *pdes = setup->plugin_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
696 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
697 if (setup->myname) { |
14390 | 698 af_msg(AF_MSG_VERBOSE, "%s: cleaning up\n", setup->myname); |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
699 free(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
700 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
701 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
702 if (setup->chhandles) { |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
703 for(i=0; i<setup->nch; i+=setup->ninputs) { |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
704 if (pdes->deactivate) pdes->deactivate(setup->chhandles[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
705 if (pdes->cleanup) pdes->cleanup(setup->chhandles[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
706 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
707 free(setup->chhandles); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
708 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
709 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
710 if (setup->file) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
711 free(setup->file); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
712 if (setup->label) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
713 free(setup->label); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
714 if (setup->inputcontrolsmap) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
715 free(setup->inputcontrolsmap); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
716 if (setup->inputcontrols) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
717 free(setup->inputcontrols); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
718 if (setup->outputcontrolsmap) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
719 free(setup->outputcontrolsmap); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
720 if (setup->outputcontrols) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
721 free(setup->outputcontrols); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
722 if (setup->inputs) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
723 free(setup->inputs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
724 if (setup->outputs) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
725 free(setup->outputs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
726 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
727 if (setup->inbufs) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
728 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
729 if (setup->inbufs[i]) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
730 free(setup->inbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
731 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
732 free(setup->inbufs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
733 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
734 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
735 if (setup->outbufs) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
736 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
737 if (setup->outbufs[i]) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
738 free(setup->outbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
739 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
740 free(setup->outbufs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
741 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
742 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
743 if (setup->libhandle) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
744 dlclose(setup->libhandle); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
745 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
746 free(setup); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
747 setup = NULL; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
748 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
749 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
750 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
751 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
752 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
753 /** \brief Process chunk of audio data through the selected LADSPA Plugin. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
754 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
755 * \param af Pointer to audio filter instance |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
756 * \param data Pointer to chunk of audio data |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
757 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
758 * \return Either AF_ERROR or AF_OK |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
759 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
760 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
761 static af_data_t* play(struct af_instance_s *af, af_data_t *data) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
762 af_ladspa_t *setup = af->setup; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
763 const LADSPA_Descriptor *pdes = setup->plugin_descriptor; |
16195
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
764 float *audio = (float*)data->audio; |
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
765 int nsamples = data->len/4; /* /4 because it's 32-bit float */ |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
766 int nch = data->nch; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
767 int rate = data->rate; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
768 int i, p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
769 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
770 if (setup->status !=AF_OK) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
771 return data; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
772 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
773 /* See if it's the first call. If so, setup inbufs/outbufs, instantiate |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
774 * plugin, connect ports and activate plugin |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
775 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
776 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
777 /* 2004-12-07: Also check if the buffersize has to be changed! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
778 * data->len is not constant per se! re-init buffers. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
779 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
780 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
781 if ( (setup->bufsize != nsamples/nch) || (setup->nch != nch) ) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
782 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
783 /* if setup->nch==0, it's the first call, if not, something has |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
784 * changed and all previous mallocs have to be freed |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
785 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
786 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
787 if (setup->nch != 0) { |
14390 | 788 af_msg(AF_MSG_DEBUG1, "%s: bufsize change; free old buffer\n", |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
789 setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
790 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
791 if(setup->inbufs) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
792 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
793 if(setup->inbufs[i]) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
794 free(setup->inbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
795 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
796 free(setup->inbufs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
797 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
798 if(setup->outbufs) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
799 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
800 if(setup->outbufs[i]) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
801 free(setup->outbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
802 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
803 free(setup->outbufs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
804 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
805 } /* everything is freed */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
806 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
807 setup->bufsize = nsamples/nch; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
808 setup->nch = nch; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
809 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
810 setup->inbufs = calloc(nch, sizeof(float*)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
811 setup->outbufs = calloc(nch, sizeof(float*)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
812 |
14390 | 813 af_msg(AF_MSG_DEBUG1, "%s: bufsize = %d\n", |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
814 setup->myname, setup->bufsize); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
815 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
816 for(i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
817 setup->inbufs[i] = calloc(setup->bufsize, sizeof(float)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
818 setup->outbufs[i] = calloc(setup->bufsize, sizeof(float)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
819 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
820 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
821 /* only on the first call, there are no handles. */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
822 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
823 if (!setup->chhandles) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
824 setup->chhandles = calloc(nch, sizeof(LADSPA_Handle)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
825 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
826 /* create handles |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
827 * for stereo effects, create one handle for two channels |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
828 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
829 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
830 for(i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
831 |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
832 if (i % setup->ninputs) { /* stereo effect */ |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
833 /* copy the handle from previous channel */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
834 setup->chhandles[i] = setup->chhandles[i-1]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
835 continue; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
836 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
837 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
838 setup->chhandles[i] = pdes->instantiate(pdes, rate); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
839 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
840 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
841 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
842 /* connect input/output ports for each channel/filter instance |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
843 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
844 * always (re)connect ports |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
845 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
846 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
847 for(i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
848 pdes->connect_port(setup->chhandles[i], |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
849 setup->inputs[i % setup->ninputs], |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
850 setup->inbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
851 pdes->connect_port(setup->chhandles[i], |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
852 setup->outputs[i % setup->ninputs], |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
853 setup->outbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
854 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
855 /* connect (input) controls */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
856 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
857 for (p=0; p<setup->nports; p++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
858 LADSPA_PortDescriptor d = pdes->PortDescriptors[p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
859 if (LADSPA_IS_PORT_CONTROL(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
860 if (LADSPA_IS_PORT_INPUT(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
861 pdes->connect_port(setup->chhandles[i], p, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
862 &(setup->inputcontrols[p]) ); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
863 } else { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
864 pdes->connect_port(setup->chhandles[i], p, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
865 &(setup->outputcontrols[p]) ); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
866 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
867 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
868 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
869 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
870 /* Activate filter (if it isn't already :) ) */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
871 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
872 if ( (pdes->activate) && (setup->activated == 0) ) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
873 pdes->activate(setup->chhandles[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
874 setup->activated = 1; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
875 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
876 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
877 } /* All channels/filters done! except for... */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
878 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
879 /* Stereo effect with one channel left. Use same buffer for left |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
880 * and right. connect it to the second port. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
881 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
882 |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
883 for (p = i; p % setup->ninputs; p++) { |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
884 pdes->connect_port(setup->chhandles[i-1], |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
885 setup->inputs[p % setup->ninputs], |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
886 setup->inbufs[i-1]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
887 pdes->connect_port(setup->chhandles[i-1], |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
888 setup->outputs[p % setup->ninputs], |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
889 setup->outbufs[i-1]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
890 } /* done! */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
891 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
892 } /* setup for first call/change of bufsize is done. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
893 * normal playing routine follows... |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
894 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
895 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
896 /* Right now, I use a separate input and output buffer. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
897 * I could change this to in-place processing (inbuf==outbuf), but some |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
898 * ladspa filters are broken and are not able to handle that. This seems |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
899 * fast enough, so unless somebody complains, it stays this way :) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
900 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
901 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
902 /* Fill inbufs */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
903 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
904 for (p=0; p<setup->bufsize; p++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
905 for (i=0; i<nch; i++) { |
16195
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
906 setup->inbufs[i][p] = audio[p*nch + i]; |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
907 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
908 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
909 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
910 /* Run filter(s) */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
911 |
22127
c6c141ab4fcf
Experimental support for multichannel ladspa effects
reimar
parents:
19614
diff
changeset
|
912 for (i=0; i<nch; i+=setup->ninputs) { |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
913 pdes->run(setup->chhandles[i], setup->bufsize); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
914 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
915 |
16195
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
916 /* Extract outbufs */ |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
917 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
918 for (p=0; p<setup->bufsize; p++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
919 for (i=0; i<nch; i++) { |
16195
cb08f47d3a79
Removed in-filter int to float conversion. af_ladspa now demands floats as
ivo
parents:
15790
diff
changeset
|
920 audio[p*nch + i] = setup->outbufs[i][p]; |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
921 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
922 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
923 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
924 /* done */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
925 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
926 return data; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
927 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
928 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
929 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
930 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
931 /** \brief Open LADSPA Plugin Loader Filter |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
932 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
933 * \param af Audio Filter instance |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
934 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
935 * \return Either AF_ERROR or AF_OK |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
936 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
937 |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
22156
diff
changeset
|
938 static int af_open(af_instance_t *af) { |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
939 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
940 af->control=control; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
941 af->uninit=uninit; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
942 af->play=play; |
24888 | 943 af->mul=1; |
14217
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
944 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
945 af->data = calloc(1, sizeof(af_data_t)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
946 if (af->data == NULL) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
947 return af_ladspa_malloc_failed((char*)af_info_ladspa.name); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
948 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
949 af->setup = calloc(1, sizeof(af_ladspa_t)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
950 if (af->setup == NULL) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
951 free(af->data); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
952 af->data=NULL; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
953 return af_ladspa_malloc_failed((char*)af_info_ladspa.name); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
954 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
955 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
956 ((af_ladspa_t*)af->setup)->status = AF_ERROR; /* will be set to AF_OK if |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
957 * all went OK and play() |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
958 * should proceed. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
959 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
960 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
961 ((af_ladspa_t*)af->setup)->myname = strdup(af_info_ladspa.name); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
962 if (!((af_ladspa_t*)af->setup)->myname) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
963 return af_ladspa_malloc_failed((char*)af_info_ladspa.name); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
964 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
965 return AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
966 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
967 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
968 /* ------------------------------------------------------------------------- */ |