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.
30 #include "plugin_settings.h"
34 settings_set_to_default (settings_t
* settings
, guint32 sample_rate
)
36 unsigned long control
;
40 for (control
= 0; control
< settings
->desc
->control_port_count
; control
++)
42 value
= plugin_desc_get_default_control_value (settings
->desc
, control
, sample_rate
);
44 for (copy
= 0; copy
< settings
->copies
; copy
++)
46 settings
->control_values
[copy
][control
] = value
;
49 settings
->locks
[control
] = TRUE
;
54 settings_new (plugin_desc_t
* desc
, unsigned long channels
, guint32 sample_rate
)
56 settings_t
* settings
;
57 unsigned long channel
;
60 settings
= g_malloc (sizeof (settings_t
));
61 copies
= plugin_desc_get_copies (desc
, channels
);
63 settings
->sample_rate
= sample_rate
;
64 settings
->desc
= desc
;
65 settings
->copies
= copies
;
66 settings
->channels
= channels
;
67 settings
->lock_all
= TRUE
;
68 settings
->enabled
= FALSE
;
69 settings
->locks
= NULL
;
70 settings
->control_values
= NULL
;
71 settings
->wet_dry_enabled
= FALSE
;
72 settings
->wet_dry_locked
= TRUE
;
74 /* control settings */
75 if (desc
->control_port_count
> 0)
79 settings
->locks
= g_malloc (sizeof (gboolean
) * desc
->control_port_count
);
81 settings
->control_values
= g_malloc (sizeof (LADSPA_Data
*) * copies
);
82 for (copy
= 0; copy
< copies
; copy
++)
84 settings
->control_values
[copy
] = g_malloc (sizeof (LADSPA_Data
) * desc
->control_port_count
);
87 settings_set_to_default (settings
, sample_rate
);
90 /* wet/dry settings */
91 settings
->wet_dry_values
= g_malloc (sizeof (LADSPA_Data
) * channels
);
92 for (channel
= 0; channel
< channels
; channel
++)
93 settings
->wet_dry_values
[channel
] = 1.0;
99 settings_dup (settings_t
* other
)
101 settings_t
* settings
;
102 plugin_desc_t
* desc
;
103 unsigned long channel
;
105 settings
= g_malloc (sizeof (settings_t
));
107 settings
->sample_rate
= other
->sample_rate
;
108 settings
->desc
= other
->desc
;
109 settings
->copies
= settings_get_copies (other
);
110 settings
->channels
= settings_get_channels (other
);
111 settings
->wet_dry_enabled
= settings_get_wet_dry_enabled (other
);
112 settings
->wet_dry_locked
= settings_get_wet_dry_locked (other
);
113 settings
->lock_all
= settings_get_lock_all (other
);
114 settings
->enabled
= settings_get_enabled (other
);
115 settings
->locks
= NULL
;
116 settings
->control_values
= NULL
;
120 if (desc
->control_port_count
> 0)
123 unsigned long control
;
125 settings
->locks
= g_malloc (sizeof (gboolean
) * desc
->control_port_count
);
126 for (control
= 0; control
< desc
->control_port_count
; control
++)
127 settings_set_lock (settings
, control
, settings_get_lock (other
, control
));
129 settings
->control_values
= g_malloc (sizeof (LADSPA_Data
*) * settings
->copies
);
130 for (copy
= 0; copy
< settings
->copies
; copy
++)
132 settings
->control_values
[copy
] = g_malloc (sizeof (LADSPA_Data
) * desc
->control_port_count
);
134 for (control
= 0; control
< desc
->control_port_count
; control
++)
136 settings
->control_values
[copy
][control
] = settings_get_control_value (other
, copy
, control
);
141 settings
->wet_dry_values
= g_malloc (sizeof (LADSPA_Data
) * settings
->channels
);
142 for (channel
= 0; channel
< settings
->channels
; channel
++)
143 settings
->wet_dry_values
[channel
] = settings_get_wet_dry_value (other
, channel
);
149 settings_destroy (settings_t
* settings
)
151 if (settings
->desc
->control_port_count
> 0)
154 for (i
= 0; i
< settings
->copies
; i
++)
155 g_free (settings
->control_values
[i
]);
157 g_free (settings
->control_values
);
158 g_free (settings
->locks
);
161 g_free (settings
->wet_dry_values
);
167 settings_set_copies (settings_t
* settings
, guint copies
)
171 unsigned long control
;
173 if (copies
<= settings
->copies
)
176 last_copy
= settings
->copies
- 1;
178 settings
->control_values
= g_realloc (settings
->control_values
,
179 sizeof (LADSPA_Data
*) * copies
);
181 /* copy over the last settings to the new copies */
182 for (copy
= settings
->copies
; copy
< copies
; copy
++)
184 for (control
= 0; control
< settings
->desc
->control_port_count
; control
++)
186 settings
->control_values
[copy
][control
] =
187 settings
->control_values
[last_copy
][control
];
191 settings
->copies
= copies
;
195 settings_set_channels (settings_t
* settings
, unsigned long channels
)
197 unsigned long channel
;
198 LADSPA_Data last_value
;
200 if (channels
<= settings
->channels
)
203 settings
->wet_dry_values
= g_realloc (settings
->wet_dry_values
, sizeof (LADSPA_Data
) * channels
);
205 last_value
= settings
->wet_dry_values
[settings
->channels
- 1];
207 for (channel
= settings
->channels
; channel
< channels
; channel
++)
208 settings
->wet_dry_values
[channel
] = last_value
;
210 settings
->channels
= channels
;
214 settings_set_sample_rate (settings_t
* settings
, guint32 sample_rate
)
216 LADSPA_Data old_sample_rate
;
217 LADSPA_Data new_sample_rate
;
219 g_return_if_fail (settings
!= NULL
);
221 if (settings
->sample_rate
== sample_rate
)
224 if (settings
->desc
->control_port_count
> 0)
226 unsigned long control
;
229 new_sample_rate
= (LADSPA_Data
) sample_rate
;
230 old_sample_rate
= (LADSPA_Data
) settings
->sample_rate
;
232 for (control
= 0; control
< settings
->desc
->control_port_count
; control
++)
234 for (copy
= 0; copy
< settings
->copies
; copy
++)
236 if (LADSPA_IS_HINT_SAMPLE_RATE (settings
->desc
->port_range_hints
[control
].HintDescriptor
))
238 settings
->control_values
[copy
][control
] =
239 (settings
->control_values
[copy
][control
] / old_sample_rate
) * new_sample_rate
;
245 settings
->sample_rate
= sample_rate
;
249 settings_set_control_value (settings_t
* settings
, guint copy
, unsigned long control_index
, LADSPA_Data value
)
251 g_return_if_fail (settings
!= NULL
);
252 g_return_if_fail (control_index
< settings
->desc
->control_port_count
);
254 if (copy
>= settings
->copies
)
255 settings_set_copies (settings
, copy
+ 1);
257 settings
->control_values
[copy
][control_index
] = value
;
261 settings_set_lock (settings_t
* settings
, unsigned long control_index
, gboolean locked
)
263 g_return_if_fail (settings
!= NULL
);
264 g_return_if_fail (control_index
< settings
->desc
->control_port_count
);
266 settings
->locks
[control_index
] = locked
;
270 settings_set_lock_all (settings_t
* settings
, gboolean lock_all
)
272 g_return_if_fail (settings
!= NULL
);
274 settings
->lock_all
= lock_all
;
278 settings_set_enabled (settings_t
* settings
, gboolean enabled
)
280 g_return_if_fail (settings
!= NULL
);
282 settings
->enabled
= enabled
;
286 settings_set_wet_dry_enabled (settings_t
* settings
, gboolean enabled
)
288 g_return_if_fail (settings
!= NULL
);
290 settings
->wet_dry_enabled
= enabled
;
294 settings_set_wet_dry_locked (settings_t
* settings
, gboolean locked
)
296 g_return_if_fail (settings
!= NULL
);
298 settings
->wet_dry_locked
= locked
;
302 settings_set_wet_dry_value (settings_t
* settings
, unsigned long channel
, LADSPA_Data value
)
304 g_return_if_fail (settings
!= NULL
);
306 if (channel
>= settings
->channels
)
307 settings_set_channels (settings
, channel
+ 1);
309 settings
->wet_dry_values
[channel
] = value
;
314 settings_get_control_value (settings_t
* settings
, guint copy
, unsigned long control_index
)
316 g_return_val_if_fail (settings
!= NULL
, NAN
);
317 g_return_val_if_fail (control_index
< settings
->desc
->control_port_count
, NAN
);
319 if (copy
>= settings
->copies
)
320 settings_set_copies (settings
, copy
- 1);
322 return settings
->control_values
[copy
][control_index
];
326 settings_get_lock (const settings_t
* settings
, unsigned long control_index
)
328 g_return_val_if_fail (settings
!= NULL
, FALSE
);
330 return settings
->locks
[control_index
];
334 settings_get_lock_all (const settings_t
* settings
)
336 g_return_val_if_fail (settings
!= NULL
, FALSE
);
338 return settings
->lock_all
;
342 settings_get_enabled (const settings_t
* settings
)
344 g_return_val_if_fail (settings
!= NULL
, FALSE
);
346 return settings
->enabled
;
350 settings_get_copies (const settings_t
* settings
)
352 g_return_val_if_fail (settings
!= NULL
, 0);
354 return settings
->copies
;
359 settings_get_channels (const settings_t
* settings
)
361 g_return_val_if_fail (settings
!= NULL
, 0);
363 return settings
->channels
;
367 settings_get_wet_dry_enabled (const settings_t
* settings
)
369 g_return_val_if_fail (settings
!= NULL
, FALSE
);
371 return settings
->wet_dry_enabled
;
375 settings_get_wet_dry_locked (const settings_t
* settings
)
377 g_return_val_if_fail (settings
!= NULL
, FALSE
);
379 return settings
->wet_dry_locked
;
383 settings_get_wet_dry_value (settings_t
* settings
, unsigned long channel
)
385 g_return_val_if_fail (settings
!= NULL
, NAN
);
387 if (channel
>= settings
->channels
)
388 settings_set_channels (settings
, channel
+ 1);
390 return settings
->wet_dry_values
[channel
];