5 * Copyright (C) Robert Ham 2002, 2003 (node@users.sourceforge.net)
7 * Modification for MLT:
8 * Copyright (C) 2004 Ushodaya Enterprises Limited
9 * Author: Dan Dennedy <dan@dennedy.org>
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
31 #include "plugin_settings.h"
35 settings_set_to_default (settings_t * settings, guint32 sample_rate)
37 unsigned long control;
41 for (control = 0; control < settings->desc->control_port_count; control++)
43 value = plugin_desc_get_default_control_value (settings->desc, control, sample_rate);
45 for (copy = 0; copy < settings->copies; copy++)
47 settings->control_values[copy][control] = value;
50 settings->locks[control] = TRUE;
55 settings_new (plugin_desc_t * desc, unsigned long channels, guint32 sample_rate)
57 settings_t * settings;
58 unsigned long channel;
61 settings = g_malloc (sizeof (settings_t));
62 copies = plugin_desc_get_copies (desc, channels);
64 settings->sample_rate = sample_rate;
65 settings->desc = desc;
66 settings->copies = copies;
67 settings->channels = channels;
68 settings->lock_all = TRUE;
69 settings->enabled = FALSE;
70 settings->locks = NULL;
71 settings->control_values = NULL;
72 settings->wet_dry_enabled = FALSE;
73 settings->wet_dry_locked = TRUE;
75 /* control settings */
76 if (desc->control_port_count > 0)
80 settings->locks = g_malloc (sizeof (gboolean) * desc->control_port_count);
82 settings->control_values = g_malloc (sizeof (LADSPA_Data *) * copies);
83 for (copy = 0; copy < copies; copy++)
85 settings->control_values[copy] = g_malloc (sizeof (LADSPA_Data) * desc->control_port_count);
88 settings_set_to_default (settings, sample_rate);
91 /* wet/dry settings */
92 settings->wet_dry_values = g_malloc (sizeof (LADSPA_Data) * channels);
93 for (channel = 0; channel < channels; channel++)
94 settings->wet_dry_values[channel] = 1.0;
100 settings_dup (settings_t * other)
102 settings_t * settings;
103 plugin_desc_t * desc;
104 unsigned long channel;
106 settings = g_malloc (sizeof (settings_t));
108 settings->sample_rate = other->sample_rate;
109 settings->desc = other->desc;
110 settings->copies = settings_get_copies (other);
111 settings->channels = settings_get_channels (other);
112 settings->wet_dry_enabled = settings_get_wet_dry_enabled (other);
113 settings->wet_dry_locked = settings_get_wet_dry_locked (other);
114 settings->lock_all = settings_get_lock_all (other);
115 settings->enabled = settings_get_enabled (other);
116 settings->locks = NULL;
117 settings->control_values = NULL;
121 if (desc->control_port_count > 0)
124 unsigned long control;
126 settings->locks = g_malloc (sizeof (gboolean) * desc->control_port_count);
127 for (control = 0; control < desc->control_port_count; control++)
128 settings_set_lock (settings, control, settings_get_lock (other, control));
130 settings->control_values = g_malloc (sizeof (LADSPA_Data *) * settings->copies);
131 for (copy = 0; copy < settings->copies; copy++)
133 settings->control_values[copy] = g_malloc (sizeof (LADSPA_Data) * desc->control_port_count);
135 for (control = 0; control < desc->control_port_count; control++)
137 settings->control_values[copy][control] = settings_get_control_value (other, copy, control);
142 settings->wet_dry_values = g_malloc (sizeof (LADSPA_Data) * settings->channels);
143 for (channel = 0; channel < settings->channels; channel++)
144 settings->wet_dry_values[channel] = settings_get_wet_dry_value (other, channel);
150 settings_destroy (settings_t * settings)
152 if (settings->desc->control_port_count > 0)
155 for (i = 0; i < settings->copies; i++)
156 g_free (settings->control_values[i]);
158 g_free (settings->control_values);
159 g_free (settings->locks);
162 g_free (settings->wet_dry_values);
168 settings_set_copies (settings_t * settings, guint copies)
172 unsigned long control;
174 if (copies <= settings->copies)
177 last_copy = settings->copies - 1;
179 settings->control_values = g_realloc (settings->control_values,
180 sizeof (LADSPA_Data *) * copies);
182 /* copy over the last settings to the new copies */
183 for (copy = settings->copies; copy < copies; copy++)
185 for (control = 0; control < settings->desc->control_port_count; control++)
187 settings->control_values[copy][control] =
188 settings->control_values[last_copy][control];
192 settings->copies = copies;
196 settings_set_channels (settings_t * settings, unsigned long channels)
198 unsigned long channel;
199 LADSPA_Data last_value;
201 if (channels <= settings->channels)
204 settings->wet_dry_values = g_realloc (settings->wet_dry_values, sizeof (LADSPA_Data) * channels);
206 last_value = settings->wet_dry_values[settings->channels - 1];
208 for (channel = settings->channels; channel < channels; channel++)
209 settings->wet_dry_values[channel] = last_value;
211 settings->channels = channels;
215 settings_set_sample_rate (settings_t * settings, guint32 sample_rate)
217 LADSPA_Data old_sample_rate;
218 LADSPA_Data new_sample_rate;
220 g_return_if_fail (settings != NULL);
222 if (settings->sample_rate == sample_rate)
225 if (settings->desc->control_port_count > 0)
227 unsigned long control;
230 new_sample_rate = (LADSPA_Data) sample_rate;
231 old_sample_rate = (LADSPA_Data) settings->sample_rate;
233 for (control = 0; control < settings->desc->control_port_count; control++)
235 for (copy = 0; copy < settings->copies; copy++)
237 if (LADSPA_IS_HINT_SAMPLE_RATE (settings->desc->port_range_hints[control].HintDescriptor))
239 settings->control_values[copy][control] =
240 (settings->control_values[copy][control] / old_sample_rate) * new_sample_rate;
246 settings->sample_rate = sample_rate;
250 settings_set_control_value (settings_t * settings, guint copy, unsigned long control_index, LADSPA_Data value)
252 g_return_if_fail (settings != NULL);
253 g_return_if_fail (control_index < settings->desc->control_port_count);
255 if (copy >= settings->copies)
256 settings_set_copies (settings, copy + 1);
258 settings->control_values[copy][control_index] = value;
262 settings_set_lock (settings_t * settings, unsigned long control_index, gboolean locked)
264 g_return_if_fail (settings != NULL);
265 g_return_if_fail (control_index < settings->desc->control_port_count);
267 settings->locks[control_index] = locked;
271 settings_set_lock_all (settings_t * settings, gboolean lock_all)
273 g_return_if_fail (settings != NULL);
275 settings->lock_all = lock_all;
279 settings_set_enabled (settings_t * settings, gboolean enabled)
281 g_return_if_fail (settings != NULL);
283 settings->enabled = enabled;
287 settings_set_wet_dry_enabled (settings_t * settings, gboolean enabled)
289 g_return_if_fail (settings != NULL);
291 settings->wet_dry_enabled = enabled;
295 settings_set_wet_dry_locked (settings_t * settings, gboolean locked)
297 g_return_if_fail (settings != NULL);
299 settings->wet_dry_locked = locked;
303 settings_set_wet_dry_value (settings_t * settings, unsigned long channel, LADSPA_Data value)
305 g_return_if_fail (settings != NULL);
307 if (channel >= settings->channels)
308 settings_set_channels (settings, channel + 1);
310 settings->wet_dry_values[channel] = value;
315 settings_get_control_value (settings_t * settings, guint copy, unsigned long control_index)
317 g_return_val_if_fail (settings != NULL, NAN);
318 g_return_val_if_fail (control_index < settings->desc->control_port_count, NAN);
320 if (copy >= settings->copies)
321 settings_set_copies (settings, copy - 1);
323 return settings->control_values[copy][control_index];
327 settings_get_lock (const settings_t * settings, unsigned long control_index)
329 g_return_val_if_fail (settings != NULL, FALSE);
331 return settings->locks[control_index];
335 settings_get_lock_all (const settings_t * settings)
337 g_return_val_if_fail (settings != NULL, FALSE);
339 return settings->lock_all;
343 settings_get_enabled (const settings_t * settings)
345 g_return_val_if_fail (settings != NULL, FALSE);
347 return settings->enabled;
351 settings_get_copies (const settings_t * settings)
353 g_return_val_if_fail (settings != NULL, 0);
355 return settings->copies;
360 settings_get_channels (const settings_t * settings)
362 g_return_val_if_fail (settings != NULL, 0);
364 return settings->channels;
368 settings_get_wet_dry_enabled (const settings_t * settings)
370 g_return_val_if_fail (settings != NULL, FALSE);
372 return settings->wet_dry_enabled;
376 settings_get_wet_dry_locked (const settings_t * settings)
378 g_return_val_if_fail (settings != NULL, FALSE);
380 return settings->wet_dry_locked;
384 settings_get_wet_dry_value (settings_t * settings, unsigned long channel)
386 g_return_val_if_fail (settings != NULL, NAN);
388 if (channel >= settings->channels)
389 settings_set_channels (settings, channel + 1);
391 return settings->wet_dry_values[channel];