]> code.delx.au - pulseaudio/blob - src/modules/module-ladspa-sink.c
7c4c274e21d6d9e2e3c31d9f7a636305f59905af
[pulseaudio] / src / modules / module-ladspa-sink.c
1 /***
2 This file is part of PulseAudio.
3
4 Copyright 2004-2008 Lennart Poettering
5
6 PulseAudio is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as published
8 by the Free Software Foundation; either version 2.1 of the License,
9 or (at your option) any later version.
10
11 PulseAudio is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License
17 along with PulseAudio; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19 USA.
20 ***/
21
22 /* TODO: Some plugins cause latency, and some even report it by using a control
23 out port. We don't currently use the latency information. */
24
25 #ifdef HAVE_CONFIG_H
26 #include <config.h>
27 #endif
28
29 #include <math.h>
30
31 #include <pulse/xmalloc.h>
32
33 #include <pulsecore/i18n.h>
34 #include <pulsecore/namereg.h>
35 #include <pulsecore/sink.h>
36 #include <pulsecore/module.h>
37 #include <pulsecore/core-util.h>
38 #include <pulsecore/modargs.h>
39 #include <pulsecore/log.h>
40 #include <pulsecore/rtpoll.h>
41 #include <pulsecore/sample-util.h>
42 #include <pulsecore/ltdl-helper.h>
43
44 #ifdef HAVE_DBUS
45 #include <pulsecore/protocol-dbus.h>
46 #include <pulsecore/dbus-util.h>
47 #endif
48
49 #include "module-ladspa-sink-symdef.h"
50 #include "ladspa.h"
51
52 PA_MODULE_AUTHOR("Lennart Poettering");
53 PA_MODULE_DESCRIPTION(_("Virtual LADSPA sink"));
54 PA_MODULE_VERSION(PACKAGE_VERSION);
55 PA_MODULE_LOAD_ONCE(false);
56 PA_MODULE_USAGE(
57 _("sink_name=<name for the sink> "
58 "sink_properties=<properties for the sink> "
59 "master=<name of sink to filter> "
60 "format=<sample format> "
61 "rate=<sample rate> "
62 "channels=<number of channels> "
63 "channel_map=<input channel map> "
64 "plugin=<ladspa plugin name> "
65 "label=<ladspa plugin label> "
66 "control=<comma separated list of input control values> "
67 "input_ladspaport_map=<comma separated list of input LADSPA port names> "
68 "output_ladspaport_map=<comma separated list of output LADSPA port names> "));
69
70 #define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
71
72 /* PLEASE NOTICE: The PortAudio ports and the LADSPA ports are two different concepts.
73 They are not related and where possible the names of the LADSPA port variables contains "ladspa" to avoid confusion */
74
75 struct userdata {
76 pa_module *module;
77
78 pa_sink *sink;
79 pa_sink_input *sink_input;
80
81 const LADSPA_Descriptor *descriptor;
82 LADSPA_Handle handle[PA_CHANNELS_MAX];
83 unsigned long max_ladspaport_count, input_count, output_count, channels;
84 LADSPA_Data **input, **output;
85 size_t block_size;
86 LADSPA_Data *control;
87 long unsigned n_control;
88
89 /* This is a dummy buffer. Every port must be connected, but we don't care
90 about control out ports. We connect them all to this single buffer. */
91 LADSPA_Data control_out;
92
93 pa_memblockq *memblockq;
94
95 bool *use_default;
96 pa_sample_spec ss;
97
98 #ifdef HAVE_DBUS
99 pa_dbus_protocol *dbus_protocol;
100 char *dbus_path;
101 #endif
102
103 bool auto_desc;
104 };
105
106 static const char* const valid_modargs[] = {
107 "sink_name",
108 "sink_properties",
109 "master",
110 "format",
111 "rate",
112 "channels",
113 "channel_map",
114 "plugin",
115 "label",
116 "control",
117 "input_ladspaport_map",
118 "output_ladspaport_map",
119 NULL
120 };
121
122 /* The PA_SINK_MESSAGE types that extend the predefined messages. */
123 enum {
124 LADSPA_SINK_MESSAGE_UPDATE_PARAMETERS = PA_SINK_MESSAGE_MAX
125 };
126
127 static int write_control_parameters(struct userdata *u, double *control_values, bool *use_default);
128 static void connect_control_ports(struct userdata *u);
129
130 #ifdef HAVE_DBUS
131
132 #define LADSPA_IFACE "org.PulseAudio.Ext.Ladspa1"
133 #define LADSPA_ALGORITHM_PARAMETERS "AlgorithmParameters"
134
135 /* TODO: add a PropertyChanged signal to tell that the algorithm parameters have been changed */
136
137 enum ladspa_handler_index {
138 LADSPA_HANDLER_ALGORITHM_PARAMETERS,
139 LADSPA_HANDLER_MAX
140 };
141
142 static void get_algorithm_parameters(DBusConnection *conn, DBusMessage *msg, void *_u) {
143 struct userdata *u;
144 DBusMessage *reply = NULL;
145 DBusMessageIter msg_iter, struct_iter;
146 unsigned long i;
147 double *control;
148 dbus_bool_t *use_default;
149
150 pa_assert(conn);
151 pa_assert(msg);
152 pa_assert_se(u = _u);
153
154 pa_assert_se((reply = dbus_message_new_method_return(msg)));
155 dbus_message_iter_init_append(reply, &msg_iter);
156
157 dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter);
158
159 /* copying because of the D-Bus type mapping */
160 control = pa_xnew(double, u->n_control);
161 use_default = pa_xnew(dbus_bool_t, u->n_control);
162
163 for (i = 0; i < u->n_control; i++) {
164 control[i] = (double) u->control[i];
165 use_default[i] = u->use_default[i];
166 }
167
168 pa_dbus_append_basic_array(&struct_iter, DBUS_TYPE_DOUBLE, control, u->n_control);
169 pa_dbus_append_basic_array(&struct_iter, DBUS_TYPE_BOOLEAN, use_default, u->n_control);
170
171 dbus_message_iter_close_container(&msg_iter, &struct_iter);
172
173 pa_assert_se(dbus_connection_send(conn, reply, NULL));
174
175 dbus_message_unref(reply);
176 pa_xfree(control);
177 pa_xfree(use_default);
178 }
179
180 static void set_algorithm_parameters(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *_u) {
181 struct userdata *u;
182 DBusMessageIter array_iter, struct_iter;
183 int n_control = 0, n_use_default;
184 unsigned n_dbus_control, n_dbus_use_default;
185 double *read_values = NULL;
186 dbus_bool_t *read_defaults = NULL;
187 bool *use_defaults = NULL;
188 unsigned long i;
189
190 pa_assert(conn);
191 pa_assert(msg);
192 pa_assert_se(u = _u);
193
194 /* The property we are expecting has signature (adab), meaning that it's a
195 struct of two arrays, the first containing doubles and the second containing
196 booleans. The first array has the algorithm configuration values and the
197 second array has booleans indicating whether the matching algorithm
198 configuration value should use (or try to use) the default value provided by
199 the algorithm module. The PulseAudio D-Bus infrastructure will take care of
200 checking the argument types for us. */
201
202 dbus_message_iter_recurse(iter, &struct_iter);
203
204 dbus_message_iter_recurse(&struct_iter, &array_iter);
205 dbus_message_iter_get_fixed_array(&array_iter, &read_values, &n_control);
206
207 dbus_message_iter_next(&struct_iter);
208 dbus_message_iter_recurse(&struct_iter, &array_iter);
209 dbus_message_iter_get_fixed_array(&array_iter, &read_defaults, &n_use_default);
210
211 n_dbus_control = n_control; /* handle the unsignedness */
212 n_dbus_use_default = n_use_default;
213
214 if (n_dbus_control != u->n_control || n_dbus_use_default != u->n_control) {
215 pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong number of array values (expected %lu)", u->n_control);
216 return;
217 }
218
219 use_defaults = pa_xnew(bool, n_control);
220 for (i = 0; i < u->n_control; i++)
221 use_defaults[i] = read_defaults[i];
222
223 if (write_control_parameters(u, read_values, use_defaults) < 0) {
224 pa_log_warn("Failed writing control parameters");
225 goto error;
226 }
227
228 pa_asyncmsgq_send(u->sink->asyncmsgq, PA_MSGOBJECT(u->sink), LADSPA_SINK_MESSAGE_UPDATE_PARAMETERS, NULL, 0, NULL);
229
230 pa_dbus_send_empty_reply(conn, msg);
231
232 pa_xfree(use_defaults);
233 return;
234
235 error:
236 pa_xfree(use_defaults);
237 pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Internal error");
238 }
239
240 static pa_dbus_property_handler ladspa_property_handlers[LADSPA_HANDLER_MAX] = {
241 [LADSPA_HANDLER_ALGORITHM_PARAMETERS] = {
242 .property_name = LADSPA_ALGORITHM_PARAMETERS,
243 .type = "(adab)",
244 .get_cb = get_algorithm_parameters,
245 .set_cb = set_algorithm_parameters
246 }
247 };
248
249 static void ladspa_get_all(DBusConnection *conn, DBusMessage *msg, void *_u) {
250 struct userdata *u;
251 DBusMessage *reply = NULL;
252 DBusMessageIter msg_iter, dict_iter, dict_entry_iter, variant_iter, struct_iter;
253 const char *key = LADSPA_ALGORITHM_PARAMETERS;
254 double *control;
255 dbus_bool_t *use_default;
256 long unsigned i;
257
258 pa_assert(conn);
259 pa_assert(msg);
260 pa_assert_se(u = _u);
261
262 pa_assert_se((reply = dbus_message_new_method_return(msg)));
263
264 /* Currently, on this interface, only a single property is returned. */
265
266 dbus_message_iter_init_append(reply, &msg_iter);
267 pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
268 pa_assert_se(dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
269 pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
270
271 pa_assert_se(dbus_message_iter_open_container(&dict_entry_iter, DBUS_TYPE_VARIANT, "(adab)", &variant_iter));
272 pa_assert_se(dbus_message_iter_open_container(&variant_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter));
273
274 control = pa_xnew(double, u->n_control);
275 use_default = pa_xnew(dbus_bool_t, u->n_control);
276
277 for (i = 0; i < u->n_control; i++) {
278 control[i] = (double) u->control[i];
279 use_default[i] = u->use_default[i];
280 }
281
282 pa_dbus_append_basic_array(&struct_iter, DBUS_TYPE_DOUBLE, control, u->n_control);
283 pa_dbus_append_basic_array(&struct_iter, DBUS_TYPE_BOOLEAN, use_default, u->n_control);
284
285 pa_assert_se(dbus_message_iter_close_container(&variant_iter, &struct_iter));
286 pa_assert_se(dbus_message_iter_close_container(&dict_entry_iter, &variant_iter));
287 pa_assert_se(dbus_message_iter_close_container(&dict_iter, &dict_entry_iter));
288 pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
289
290 pa_assert_se(dbus_connection_send(conn, reply, NULL));
291 dbus_message_unref(reply);
292 pa_xfree(control);
293 pa_xfree(use_default);
294 }
295
296 static pa_dbus_interface_info ladspa_info = {
297 .name = LADSPA_IFACE,
298 .method_handlers = NULL,
299 .n_method_handlers = 0,
300 .property_handlers = ladspa_property_handlers,
301 .n_property_handlers = LADSPA_HANDLER_MAX,
302 .get_all_properties_cb = ladspa_get_all,
303 .signals = NULL,
304 .n_signals = 0
305 };
306
307 static void dbus_init(struct userdata *u) {
308 pa_assert_se(u);
309
310 u->dbus_protocol = pa_dbus_protocol_get(u->sink->core);
311 u->dbus_path = pa_sprintf_malloc("/org/pulseaudio/core1/sink%d", u->sink->index);
312
313 pa_dbus_protocol_add_interface(u->dbus_protocol, u->dbus_path, &ladspa_info, u);
314 }
315
316 static void dbus_done(struct userdata *u) {
317 pa_assert_se(u);
318
319 if (!u->dbus_protocol) {
320 pa_assert(!u->dbus_path);
321 return;
322 }
323
324 pa_dbus_protocol_remove_interface(u->dbus_protocol, u->dbus_path, ladspa_info.name);
325 pa_xfree(u->dbus_path);
326 pa_dbus_protocol_unref(u->dbus_protocol);
327
328 u->dbus_path = NULL;
329 u->dbus_protocol = NULL;
330 }
331
332 #endif /* HAVE_DBUS */
333
334 /* Called from I/O thread context */
335 static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
336 struct userdata *u = PA_SINK(o)->userdata;
337
338 switch (code) {
339
340 case PA_SINK_MESSAGE_GET_LATENCY:
341
342 /* The sink is _put() before the sink input is, so let's
343 * make sure we don't access it in that time. Also, the
344 * sink input is first shut down, the sink second. */
345 if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
346 !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
347 *((pa_usec_t*) data) = 0;
348 return 0;
349 }
350
351 *((pa_usec_t*) data) =
352
353 /* Get the latency of the master sink */
354 pa_sink_get_latency_within_thread(u->sink_input->sink) +
355
356 /* Add the latency internal to our sink input on top */
357 pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
358
359 return 0;
360
361 case LADSPA_SINK_MESSAGE_UPDATE_PARAMETERS:
362
363 /* rewind the stream to throw away the previously rendered data */
364
365 pa_log_debug("Requesting rewind due to parameter update.");
366 pa_sink_request_rewind(u->sink, -1);
367
368 /* change the sink parameters */
369 connect_control_ports(u);
370
371 return 0;
372 }
373
374 return pa_sink_process_msg(o, code, data, offset, chunk);
375 }
376
377 /* Called from main context */
378 static int sink_set_state_cb(pa_sink *s, pa_sink_state_t state) {
379 struct userdata *u;
380
381 pa_sink_assert_ref(s);
382 pa_assert_se(u = s->userdata);
383
384 if (!PA_SINK_IS_LINKED(state) ||
385 !PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
386 return 0;
387
388 pa_sink_input_cork(u->sink_input, state == PA_SINK_SUSPENDED);
389 return 0;
390 }
391
392 /* Called from I/O thread context */
393 static void sink_request_rewind_cb(pa_sink *s) {
394 struct userdata *u;
395
396 pa_sink_assert_ref(s);
397 pa_assert_se(u = s->userdata);
398
399 if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
400 !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state))
401 return;
402
403 /* Just hand this one over to the master sink */
404 pa_sink_input_request_rewind(u->sink_input,
405 s->thread_info.rewind_nbytes +
406 pa_memblockq_get_length(u->memblockq), true, false, false);
407 }
408
409 /* Called from I/O thread context */
410 static void sink_update_requested_latency_cb(pa_sink *s) {
411 struct userdata *u;
412
413 pa_sink_assert_ref(s);
414 pa_assert_se(u = s->userdata);
415
416 if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
417 !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state))
418 return;
419
420 /* Just hand this one over to the master sink */
421 pa_sink_input_set_requested_latency_within_thread(
422 u->sink_input,
423 pa_sink_get_requested_latency_within_thread(s));
424 }
425
426 /* Called from main context */
427 static void sink_set_mute_cb(pa_sink *s) {
428 struct userdata *u;
429
430 pa_sink_assert_ref(s);
431 pa_assert_se(u = s->userdata);
432
433 if (!PA_SINK_IS_LINKED(pa_sink_get_state(s)) ||
434 !PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
435 return;
436
437 pa_sink_input_set_mute(u->sink_input, s->muted, s->save_muted);
438 }
439
440 /* Called from I/O thread context */
441 static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
442 struct userdata *u;
443 float *src, *dst;
444 size_t fs;
445 unsigned n, h, c;
446 pa_memchunk tchunk;
447
448 pa_sink_input_assert_ref(i);
449 pa_assert(chunk);
450 pa_assert_se(u = i->userdata);
451
452 /* Hmm, process any rewind request that might be queued up */
453 pa_sink_process_rewind(u->sink, 0);
454
455 while (pa_memblockq_peek(u->memblockq, &tchunk) < 0) {
456 pa_memchunk nchunk;
457
458 pa_sink_render(u->sink, nbytes, &nchunk);
459 pa_memblockq_push(u->memblockq, &nchunk);
460 pa_memblock_unref(nchunk.memblock);
461 }
462
463 tchunk.length = PA_MIN(nbytes, tchunk.length);
464 pa_assert(tchunk.length > 0);
465
466 fs = pa_frame_size(&i->sample_spec);
467 n = (unsigned) (PA_MIN(tchunk.length, u->block_size) / fs);
468
469 pa_assert(n > 0);
470
471 chunk->index = 0;
472 chunk->length = n*fs;
473 chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
474
475 pa_memblockq_drop(u->memblockq, chunk->length);
476
477 src = pa_memblock_acquire_chunk(&tchunk);
478 dst = pa_memblock_acquire(chunk->memblock);
479
480 for (h = 0; h < (u->channels / u->max_ladspaport_count); h++) {
481 for (c = 0; c < u->input_count; c++)
482 pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c], sizeof(float), src+ h*u->max_ladspaport_count + c, u->channels*sizeof(float), n);
483 u->descriptor->run(u->handle[h], n);
484 for (c = 0; c < u->output_count; c++)
485 pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + h*u->max_ladspaport_count + c, u->channels*sizeof(float), u->output[c], sizeof(float), n);
486 }
487
488 pa_memblock_release(tchunk.memblock);
489 pa_memblock_release(chunk->memblock);
490
491 pa_memblock_unref(tchunk.memblock);
492
493 return 0;
494 }
495
496 /* Called from I/O thread context */
497 static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
498 struct userdata *u;
499 size_t amount = 0;
500
501 pa_sink_input_assert_ref(i);
502 pa_assert_se(u = i->userdata);
503
504 if (u->sink->thread_info.rewind_nbytes > 0) {
505 size_t max_rewrite;
506
507 max_rewrite = nbytes + pa_memblockq_get_length(u->memblockq);
508 amount = PA_MIN(u->sink->thread_info.rewind_nbytes, max_rewrite);
509 u->sink->thread_info.rewind_nbytes = 0;
510
511 if (amount > 0) {
512 unsigned c;
513
514 pa_memblockq_seek(u->memblockq, - (int64_t) amount, PA_SEEK_RELATIVE, true);
515
516 pa_log_debug("Resetting plugin");
517
518 /* Reset the plugin */
519 if (u->descriptor->deactivate)
520 for (c = 0; c < (u->channels / u->max_ladspaport_count); c++)
521 u->descriptor->deactivate(u->handle[c]);
522 if (u->descriptor->activate)
523 for (c = 0; c < (u->channels / u->max_ladspaport_count); c++)
524 u->descriptor->activate(u->handle[c]);
525 }
526 }
527
528 pa_sink_process_rewind(u->sink, amount);
529 pa_memblockq_rewind(u->memblockq, nbytes);
530 }
531
532 /* Called from I/O thread context */
533 static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
534 struct userdata *u;
535
536 pa_sink_input_assert_ref(i);
537 pa_assert_se(u = i->userdata);
538
539 /* FIXME: Too small max_rewind:
540 * https://bugs.freedesktop.org/show_bug.cgi?id=53709 */
541 pa_memblockq_set_maxrewind(u->memblockq, nbytes);
542 pa_sink_set_max_rewind_within_thread(u->sink, nbytes);
543 }
544
545 /* Called from I/O thread context */
546 static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
547 struct userdata *u;
548
549 pa_sink_input_assert_ref(i);
550 pa_assert_se(u = i->userdata);
551
552 pa_sink_set_max_request_within_thread(u->sink, nbytes);
553 }
554
555 /* Called from I/O thread context */
556 static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
557 struct userdata *u;
558
559 pa_sink_input_assert_ref(i);
560 pa_assert_se(u = i->userdata);
561
562 pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
563 }
564
565 /* Called from I/O thread context */
566 static void sink_input_update_sink_fixed_latency_cb(pa_sink_input *i) {
567 struct userdata *u;
568
569 pa_sink_input_assert_ref(i);
570 pa_assert_se(u = i->userdata);
571
572 pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
573 }
574
575 /* Called from I/O thread context */
576 static void sink_input_detach_cb(pa_sink_input *i) {
577 struct userdata *u;
578
579 pa_sink_input_assert_ref(i);
580 pa_assert_se(u = i->userdata);
581
582 pa_sink_detach_within_thread(u->sink);
583
584 pa_sink_set_rtpoll(u->sink, NULL);
585 }
586
587 /* Called from I/O thread context */
588 static void sink_input_attach_cb(pa_sink_input *i) {
589 struct userdata *u;
590
591 pa_sink_input_assert_ref(i);
592 pa_assert_se(u = i->userdata);
593
594 pa_sink_set_rtpoll(u->sink, i->sink->thread_info.rtpoll);
595 pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
596 pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
597 pa_sink_set_max_request_within_thread(u->sink, pa_sink_input_get_max_request(i));
598
599 /* FIXME: Too small max_rewind:
600 * https://bugs.freedesktop.org/show_bug.cgi?id=53709 */
601 pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i));
602
603 pa_sink_attach_within_thread(u->sink);
604 }
605
606 /* Called from main context */
607 static void sink_input_kill_cb(pa_sink_input *i) {
608 struct userdata *u;
609
610 pa_sink_input_assert_ref(i);
611 pa_assert_se(u = i->userdata);
612
613 /* The order here matters! We first kill the sink input, followed
614 * by the sink. That means the sink callbacks must be protected
615 * against an unconnected sink input! */
616 pa_sink_input_unlink(u->sink_input);
617 pa_sink_unlink(u->sink);
618
619 pa_sink_input_unref(u->sink_input);
620 u->sink_input = NULL;
621
622 pa_sink_unref(u->sink);
623 u->sink = NULL;
624
625 pa_module_unload_request(u->module, true);
626 }
627
628 /* Called from IO thread context */
629 static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) {
630 struct userdata *u;
631
632 pa_sink_input_assert_ref(i);
633 pa_assert_se(u = i->userdata);
634
635 /* If we are added for the first time, ask for a rewinding so that
636 * we are heard right-away. */
637 if (PA_SINK_INPUT_IS_LINKED(state) &&
638 i->thread_info.state == PA_SINK_INPUT_INIT) {
639 pa_log_debug("Requesting rewind due to state change.");
640 pa_sink_input_request_rewind(i, 0, false, true, true);
641 }
642 }
643
644 /* Called from main context */
645 static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
646 struct userdata *u;
647
648 pa_sink_input_assert_ref(i);
649 pa_assert_se(u = i->userdata);
650
651 if (dest) {
652 pa_sink_set_asyncmsgq(u->sink, dest->asyncmsgq);
653 pa_sink_update_flags(u->sink, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY, dest->flags);
654 } else
655 pa_sink_set_asyncmsgq(u->sink, NULL);
656
657 if (u->auto_desc && dest) {
658 const char *z;
659 pa_proplist *pl;
660
661 pl = pa_proplist_new();
662 z = pa_proplist_gets(dest->proplist, PA_PROP_DEVICE_DESCRIPTION);
663 pa_proplist_setf(pl, PA_PROP_DEVICE_DESCRIPTION, "LADSPA Plugin %s on %s",
664 pa_proplist_gets(u->sink->proplist, "device.ladspa.name"), z ? z : dest->name);
665
666 pa_sink_update_proplist(u->sink, PA_UPDATE_REPLACE, pl);
667 pa_proplist_free(pl);
668 }
669 }
670
671 /* Called from main context */
672 static void sink_input_mute_changed_cb(pa_sink_input *i) {
673 struct userdata *u;
674
675 pa_sink_input_assert_ref(i);
676 pa_assert_se(u = i->userdata);
677
678 pa_sink_mute_changed(u->sink, i->muted);
679 }
680
681 static int parse_control_parameters(struct userdata *u, const char *cdata, double *read_values, bool *use_default) {
682 unsigned long p = 0;
683 const char *state = NULL;
684 char *k;
685
686 pa_assert(read_values);
687 pa_assert(use_default);
688 pa_assert(u);
689
690 pa_log_debug("Trying to read %lu control values", u->n_control);
691
692 if (!cdata && u->n_control > 0)
693 return -1;
694
695 pa_log_debug("cdata: '%s'", cdata);
696
697 while ((k = pa_split(cdata, ",", &state)) && p < u->n_control) {
698 double f;
699
700 if (*k == 0) {
701 pa_log_debug("Read empty config value (p=%lu)", p);
702 use_default[p++] = true;
703 pa_xfree(k);
704 continue;
705 }
706
707 if (pa_atod(k, &f) < 0) {
708 pa_log_debug("Failed to parse control value '%s' (p=%lu)", k, p);
709 pa_xfree(k);
710 goto fail;
711 }
712
713 pa_xfree(k);
714
715 pa_log_debug("Read config value %f (p=%lu)", f, p);
716
717 use_default[p] = false;
718 read_values[p++] = f;
719 }
720
721 /* The previous loop doesn't take the last control value into account
722 if it is left empty, so we do it here. */
723 if (*cdata == 0 || cdata[strlen(cdata) - 1] == ',') {
724 if (p < u->n_control)
725 use_default[p] = true;
726 p++;
727 }
728
729 if (p > u->n_control || k) {
730 pa_log("Too many control values passed, %lu expected.", u->n_control);
731 pa_xfree(k);
732 goto fail;
733 }
734
735 if (p < u->n_control) {
736 pa_log("Not enough control values passed, %lu expected, %lu passed.", u->n_control, p);
737 goto fail;
738 }
739
740 return 0;
741
742 fail:
743 return -1;
744 }
745
746 static void connect_control_ports(struct userdata *u) {
747 unsigned long p = 0, h = 0, c;
748 const LADSPA_Descriptor *d;
749
750 pa_assert(u);
751 pa_assert_se(d = u->descriptor);
752
753 for (p = 0; p < d->PortCount; p++) {
754 if (!LADSPA_IS_PORT_CONTROL(d->PortDescriptors[p]))
755 continue;
756
757 if (LADSPA_IS_PORT_OUTPUT(d->PortDescriptors[p])) {
758 for (c = 0; c < (u->channels / u->max_ladspaport_count); c++)
759 d->connect_port(u->handle[c], p, &u->control_out);
760 continue;
761 }
762
763 /* input control port */
764
765 pa_log_debug("Binding %f to port %s", u->control[h], d->PortNames[p]);
766
767 for (c = 0; c < (u->channels / u->max_ladspaport_count); c++)
768 d->connect_port(u->handle[c], p, &u->control[h]);
769
770 h++;
771 }
772 }
773
774 static int validate_control_parameters(struct userdata *u, double *control_values, bool *use_default) {
775 unsigned long p = 0, h = 0;
776 const LADSPA_Descriptor *d;
777 pa_sample_spec ss;
778
779 pa_assert(control_values);
780 pa_assert(use_default);
781 pa_assert(u);
782 pa_assert_se(d = u->descriptor);
783
784 ss = u->ss;
785
786 /* Iterate over all ports. Check for every control port that 1) it
787 * supports default values if a default value is provided and 2) the
788 * provided value is within the limits specified in the plugin. */
789
790 for (p = 0; p < d->PortCount; p++) {
791 LADSPA_PortRangeHintDescriptor hint = d->PortRangeHints[p].HintDescriptor;
792
793 if (!LADSPA_IS_PORT_CONTROL(d->PortDescriptors[p]))
794 continue;
795
796 if (LADSPA_IS_PORT_OUTPUT(d->PortDescriptors[p]))
797 continue;
798
799 if (use_default[h]) {
800 /* User wants to use default value. Check if the plugin
801 * provides it. */
802 if (!LADSPA_IS_HINT_HAS_DEFAULT(hint)) {
803 pa_log_warn("Control port value left empty but plugin defines no default.");
804 return -1;
805 }
806 }
807 else {
808 /* Check if the user-provided value is within the bounds. */
809 LADSPA_Data lower = d->PortRangeHints[p].LowerBound;
810 LADSPA_Data upper = d->PortRangeHints[p].UpperBound;
811
812 if (LADSPA_IS_HINT_SAMPLE_RATE(hint)) {
813 upper *= (LADSPA_Data) ss.rate;
814 lower *= (LADSPA_Data) ss.rate;
815 }
816
817 if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint)) {
818 if (control_values[h] > upper) {
819 pa_log_warn("Control value %lu over upper bound: %f (upper bound: %f)", h, control_values[h], upper);
820 return -1;
821 }
822 }
823 if (LADSPA_IS_HINT_BOUNDED_BELOW(hint)) {
824 if (control_values[h] < lower) {
825 pa_log_warn("Control value %lu below lower bound: %f (lower bound: %f)", h, control_values[h], lower);
826 return -1;
827 }
828 }
829 }
830
831 h++;
832 }
833
834 return 0;
835 }
836
837 static int write_control_parameters(struct userdata *u, double *control_values, bool *use_default) {
838 unsigned long p = 0, h = 0, c;
839 const LADSPA_Descriptor *d;
840 pa_sample_spec ss;
841
842 pa_assert(control_values);
843 pa_assert(use_default);
844 pa_assert(u);
845 pa_assert_se(d = u->descriptor);
846
847 ss = u->ss;
848
849 if (validate_control_parameters(u, control_values, use_default) < 0)
850 return -1;
851
852 /* p iterates over all ports, h is the control port iterator */
853
854 for (p = 0; p < d->PortCount; p++) {
855 LADSPA_PortRangeHintDescriptor hint = d->PortRangeHints[p].HintDescriptor;
856
857 if (!LADSPA_IS_PORT_CONTROL(d->PortDescriptors[p]))
858 continue;
859
860 if (LADSPA_IS_PORT_OUTPUT(d->PortDescriptors[p])) {
861 for (c = 0; c < (u->channels / u->max_ladspaport_count); c++)
862 d->connect_port(u->handle[c], p, &u->control_out);
863 continue;
864 }
865
866 if (use_default[h]) {
867
868 LADSPA_Data lower, upper;
869
870 lower = d->PortRangeHints[p].LowerBound;
871 upper = d->PortRangeHints[p].UpperBound;
872
873 if (LADSPA_IS_HINT_SAMPLE_RATE(hint)) {
874 lower *= (LADSPA_Data) ss.rate;
875 upper *= (LADSPA_Data) ss.rate;
876 }
877
878 switch (hint & LADSPA_HINT_DEFAULT_MASK) {
879
880 case LADSPA_HINT_DEFAULT_MINIMUM:
881 u->control[h] = lower;
882 break;
883
884 case LADSPA_HINT_DEFAULT_MAXIMUM:
885 u->control[h] = upper;
886 break;
887
888 case LADSPA_HINT_DEFAULT_LOW:
889 if (LADSPA_IS_HINT_LOGARITHMIC(hint))
890 u->control[h] = (LADSPA_Data) exp(log(lower) * 0.75 + log(upper) * 0.25);
891 else
892 u->control[h] = (LADSPA_Data) (lower * 0.75 + upper * 0.25);
893 break;
894
895 case LADSPA_HINT_DEFAULT_MIDDLE:
896 if (LADSPA_IS_HINT_LOGARITHMIC(hint))
897 u->control[h] = (LADSPA_Data) exp(log(lower) * 0.5 + log(upper) * 0.5);
898 else
899 u->control[h] = (LADSPA_Data) (lower * 0.5 + upper * 0.5);
900 break;
901
902 case LADSPA_HINT_DEFAULT_HIGH:
903 if (LADSPA_IS_HINT_LOGARITHMIC(hint))
904 u->control[h] = (LADSPA_Data) exp(log(lower) * 0.25 + log(upper) * 0.75);
905 else
906 u->control[h] = (LADSPA_Data) (lower * 0.25 + upper * 0.75);
907 break;
908
909 case LADSPA_HINT_DEFAULT_0:
910 u->control[h] = 0;
911 break;
912
913 case LADSPA_HINT_DEFAULT_1:
914 u->control[h] = 1;
915 break;
916
917 case LADSPA_HINT_DEFAULT_100:
918 u->control[h] = 100;
919 break;
920
921 case LADSPA_HINT_DEFAULT_440:
922 u->control[h] = 440;
923 break;
924
925 default:
926 pa_assert_not_reached();
927 }
928 }
929 else {
930 if (LADSPA_IS_HINT_INTEGER(hint)) {
931 u->control[h] = roundf(control_values[h]);
932 }
933 else {
934 u->control[h] = control_values[h];
935 }
936 }
937
938 h++;
939 }
940
941 /* set the use_default array to the user data */
942 memcpy(u->use_default, use_default, u->n_control * sizeof(u->use_default[0]));
943
944 return 0;
945 }
946
947 int pa__init(pa_module*m) {
948 struct userdata *u;
949 pa_sample_spec ss;
950 pa_channel_map map;
951 pa_modargs *ma;
952 char *t;
953 pa_sink *master;
954 pa_sink_input_new_data sink_input_data;
955 pa_sink_new_data sink_data;
956 const char *plugin, *label, *input_ladspaport_map, *output_ladspaport_map;
957 LADSPA_Descriptor_Function descriptor_func;
958 unsigned long input_ladspaport[PA_CHANNELS_MAX], output_ladspaport[PA_CHANNELS_MAX];
959 const char *e, *cdata;
960 const LADSPA_Descriptor *d;
961 unsigned long p, h, j, n_control, c;
962
963 pa_assert(m);
964
965 pa_assert_cc(sizeof(LADSPA_Data) == sizeof(float));
966
967 if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
968 pa_log("Failed to parse module arguments.");
969 goto fail;
970 }
971
972 if (!(master = pa_namereg_get(m->core, pa_modargs_get_value(ma, "master", NULL), PA_NAMEREG_SINK))) {
973 pa_log("Master sink not found");
974 goto fail;
975 }
976
977 ss = master->sample_spec;
978 ss.format = PA_SAMPLE_FLOAT32;
979 map = master->channel_map;
980 if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
981 pa_log("Invalid sample format specification or channel map");
982 goto fail;
983 }
984
985 if (!(plugin = pa_modargs_get_value(ma, "plugin", NULL))) {
986 pa_log("Missing LADSPA plugin name");
987 goto fail;
988 }
989
990 if (!(label = pa_modargs_get_value(ma, "label", NULL))) {
991 pa_log("Missing LADSPA plugin label");
992 goto fail;
993 }
994
995 if (!(input_ladspaport_map = pa_modargs_get_value(ma, "input_ladspaport_map", NULL)))
996 pa_log_debug("Using default input ladspa port mapping");
997
998 if (!(output_ladspaport_map = pa_modargs_get_value(ma, "output_ladspaport_map", NULL)))
999 pa_log_debug("Using default output ladspa port mapping");
1000
1001 cdata = pa_modargs_get_value(ma, "control", NULL);
1002
1003 u = pa_xnew0(struct userdata, 1);
1004 u->module = m;
1005 m->userdata = u;
1006 u->memblockq = pa_memblockq_new("module-ladspa-sink memblockq", 0, MEMBLOCKQ_MAXLENGTH, 0, &ss, 1, 1, 0, NULL);
1007 u->max_ladspaport_count = 1; /*to avoid division by zero etc. in pa__done when failing before this value has been set*/
1008 u->channels = 0;
1009 u->input = NULL;
1010 u->output = NULL;
1011 u->ss = ss;
1012
1013 if (!(e = getenv("LADSPA_PATH")))
1014 e = LADSPA_PATH;
1015
1016 /* FIXME: This is not exactly thread safe */
1017 t = pa_xstrdup(lt_dlgetsearchpath());
1018 lt_dlsetsearchpath(e);
1019 m->dl = lt_dlopenext(plugin);
1020 lt_dlsetsearchpath(t);
1021 pa_xfree(t);
1022
1023 if (!m->dl) {
1024 pa_log("Failed to load LADSPA plugin: %s", lt_dlerror());
1025 goto fail;
1026 }
1027
1028 if (!(descriptor_func = (LADSPA_Descriptor_Function) pa_load_sym(m->dl, NULL, "ladspa_descriptor"))) {
1029 pa_log("LADSPA module lacks ladspa_descriptor() symbol.");
1030 goto fail;
1031 }
1032
1033 for (j = 0;; j++) {
1034
1035 if (!(d = descriptor_func(j))) {
1036 pa_log("Failed to find plugin label '%s' in plugin '%s'.", label, plugin);
1037 goto fail;
1038 }
1039
1040 if (pa_streq(d->Label, label))
1041 break;
1042 }
1043
1044 u->descriptor = d;
1045
1046 pa_log_debug("Module: %s", plugin);
1047 pa_log_debug("Label: %s", d->Label);
1048 pa_log_debug("Unique ID: %lu", d->UniqueID);
1049 pa_log_debug("Name: %s", d->Name);
1050 pa_log_debug("Maker: %s", d->Maker);
1051 pa_log_debug("Copyright: %s", d->Copyright);
1052
1053 n_control = 0;
1054 u->channels = ss.channels;
1055
1056 /*
1057 * Enumerate ladspa ports
1058 * Default mapping is in order given by the plugin
1059 */
1060 for (p = 0; p < d->PortCount; p++) {
1061 if (LADSPA_IS_PORT_AUDIO(d->PortDescriptors[p])) {
1062 if (LADSPA_IS_PORT_INPUT(d->PortDescriptors[p])) {
1063 pa_log_debug("Port %lu is input: %s", p, d->PortNames[p]);
1064 input_ladspaport[u->input_count] = p;
1065 u->input_count++;
1066 } else if (LADSPA_IS_PORT_OUTPUT(d->PortDescriptors[p])) {
1067 pa_log_debug("Port %lu is output: %s", p, d->PortNames[p]);
1068 output_ladspaport[u->output_count] = p;
1069 u->output_count++;
1070 }
1071 } else if (LADSPA_IS_PORT_CONTROL(d->PortDescriptors[p]) && LADSPA_IS_PORT_INPUT(d->PortDescriptors[p])) {
1072 pa_log_debug("Port %lu is control: %s", p, d->PortNames[p]);
1073 n_control++;
1074 } else
1075 pa_log_debug("Ignored port %s", d->PortNames[p]);
1076 /* XXX: Has anyone ever seen an in-place plugin with non-equal number of input and output ports? */
1077 /* Could be if the plugin is for up-mixing stereo to 5.1 channels */
1078 /* Or if the plugin is down-mixing 5.1 to two channel stereo or binaural encoded signal */
1079 if (u->input_count > u->max_ladspaport_count)
1080 u->max_ladspaport_count = u->input_count;
1081 else
1082 u->max_ladspaport_count = u->output_count;
1083 }
1084
1085 if (u->channels % u->max_ladspaport_count) {
1086 pa_log("Cannot handle non-integral number of plugins required for given number of channels");
1087 goto fail;
1088 }
1089
1090 pa_log_debug("Will run %lu plugin instances", u->channels / u->max_ladspaport_count);
1091
1092 /* Parse data for input ladspa port map */
1093 if (input_ladspaport_map) {
1094 const char *state = NULL;
1095 char *pname;
1096 c = 0;
1097 while ((pname = pa_split(input_ladspaport_map, ",", &state))) {
1098 if (c == u->input_count) {
1099 pa_log("Too many ports in input ladspa port map");
1100 pa_xfree(pname);
1101 goto fail;
1102 }
1103
1104 for (p = 0; p < d->PortCount; p++) {
1105 if (pa_streq(d->PortNames[p], pname)) {
1106 if (LADSPA_IS_PORT_AUDIO(d->PortDescriptors[p]) && LADSPA_IS_PORT_INPUT(d->PortDescriptors[p])) {
1107 input_ladspaport[c] = p;
1108 } else {
1109 pa_log("Port %s is not an audio input ladspa port", pname);
1110 pa_xfree(pname);
1111 goto fail;
1112 }
1113 }
1114 }
1115 c++;
1116 pa_xfree(pname);
1117 }
1118 }
1119
1120 /* Parse data for output port map */
1121 if (output_ladspaport_map) {
1122 const char *state = NULL;
1123 char *pname;
1124 c = 0;
1125 while ((pname = pa_split(output_ladspaport_map, ",", &state))) {
1126 if (c == u->output_count) {
1127 pa_log("Too many ports in output ladspa port map");
1128 pa_xfree(pname);
1129 goto fail;
1130 }
1131 for (p = 0; p < d->PortCount; p++) {
1132 if (pa_streq(d->PortNames[p], pname)) {
1133 if (LADSPA_IS_PORT_AUDIO(d->PortDescriptors[p]) && LADSPA_IS_PORT_OUTPUT(d->PortDescriptors[p])) {
1134 output_ladspaport[c] = p;
1135 } else {
1136 pa_log("Port %s is not an output ladspa port", pname);
1137 pa_xfree(pname);
1138 goto fail;
1139 }
1140 }
1141 }
1142 c++;
1143 pa_xfree(pname);
1144 }
1145 }
1146
1147 u->block_size = pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss);
1148
1149 /* Create buffers */
1150 if (LADSPA_IS_INPLACE_BROKEN(d->Properties)) {
1151 u->input = (LADSPA_Data**) pa_xnew(LADSPA_Data*, (unsigned) u->input_count);
1152 for (c = 0; c < u->input_count; c++)
1153 u->input[c] = (LADSPA_Data*) pa_xnew(uint8_t, (unsigned) u->block_size);
1154 u->output = (LADSPA_Data**) pa_xnew(LADSPA_Data*, (unsigned) u->output_count);
1155 for (c = 0; c < u->output_count; c++)
1156 u->output[c] = (LADSPA_Data*) pa_xnew(uint8_t, (unsigned) u->block_size);
1157 } else {
1158 u->input = (LADSPA_Data**) pa_xnew(LADSPA_Data*, (unsigned) u->max_ladspaport_count);
1159 for (c = 0; c < u->max_ladspaport_count; c++)
1160 u->input[c] = (LADSPA_Data*) pa_xnew(uint8_t, (unsigned) u->block_size);
1161 u->output = u->input;
1162 }
1163 /* Initialize plugin instances */
1164 for (h = 0; h < (u->channels / u->max_ladspaport_count); h++) {
1165 if (!(u->handle[h] = d->instantiate(d, ss.rate))) {
1166 pa_log("Failed to instantiate plugin %s with label %s", plugin, d->Label);
1167 goto fail;
1168 }
1169
1170 for (c = 0; c < u->input_count; c++)
1171 d->connect_port(u->handle[h], input_ladspaport[c], u->input[c]);
1172 for (c = 0; c < u->output_count; c++)
1173 d->connect_port(u->handle[h], output_ladspaport[c], u->output[c]);
1174 }
1175
1176 u->n_control = n_control;
1177
1178 if (u->n_control > 0) {
1179 double *control_values;
1180 bool *use_default;
1181
1182 /* temporary storage for parser */
1183 control_values = pa_xnew(double, (unsigned) u->n_control);
1184 use_default = pa_xnew(bool, (unsigned) u->n_control);
1185
1186 /* real storage */
1187 u->control = pa_xnew(LADSPA_Data, (unsigned) u->n_control);
1188 u->use_default = pa_xnew(bool, (unsigned) u->n_control);
1189
1190 if ((parse_control_parameters(u, cdata, control_values, use_default) < 0) ||
1191 (write_control_parameters(u, control_values, use_default) < 0)) {
1192 pa_xfree(control_values);
1193 pa_xfree(use_default);
1194
1195 pa_log("Failed to parse, validate or set control parameters");
1196
1197 goto fail;
1198 }
1199 connect_control_ports(u);
1200 pa_xfree(control_values);
1201 pa_xfree(use_default);
1202 }
1203
1204 if (d->activate)
1205 for (c = 0; c < (u->channels / u->max_ladspaport_count); c++)
1206 d->activate(u->handle[c]);
1207
1208 /* Create sink */
1209 pa_sink_new_data_init(&sink_data);
1210 sink_data.driver = __FILE__;
1211 sink_data.module = m;
1212 if (!(sink_data.name = pa_xstrdup(pa_modargs_get_value(ma, "sink_name", NULL))))
1213 sink_data.name = pa_sprintf_malloc("%s.ladspa", master->name);
1214 pa_sink_new_data_set_sample_spec(&sink_data, &ss);
1215 pa_sink_new_data_set_channel_map(&sink_data, &map);
1216 pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_MASTER_DEVICE, master->name);
1217 pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_CLASS, "filter");
1218 pa_proplist_sets(sink_data.proplist, "device.ladspa.module", plugin);
1219 pa_proplist_sets(sink_data.proplist, "device.ladspa.label", d->Label);
1220 pa_proplist_sets(sink_data.proplist, "device.ladspa.name", d->Name);
1221 pa_proplist_sets(sink_data.proplist, "device.ladspa.maker", d->Maker);
1222 pa_proplist_sets(sink_data.proplist, "device.ladspa.copyright", d->Copyright);
1223 pa_proplist_setf(sink_data.proplist, "device.ladspa.unique_id", "%lu", (unsigned long) d->UniqueID);
1224
1225 if (pa_modargs_get_proplist(ma, "sink_properties", sink_data.proplist, PA_UPDATE_REPLACE) < 0) {
1226 pa_log("Invalid properties");
1227 pa_sink_new_data_done(&sink_data);
1228 goto fail;
1229 }
1230
1231 if ((u->auto_desc = !pa_proplist_contains(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION))) {
1232 const char *z;
1233
1234 z = pa_proplist_gets(master->proplist, PA_PROP_DEVICE_DESCRIPTION);
1235 pa_proplist_setf(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "LADSPA Plugin %s on %s", d->Name, z ? z : master->name);
1236 }
1237
1238 u->sink = pa_sink_new(m->core, &sink_data,
1239 (master->flags & (PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY)) | PA_SINK_SHARE_VOLUME_WITH_MASTER);
1240 pa_sink_new_data_done(&sink_data);
1241
1242 if (!u->sink) {
1243 pa_log("Failed to create sink.");
1244 goto fail;
1245 }
1246
1247 u->sink->parent.process_msg = sink_process_msg_cb;
1248 u->sink->set_state = sink_set_state_cb;
1249 u->sink->update_requested_latency = sink_update_requested_latency_cb;
1250 u->sink->request_rewind = sink_request_rewind_cb;
1251 pa_sink_set_set_mute_callback(u->sink, sink_set_mute_cb);
1252 u->sink->userdata = u;
1253
1254 pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
1255
1256 /* Create sink input */
1257 pa_sink_input_new_data_init(&sink_input_data);
1258 sink_input_data.driver = __FILE__;
1259 sink_input_data.module = m;
1260 pa_sink_input_new_data_set_sink(&sink_input_data, master, false);
1261 sink_input_data.origin_sink = u->sink;
1262 pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_NAME, "LADSPA Stream");
1263 pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
1264 pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
1265 pa_sink_input_new_data_set_channel_map(&sink_input_data, &map);
1266
1267 pa_sink_input_new(&u->sink_input, m->core, &sink_input_data);
1268 pa_sink_input_new_data_done(&sink_input_data);
1269
1270 if (!u->sink_input)
1271 goto fail;
1272
1273 u->sink_input->pop = sink_input_pop_cb;
1274 u->sink_input->process_rewind = sink_input_process_rewind_cb;
1275 u->sink_input->update_max_rewind = sink_input_update_max_rewind_cb;
1276 u->sink_input->update_max_request = sink_input_update_max_request_cb;
1277 u->sink_input->update_sink_latency_range = sink_input_update_sink_latency_range_cb;
1278 u->sink_input->update_sink_fixed_latency = sink_input_update_sink_fixed_latency_cb;
1279 u->sink_input->kill = sink_input_kill_cb;
1280 u->sink_input->attach = sink_input_attach_cb;
1281 u->sink_input->detach = sink_input_detach_cb;
1282 u->sink_input->state_change = sink_input_state_change_cb;
1283 u->sink_input->moving = sink_input_moving_cb;
1284 u->sink_input->mute_changed = sink_input_mute_changed_cb;
1285 u->sink_input->userdata = u;
1286
1287 u->sink->input_to_master = u->sink_input;
1288
1289 pa_sink_put(u->sink);
1290 pa_sink_input_put(u->sink_input);
1291
1292 #ifdef HAVE_DBUS
1293 dbus_init(u);
1294 #endif
1295
1296 pa_modargs_free(ma);
1297
1298 return 0;
1299
1300 fail:
1301 if (ma)
1302 pa_modargs_free(ma);
1303
1304 pa__done(m);
1305
1306 return -1;
1307 }
1308
1309 int pa__get_n_used(pa_module *m) {
1310 struct userdata *u;
1311
1312 pa_assert(m);
1313 pa_assert_se(u = m->userdata);
1314
1315 return pa_sink_linked_by(u->sink);
1316 }
1317
1318 void pa__done(pa_module*m) {
1319 struct userdata *u;
1320 unsigned c;
1321
1322 pa_assert(m);
1323
1324 if (!(u = m->userdata))
1325 return;
1326
1327 /* See comments in sink_input_kill_cb() above regarding
1328 * destruction order! */
1329
1330 #ifdef HAVE_DBUS
1331 dbus_done(u);
1332 #endif
1333
1334 if (u->sink_input)
1335 pa_sink_input_unlink(u->sink_input);
1336
1337 if (u->sink)
1338 pa_sink_unlink(u->sink);
1339
1340 if (u->sink_input)
1341 pa_sink_input_unref(u->sink_input);
1342
1343 if (u->sink)
1344 pa_sink_unref(u->sink);
1345
1346 for (c = 0; c < (u->channels / u->max_ladspaport_count); c++) {
1347 if (u->handle[c]) {
1348 if (u->descriptor->deactivate)
1349 u->descriptor->deactivate(u->handle[c]);
1350 u->descriptor->cleanup(u->handle[c]);
1351 }
1352 }
1353
1354 if (u->output == u->input) {
1355 if (u->input != NULL) {
1356 for (c = 0; c < u->max_ladspaport_count; c++)
1357 pa_xfree(u->input[c]);
1358 pa_xfree(u->input);
1359 }
1360 } else {
1361 if (u->input != NULL) {
1362 for (c = 0; c < u->input_count; c++)
1363 pa_xfree(u->input[c]);
1364 pa_xfree(u->input);
1365 }
1366 if (u->output != NULL) {
1367 for (c = 0; c < u->output_count; c++)
1368 pa_xfree(u->output[c]);
1369 pa_xfree(u->output);
1370 }
1371 }
1372
1373 if (u->memblockq)
1374 pa_memblockq_free(u->memblockq);
1375
1376 pa_xfree(u->control);
1377 pa_xfree(u->use_default);
1378 pa_xfree(u);
1379 }