Mercurial > mplayer.hg
annotate libaf/af_ladspa.c @ 14217:5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
Compilation is optional and can be controled by configure. You need to
have the LADSPA SDK installed in order to have it autodetected by configure.
Manual page is updated.
author | ivo |
---|---|
date | Thu, 23 Dec 2004 02:09:52 +0000 |
parents | |
children | 3f7f4c9c7901 |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
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 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
26 * 2004-12-23 Added to CVS |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
27 * 2004-12-22 Cleaned up cosmetics |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
28 * 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
|
29 * 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
|
30 * (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
|
31 * 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
|
32 * Have CONTROL_REINIT return a proper value |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
33 * 2004-12-13 More Doxygen comments |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
34 * 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
|
35 * 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
|
36 * Finished Doxygen comments. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
37 * 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
|
38 * 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
|
39 * Fixed sig11 bug. Implemented (dummy) outputcontrols. Some |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
40 * 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
|
41 * controls. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
42 * 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
|
43 * Added support for stereo effects |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
44 * Added LADSPA_PATH support! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
45 * 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
|
46 * real-time. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
47 * 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
|
48 * 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
|
49 * 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
|
50 * 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
|
51 * 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
|
52 * coincidental :-) No C&P jobs though! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
53 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
54 */ |
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 /* Global Includes */ |
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 #include <stdio.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
61 #include <stdlib.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
62 #include <string.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
63 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
64 #include <unistd.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
65 #include <inttypes.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
66 #include <math.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
67 #include <limits.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
68 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
69 #include <dlfcn.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
70 #include <ladspa.h> |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
71 |
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 /* Local Includes */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
75 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
76 #include "af.h" |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
77 #include "../mp_msg.h" |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
78 #include "../help_mp.h" |
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 /* Defines */ |
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 /* why, o why, wasn't it defined like this in the first place? */ |
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 #define MSGT_AF MSGT_AFILTER |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
87 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
88 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
89 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
90 /* Filter specific data */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
91 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
92 typedef struct af_ladspa_s |
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 status; /**< Status of the filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
95 * Either AF_OK or AF_ERROR |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
96 * Because MPlayer re-inits audio filters that |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
97 * _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
|
98 * 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
|
99 * the data unchanged. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
100 */ |
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 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
|
103 * 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
|
104 * filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
105 */ |
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 char *file; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
108 char *label; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
109 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
110 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
|
111 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
112 void *libhandle; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
113 const LADSPA_Descriptor *plugin_descriptor; |
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 nports; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
116 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
117 int ninputs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
118 int *inputs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
119 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
120 int noutputs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
121 int *outputs; |
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 ninputcontrols; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
124 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
|
125 float *inputcontrols; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
126 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
127 int noutputcontrols; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
128 int *outputcontrolsmap; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
129 float *outputcontrols; |
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 int nch; /**< number of channels */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
132 int bufsize; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
133 float **inbufs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
134 float **outbufs; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
135 LADSPA_Handle *chhandles; |
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 } af_ladspa_t; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
138 |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
141 static int open(af_instance_t *af); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
142 static int af_ladspa_malloc_failed(char*); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
143 |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
146 /* Description */ |
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 af_info_t af_info_ladspa = { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
149 "LADSPA plugin loader", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
150 "ladspa", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
151 "Ivo van Poorten", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
152 "", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
153 AF_FLAGS_REENTRANT, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
154 open |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
155 }; |
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 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
158 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
159 /* 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
|
160 * Feel free to suggest an alternative. |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
163 /** \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
|
164 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
165 * 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
|
166 * 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
|
167 * 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
|
168 * 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
|
169 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
170 * \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
|
171 * plugin_descriptor set! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
172 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
173 * \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
|
174 * configuration. Else, it returns AF_ERROR. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
175 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
176 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
177 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
|
178 int p, i; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
179 const LADSPA_Descriptor *pdes = setup->plugin_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
180 LADSPA_PortDescriptor d; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
181 LADSPA_PortRangeHint hint; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
182 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
183 if (!setup->libhandle) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
184 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
|
185 if (!setup->plugin_descriptor) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
186 return AF_ERROR; /* same as above */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
187 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
188 /* let's do it */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
189 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
190 setup->nports = pdes->PortCount; |
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 /* allocate memory for all inputs/outputs/controls */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
193 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
194 setup->inputs = calloc(setup->nports, sizeof(int)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
195 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
|
196 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
197 setup->outputs = calloc(setup->nports, sizeof(int)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
198 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
|
199 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
200 setup->inputcontrolsmap = calloc(setup->nports, sizeof(int)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
201 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
|
202 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
203 setup->inputcontrols = calloc(setup->nports, sizeof(float)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
204 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
|
205 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
206 setup->outputcontrolsmap = calloc(setup->nports, sizeof(int)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
207 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
|
208 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
209 setup->outputcontrols = calloc(setup->nports, sizeof(float)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
210 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
|
211 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
212 /* set counts to zero */ |
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 setup->ninputs = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
215 setup->noutputs = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
216 setup->ninputcontrols = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
217 setup->noutputcontrols = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
218 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
219 /* 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
|
220 * what we have found |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
221 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
222 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
223 for (p=0; p<setup->nports; p++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
224 d = pdes->PortDescriptors[p]; |
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 if (LADSPA_IS_PORT_AUDIO(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
227 if (LADSPA_IS_PORT_INPUT(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
228 setup->inputs[setup->ninputs] = p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
229 setup->ninputs++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
230 } else if (LADSPA_IS_PORT_OUTPUT(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
231 setup->outputs[setup->noutputs] = p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
232 setup->noutputs++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
233 } |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
236 if (LADSPA_IS_PORT_CONTROL(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
237 if (LADSPA_IS_PORT_INPUT(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
238 setup->inputcontrolsmap[setup->ninputcontrols] = p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
239 setup->ninputcontrols++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
240 /* 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
|
241 * 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
|
242 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
243 setup->inputcontrols[p] = 0.0f; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
244 } else if (LADSPA_IS_PORT_OUTPUT(d)); { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
245 /* 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
|
246 * will sig11 |
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 setup->outputcontrolsmap[setup->noutputcontrols]=p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
249 setup->noutputcontrols++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
250 setup->outputcontrols[p] = 0.0f; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
251 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
252 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
253 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
254 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
255 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
256 if (setup->ninputs == 0) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
257 mp_msg(MSGT_AF, MSGL_WARN, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
258 MSGTR_AF_LADSPA_WarnNoInputs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
259 } else if (setup->ninputs == 1) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
260 mp_msg(MSGT_AF, MSGL_V, "%s: this is a mono effect\n", setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
261 } else if (setup->ninputs == 2) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
262 mp_msg(MSGT_AF, MSGL_V, "%s: this is a stereo effect\n", setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
263 } |
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 if (setup->ninputs > 2) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
266 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
267 MSGTR_AF_LADSPA_ErrMultiChannel); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
268 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
269 } |
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 if (setup->noutputs == 0) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
272 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
273 MSGTR_AF_LADSPA_ErrNoOutputs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
274 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
275 } |
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 if (setup->noutputs != setup->ninputs ) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
278 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
279 MSGTR_AF_LADSPA_ErrInOutDiff); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
280 return AF_ERROR; |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
283 mp_msg(MSGT_AF, MSGL_V, "%s: this plugin has %d input control(s)\n", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
284 setup->myname, setup->ninputcontrols); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
285 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
286 /* 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
|
287 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
288 for (i=0; i<setup->ninputcontrols; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
289 p = setup->inputcontrolsmap[i]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
290 hint = pdes->PortRangeHints[p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
291 mp_msg(MSGT_AF, MSGL_V, " --- %d %s [", i, pdes->PortNames[p]); |
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 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
|
294 mp_msg(MSGT_AF, MSGL_V, "%0.2f , ", hint.LowerBound); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
295 } else { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
296 mp_msg(MSGT_AF, MSGL_V, "... , "); |
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 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
|
300 mp_msg(MSGT_AF, MSGL_V, "%0.2f]\n", hint.UpperBound); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
301 } else { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
302 mp_msg(MSGT_AF, MSGL_V, "...]\n"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
303 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
304 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
305 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
306 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
307 return AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
308 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
309 |
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 /* 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
|
313 * 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
|
314 * 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
|
315 * 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
|
316 * 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
|
317 * 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
|
318 * 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
|
319 * 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
|
320 * 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
|
321 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
322 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
323 /** \brief dlopen() wrapper |
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 * 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
|
326 * 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
|
327 * 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
|
328 * 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
|
329 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
330 * \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
|
331 * \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
|
332 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
333 * \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
|
334 * NULL if it fails to load. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
335 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
336 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
337 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
|
338 char *buf; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
339 const char *end, *start, *ladspapath; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
340 int endsinso, needslash; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
341 size_t filenamelen; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
342 void *result = NULL; |
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 # 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
|
345 * 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
|
346 * this. (path separator, shared objects extension, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
347 * et cetera). |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
348 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
349 mp_msg(MSGT_AF, MSGL_V, "\ton windows, only absolute pathnames " |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
350 "are supported\n"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
351 mp_msg(MSGT_AF, MSGL_V, "\ttrying %s\n", filename); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
352 return dlopen(filename, flag); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
353 # endif |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
354 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
355 filenamelen = strlen(filename); |
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 endsinso = 0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
358 if (filenamelen > 3) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
359 endsinso = (strcmp(filename+filenamelen-3, ".so") == 0); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
360 if (!endsinso) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
361 buf=malloc(filenamelen+4); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
362 strcpy(buf, filename); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
363 strcat(buf, ".so"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
364 result=mydlopen(buf, flag); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
365 free(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
366 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
367 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
368 if (result) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
369 return result; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
370 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
371 ladspapath=getenv("LADSPA_PATH"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
372 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
373 if (ladspapath) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
374 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
375 start=ladspapath; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
376 while (*start != '\0') { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
377 end=start; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
378 while ( (*end != ':') && (*end != '\0') ) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
379 end++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
380 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
381 buf=malloc(filenamelen + 2 + (end-start) ); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
382 if (end > start) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
383 strncpy(buf, start, end-start); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
384 needslash=0; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
385 if (end > start) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
386 if (*(end-1) != '/') { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
387 needslash = 1; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
388 buf[end-start] = '/'; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
389 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
390 strcpy(buf+needslash+(end-start), filename); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
391 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
392 mp_msg(MSGT_AF, MSGL_V, "\ttrying %s\n", buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
393 result=dlopen(buf, flag); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
394 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
395 free(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
396 if (result) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
397 return result; |
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 start = end; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
400 if (*start == ':') |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
401 start++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
402 } /* 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
|
403 } /* end if there's a ladspapath */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
404 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
405 /* last resort, just open it again, so the dlerror() message is correct */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
406 mp_msg(MSGT_AF, MSGL_V, "\ttrying %s\n", filename); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
407 return dlopen(filename,flag); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
408 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
409 |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
412 /** \brief Load a LADSPA Plugin |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
413 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
414 * 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
|
415 * 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
|
416 * 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
|
417 * 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
|
418 * 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
|
419 * 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
|
420 * 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
|
421 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
422 * \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
|
423 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
424 * \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
|
425 */ |
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 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
|
428 const LADSPA_Descriptor *ladspa_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
429 LADSPA_Descriptor_Function descriptor_function; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
430 int i; |
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 /* load library */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
433 mp_msg(MSGT_AF, MSGL_V, "%s: loading ladspa plugin library %s\n", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
434 setup->myname, setup->file); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
435 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
436 setup->libhandle = mydlopen(setup->file, RTLD_NOW); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
437 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
438 if (!setup->libhandle) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
439 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s %s\n\t%s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
440 MSGTR_AF_LADSPA_ErrFailedToLoad, setup->file, dlerror() ); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
441 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
442 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
443 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
444 mp_msg(MSGT_AF, MSGL_V, "%s: library found.\n", setup->myname); |
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 /* find descriptor function */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
447 dlerror(); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
448 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
|
449 "ladspa_descriptor"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
450 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
451 if (!descriptor_function) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
452 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n\t%s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
453 MSGTR_AF_LADSPA_ErrNoDescriptor, dlerror()); |
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 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
456 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
457 /* 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
|
458 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
459 if (strcmp(setup->label, "help") == 0) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
460 mp_msg(MSGT_AF, MSGL_INFO, "%s: %s %s:\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
461 MSGTR_AF_LADSPA_AvailableLabels, setup->file); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
462 for (i=0; ; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
463 ladspa_descriptor = descriptor_function(i); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
464 if (ladspa_descriptor == NULL) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
465 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
466 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
467 mp_msg(MSGT_AF, MSGL_INFO, " %-16s - %s (%lu)\n", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
468 ladspa_descriptor->Label, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
469 ladspa_descriptor->Name, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
470 ladspa_descriptor->UniqueID); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
471 } |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
474 mp_msg(MSGT_AF, MSGL_V, "%s: looking for label\n", setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
475 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
476 /* find label in library */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
477 for (i=0; ; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
478 ladspa_descriptor = descriptor_function(i); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
479 if (ladspa_descriptor == NULL) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
480 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
481 MSGTR_AF_LADSPA_ErrLabelNotFound); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
482 return AF_ERROR; |
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 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
|
485 setup->plugin_descriptor = ladspa_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
486 mp_msg(MSGT_AF, MSGL_V, "%s: %s found\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
487 setup->label); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
488 return AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
489 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
490 } |
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_OK; |
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 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
496 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
497 /** \brief Print a malloc() failed error message. |
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 * 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
|
500 * 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
|
501 * returns AF_ERROR. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
502 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
503 * \return AF_ERROR |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
504 */ |
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 static int af_ladspa_malloc_failed(char *myname) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
507 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", myname, MSGTR_MemAllocFailed); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
508 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
509 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
510 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
511 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
512 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
513 /** \brief Controls the filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
514 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
515 * Control the behaviour of the filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
516 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
517 * Commands: |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
518 * 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
|
519 * of channels, rate, format, et cetera. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
520 * 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
|
521 * 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
|
522 * 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
|
523 * 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
|
524 * parsing the controls given on the commandline, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
525 * if any are needed. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
526 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
527 * \param af Audio filter instance |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
528 * \param cmd The command to execute |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
529 * \param arg Arguments to the command |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
530 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
531 * \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
|
532 * operation. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
533 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
534 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
535 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
|
536 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
|
537 int i, r; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
538 float val; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
539 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
540 switch(cmd) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
541 case AF_CONTROL_REINIT: |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
542 mp_msg(MSGT_AFILTER, MSGL_V, "%s: (re)init\n", setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
543 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
544 if (!arg) return AF_ERROR; |
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 /* for now, only accept 16 bit signed int */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
547 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
548 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
|
549 af->data->nch = ((af_data_t*)arg)->nch; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
550 af->data->format = AF_FORMAT_SI | AF_FORMAT_NE; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
551 af->data->bps = 2; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
552 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
553 /* 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
|
554 * filter, has to be done in play() :-/ |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
557 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
|
558 case AF_CONTROL_COMMAND_LINE: { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
559 char *buf; |
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 mp_msg(MSGT_AFILTER, MSGL_V, "%s: parse suboptions\n", setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
562 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
563 /* suboption parser here! |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
564 * format is (ladspa=)file:label:controls.... |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
565 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
566 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
567 if (!arg) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
568 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
569 MSGTR_AF_LADSPA_ErrNoSuboptions); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
570 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
571 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
572 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
573 buf = malloc(strlen(arg)+1); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
574 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
|
575 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
576 /* file... */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
577 buf[0] = '\0'; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
578 sscanf(arg, "%[^:]", buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
579 if (buf[0] == '\0') { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
580 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
581 MSGTR_AF_LADSPA_ErrNoLibFile); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
582 free(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
583 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
584 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
585 arg += strlen(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
586 setup->file = strdup(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
587 if (!setup->file) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
588 mp_msg(MSGT_AF, MSGL_V, "%s: file --> %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
589 setup->file); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
590 if (*(char*)arg != '\0') arg++; /* read ':' */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
591 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
592 /* label... */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
593 buf[0] = '\0'; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
594 sscanf(arg, "%[^:]", buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
595 if (buf[0] == '\0') { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
596 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
597 MSGTR_AF_LADSPA_ErrNoLabel); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
598 free(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
599 return AF_ERROR; |
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 arg += strlen(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
602 setup->label = strdup(buf); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
603 if (!setup->label) return af_ladspa_malloc_failed(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
604 mp_msg(MSGT_AF, MSGL_V, "%s: label --> %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
605 setup->label); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
606 /* if (*(char*)arg != '0') arg++; */ /* read ':' */ |
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 free(buf); /* no longer needed */ |
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 /* set new setup->myname */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
611 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
612 if(setup->myname) free(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
613 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
|
614 strlen(setup->label)+6, 1); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
615 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
|
616 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
|
617 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
|
618 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
619 /* load plugin :) */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
620 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
621 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
|
622 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
623 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
624 /* 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
|
625 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
|
626 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
627 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
628 /* 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
|
629 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
630 for(i=0; i<setup->ninputcontrols; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
631 if (!arg || (*(char*)arg != ':') ) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
632 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
633 MSGTR_AF_LADSPA_ErrNotEnoughControls); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
634 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
635 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
636 arg++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
637 r = sscanf(arg, "%f", &val); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
638 if (r!=1) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
639 mp_msg(MSGT_AF, MSGL_ERR, "%s: %s\n", setup->myname, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
640 MSGTR_AF_LADSPA_ErrNotEnoughControls); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
641 return AF_ERROR; |
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 setup->inputcontrols[setup->inputcontrolsmap[i]] = val; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
644 arg = strchr(arg, ':'); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
645 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
646 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
647 mp_msg(MSGT_AF, MSGL_V, "%s: input controls: ", setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
648 for(i=0; i<setup->ninputcontrols; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
649 mp_msg(MSGT_AF, MSGL_V, "%0.4f ", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
650 setup->inputcontrols[setup->inputcontrolsmap[i]]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
651 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
652 mp_msg(MSGT_AF, MSGL_V, "\n"); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
653 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
654 /* check boundaries of inputcontrols */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
655 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
656 mp_msg(MSGT_AF, MSGL_V, "%s: checking boundaries of input controls\n", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
657 setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
658 for(i=0; i<setup->ninputcontrols; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
659 int p = setup->inputcontrolsmap[i]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
660 LADSPA_PortRangeHint hint = |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
661 setup->plugin_descriptor->PortRangeHints[p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
662 val = setup->inputcontrols[p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
663 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
664 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
|
665 val < hint.LowerBound) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
666 mp_msg(MSGT_AF, MSGL_ERR, MSGTR_AF_LADSPA_ErrControlBelow, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
667 setup->myname, i, hint.LowerBound); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
668 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
669 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
670 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
|
671 val > hint.UpperBound) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
672 mp_msg(MSGT_AF, MSGL_ERR, MSGTR_AF_LADSPA_ErrControlAbove, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
673 setup->myname, i, hint.UpperBound); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
674 return AF_ERROR; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
675 } |
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 mp_msg(MSGT_AF, MSGL_V, "%s: all controls have sane values\n", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
678 setup->myname); |
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 /* All is well! */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
681 setup->status = AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
682 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
683 return AF_OK; } |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
686 return AF_UNKNOWN; |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
689 /* ------------------------------------------------------------------------- */ |
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 /** \brief Uninitialise the LADSPA Plugin Loader filter. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
692 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
693 * 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
|
694 * memory and exits. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
695 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
696 * \return No return value. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
697 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
698 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
699 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
|
700 int i; |
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 (af->data) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
703 free(af->data); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
704 if (af->setup) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
705 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
|
706 const LADSPA_Descriptor *pdes = setup->plugin_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
707 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
708 if (setup->myname) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
709 mp_msg(MSGT_AF, MSGL_V, "%s: cleaning up\n", setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
710 free(setup->myname); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
711 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
712 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
713 if (setup->chhandles) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
714 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
715 if ( (setup->ninputs == 2) && (i & 1) ) { /* stereo effect */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
716 i++; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
717 continue; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
718 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
719 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
|
720 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
|
721 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
722 free(setup->chhandles); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
723 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
724 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
725 if (setup->file) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
726 free(setup->file); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
727 if (setup->label) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
728 free(setup->label); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
729 if (setup->inputcontrolsmap) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
730 free(setup->inputcontrolsmap); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
731 if (setup->inputcontrols) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
732 free(setup->inputcontrols); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
733 if (setup->outputcontrolsmap) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
734 free(setup->outputcontrolsmap); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
735 if (setup->outputcontrols) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
736 free(setup->outputcontrols); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
737 if (setup->inputs) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
738 free(setup->inputs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
739 if (setup->outputs) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
740 free(setup->outputs); |
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 if (setup->inbufs) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
743 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
744 if (setup->inbufs[i]) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
745 free(setup->inbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
746 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
747 free(setup->inbufs); |
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 if (setup->outbufs) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
751 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
752 if (setup->outbufs[i]) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
753 free(setup->outbufs[i]); |
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 free(setup->outbufs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
756 } |
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 if (setup->libhandle) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
759 dlclose(setup->libhandle); |
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 free(setup); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
762 setup = NULL; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
763 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
764 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
765 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
766 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
767 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
768 /** \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
|
769 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
770 * \param af Pointer to audio filter instance |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
771 * \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
|
772 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
773 * \return Either AF_ERROR or AF_OK |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
774 */ |
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 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
|
777 af_ladspa_t *setup = af->setup; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
778 const LADSPA_Descriptor *pdes = setup->plugin_descriptor; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
779 int16_t *audio = (int16_t*)data->audio; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
780 int nsamples = data->len/2; /* /2 because it's int16_t */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
781 int nch = data->nch; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
782 int rate = data->rate; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
783 int i, p; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
784 float v; |
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 if (setup->status !=AF_OK) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
787 return data; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
788 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
789 /* 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
|
790 * plugin, connect ports and activate plugin |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
791 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
792 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
793 /* 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
|
794 * 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
|
795 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
796 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
797 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
|
798 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
799 /* 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
|
800 * 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
|
801 */ |
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 if (setup->nch != 0) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
804 mp_msg(MSGT_AF, MSGL_DBG2, "%s: bufsize change; free old buffer\n", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
805 setup->myname); |
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 if(setup->inbufs) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
808 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
809 if(setup->inbufs[i]) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
810 free(setup->inbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
811 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
812 free(setup->inbufs); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
813 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
814 if(setup->outbufs) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
815 for(i=0; i<setup->nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
816 if(setup->outbufs[i]) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
817 free(setup->outbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
818 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
819 free(setup->outbufs); |
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 } /* everything is freed */ |
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 setup->bufsize = nsamples/nch; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
824 setup->nch = nch; |
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 setup->inbufs = calloc(nch, sizeof(float*)); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
827 setup->outbufs = calloc(nch, sizeof(float*)); |
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 mp_msg(MSGT_AF, MSGL_DBG2, "%s: bufsize = %d\n", |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
830 setup->myname, setup->bufsize); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
831 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
832 for(i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
833 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
|
834 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
|
835 } |
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 /* 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
|
838 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
839 if (!setup->chhandles) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
840 setup->chhandles = calloc(nch, sizeof(LADSPA_Handle)); |
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 /* create handles |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
843 * 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
|
844 */ |
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 for(i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
847 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
848 if ( (setup->ninputs == 2) && (i & 1) ) { /* stereo effect */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
849 /* copy the handle from previous channel */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
850 setup->chhandles[i] = setup->chhandles[i-1]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
851 continue; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
852 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
853 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
854 setup->chhandles[i] = pdes->instantiate(pdes, rate); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
855 } |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
858 /* 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
|
859 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
860 * always (re)connect ports |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
861 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
862 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
863 for(i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
864 pdes->connect_port(setup->chhandles[i], |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
865 setup->inputs[ (setup->ninputs==2) ? i&1 : 0 ], |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
866 setup->inbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
867 pdes->connect_port(setup->chhandles[i], |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
868 setup->outputs[ (setup->ninputs==2) ? i&1 : 0 ], |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
869 setup->outbufs[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
870 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
871 /* connect (input) controls */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
872 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
873 for (p=0; p<setup->nports; p++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
874 LADSPA_PortDescriptor d = pdes->PortDescriptors[p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
875 if (LADSPA_IS_PORT_CONTROL(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
876 if (LADSPA_IS_PORT_INPUT(d)) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
877 pdes->connect_port(setup->chhandles[i], p, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
878 &(setup->inputcontrols[p]) ); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
879 } else { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
880 pdes->connect_port(setup->chhandles[i], p, |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
881 &(setup->outputcontrols[p]) ); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
882 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
883 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
884 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
885 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
886 /* Activate filter (if it isn't already :) ) */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
887 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
888 if ( (pdes->activate) && (setup->activated == 0) ) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
889 pdes->activate(setup->chhandles[i]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
890 setup->activated = 1; |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
893 } /* All channels/filters done! except for... */ |
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 /* 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
|
896 * 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
|
897 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
898 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
899 if( (setup->ninputs == 2) && (i&1) && (i >= 1) ) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
900 pdes->connect_port(setup->chhandles[i-1], |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
901 setup->inputs[ (setup->ninputs==2) ? i&1 : 0 ], |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
902 setup->inbufs[i-1]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
903 pdes->connect_port(setup->chhandles[i-1], |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
904 setup->outputs[ (setup->ninputs==2) ? i&1 : 0 ], |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
905 setup->outbufs[i-1]); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
906 } /* done! */ |
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 } /* 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
|
909 * normal playing routine follows... |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
910 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
911 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
912 /* 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
|
913 * 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
|
914 * 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
|
915 * 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
|
916 */ |
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 /* Fill inbufs */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
919 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
920 for (p=0; p<setup->bufsize; p++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
921 for (i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
922 setup->inbufs[i][p] = ( (float) audio[p*nch + i] ) / 32768.0f; |
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 } |
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 /* Run filter(s) */ |
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 for (i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
929 pdes->run(setup->chhandles[i], setup->bufsize); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
930 if (setup->ninputs==2) // stereo effect just ran |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
931 i++; |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
934 /* Extract outbufs, hard clipping in case the filter exceeded [-1.0,1.0] */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
935 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
936 for (p=0; p<setup->bufsize; p++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
937 for (i=0; i<nch; i++) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
938 v = setup->outbufs[i][p]; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
939 v *= 32768.0f; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
940 v = (v > 32767.0f ? 32767.0f : v); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
941 v = (v < -32768.0f ? -32768.0f : v); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
942 audio[p*nch + i] = (int16_t) v; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
943 } |
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 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
946 /* done */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
947 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
948 return data; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
949 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
950 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
951 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
952 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
953 /** \brief Open LADSPA Plugin Loader Filter |
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 * \param af Audio Filter instance |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
956 * |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
957 * \return Either AF_ERROR or AF_OK |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
958 */ |
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 static int open(af_instance_t *af) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
961 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
962 af->control=control; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
963 af->uninit=uninit; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
964 af->play=play; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
965 af->mul.n=1; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
966 af->mul.d=1; |
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 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
|
969 if (af->data == NULL) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
970 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
|
971 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
972 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
|
973 if (af->setup == NULL) { |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
974 free(af->data); |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
975 af->data=NULL; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
976 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
|
977 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
978 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
979 ((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
|
980 * all went OK and play() |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
981 * should proceed. |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
982 */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
983 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
984 ((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
|
985 if (!((af_ladspa_t*)af->setup)->myname) |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
986 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
|
987 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
988 return AF_OK; |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
989 } |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
990 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
991 /* ------------------------------------------------------------------------- */ |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
992 |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
993 #undef MSGT_AF |
5b5ebf93ec16
Adds support for LADSPA (Linux Audio Developer's Simple Plugin API) plugins.
ivo
parents:
diff
changeset
|
994 |