Mercurial > mplayer.hg
annotate libaf/af_ladspa.c @ 14287:25142a687b00
fix quicksort to avoid stack overflow and extreme runtimes
author | reimar |
---|---|
date | Fri, 31 Dec 2004 16:02:47 +0000 |
parents | 3f7f4c9c7901 |
children | 8f6bd2869325 |
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; |
14258
3f7f4c9c7901
Make af_ladspa use new AF_FORMAT define that was introduced by Alex's
ivo
parents:
14217
diff
changeset
|
550 af->data->format = AF_FORMAT_S16_NE; |
14217
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 |