libweed 2.0.0
weed-plugin-utils.h
Go to the documentation of this file.
1/* WEED is free software; you can redistribute it and/or
2 modify it under the terms of the GNU Lesser General Public
3 License as published by the Free Software Foundation; either
4 version 3 of the License, or (at your option) any later version.
5
6 Weed is distributed in the hope that it will be useful,
7 but WITHOUT ANY WARRANTY; without even the implied warranty of
8 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9 Lesser General Public License for more details.
10
11 You should have received a copy of the GNU Lesser General Public
12 License along with this source code; if not, write to the Free Software
13 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
14
15 Weed is developed by:
16 Gabriel "Salsaman" Finch - http://lives-video.com
17
18 partly based on LiViDO, which is developed by:
19 Niels Elburg - http://veejay.sf.net
20 Denis "Jaromil" Rojo - http://freej.dyne.org
21 Tom Schouten - http://zwizwa.fartit.com
22 Andraz Tori - http://cvs.cinelerra.org
23
24 reviewed with suggestions and contributions from:
25 Silvano "Kysucix" Galliani - http://freej.dyne.org
26 Kentaro Fukuchi - http://megaui.net/fukuchi
27 Jun Iio - http://www.malib.net
28 Carlo Prelz - http://www2.fluido.as:8080/
29*/
30
31/* (C) G. Finch, 2005 - 2019 */
32
33#ifdef __WEED_HOST__
34#error This header is intended only for Weed plugins
35#endif
36
37#ifndef __WEED_PLUGIN__
38#error weed-plugin.h should be included first
39#endif
40
41#ifndef __WEED_PLUGIN_UTILS_H__
42#define __WEED_PLUGIN_UTILS_H__
43
44#ifdef __cplusplus
45extern "C"
46{
47#endif /* __cplusplus */
48
49#ifndef NEED_LOCAL_WEED
50#include <weed/weed.h>
51#include <weed/weed-palettes.h>
52#include <weed/weed-effects.h>
53#else
54#include "weed.h"
55#include "weed-palettes.h"
56#include "weed-effects.h"
57#endif
58
59/* Define EXPORTED for any platform */
60#if defined _WIN32 || defined __CYGWIN__ || defined IS_MINGW
61#ifdef WIN_EXPORT
62#ifdef __GNUC__
63#define EXPORTED __attribute__ ((dllexport))
64#else
65#define EXPORTED __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
66#endif
67#else // WIN_WEX
68#ifdef __GNUC__
69#define EXPORTED __attribute__ ((dllimport))
70#else
71#define EXPORTED __declspec(dllimport) // Note: actually gcc seems to also supports this syntax.
72#endif
73#endif // WINEX
74#define NOT_EXPORTED
75#else // MING
76
77#if __GNUC__ >= 4
78#define EXPORTED __attribute__ ((visibility ("default")))
79#define NOT_EXPORTED __attribute__ ((visibility ("hidden")))
80#else
81#define EXPORTED
82#define NOT_EXPORTED
83#endif
84#endif
85
86#define ALLOW_UNUSED
87#define FN_DECL static
88
89// functions for weed_setup()
90
92 int32_t weed_abi_min_version, int32_t weed_abi_max_version,
93 int32_t filter_api_min_version, int32_t weed_filter_api_max_version) ALLOW_UNUSED;
94
96
98
99FN_DECL weed_plant_t *weed_filter_class_init(const char *name, const char *author, int version, int flags,
100 int *palette_list, weed_init_f init_func,
101 weed_process_f process_func, weed_deinit_f deinit_func,
102 weed_plant_t **in_chantmpls, weed_plant_t **out_chantmpls,
103 weed_plant_t **in_paramtmpls, weed_plant_t **out_paramtmpls) ALLOW_UNUSED;
104
106
107// in params
108FN_DECL weed_plant_t *weed_text_init(const char *name, const char *label, const char *def) ALLOW_UNUSED;
109FN_DECL weed_plant_t *weed_float_init(const char *name, const char *label, double def, double min, double max) ALLOW_UNUSED;
110FN_DECL weed_plant_t *weed_switch_init(const char *name, const char *label, int def) ALLOW_UNUSED;
111FN_DECL weed_plant_t *weed_integer_init(const char *name, const char *label, int def, int min, int max) ALLOW_UNUSED;
112FN_DECL weed_plant_t *weed_colRGBd_init(const char *name, const char *label, double red, double green,
113 double blue) ALLOW_UNUSED;
114FN_DECL weed_plant_t *weed_colRGBi_init(const char *name, const char *label, int red, int green, int blue) ALLOW_UNUSED;
115FN_DECL weed_plant_t *weed_radio_init(const char *name, const char *label, int def, int group) ALLOW_UNUSED;
116FN_DECL weed_plant_t *weed_string_list_init(const char *name, const char *label, int def, const char **const list) ALLOW_UNUSED;
117
118// out params
119FN_DECL weed_plant_t *weed_out_param_colRGBd_init(const char *name, double red, double green, double blue) ALLOW_UNUSED;
120FN_DECL weed_plant_t *weed_out_param_colRGBi_init(const char *name, int red, int green, int blue) ALLOW_UNUSED;
121FN_DECL weed_plant_t *weed_out_param_text_init(const char *name, const char *def) ALLOW_UNUSED;
123FN_DECL weed_plant_t *weed_out_param_float_init(const char *name, double def, double min, double max) ALLOW_UNUSED;
126FN_DECL weed_plant_t *weed_out_param_integer_init(const char *name, int def, int min, int max) ALLOW_UNUSED;
127
128// value setters
134FN_DECL void weed_filter_set_name(weed_plant_t *filter, const char *name);
135FN_DECL void weed_chantmpl_set_name(weed_plant_t *chantmpl, const char *name);
136FN_DECL void weed_paramtmpl_set_name(weed_plant_t *paramtmpl, const char *name);
138//FN_DECL void weed_chantmpl_set_palette_list()
139
140// value getters
141
142// plugin_info
145
146// host info
148//FN_DECL char *weed_get_host_name(weed_plant_t *host_info);
149//FN_DECL char *weed_get_host_version(weed_plant_t *host_info);
153//FN_DECL char **weed_get_host_layout_schemes(weed_plant_t *host_info);
154
155// filter_class
159
160// param_tmpl
163
164// chan tmpl
166
167// inst
175
176// channel
183
184#ifdef NEED_AUDIO
185FN_DECL weed_plant_t *weed_audio_channel_template_init(const char *name, int flags);
186FN_DECL int weed_channel_get_audio_rate(weed_plant_t *channel);
187FN_DECL int weed_channel_get_naudchans(weed_plant_t *channel);
188FN_DECL int weed_channel_get_audio_length(weed_plant_t *channel);
189FN_DECL void weed_paramtmpl_declare_volume_master(weed_plant_t *pt);
190#ifdef __WEED_UTILS_H__
191FN_DECL float **weed_channel_get_audio_data(weed_plant_t *channel, int *naudchans);
192#endif
193#endif
194
196
197// params
200
201// param values
207
208#ifdef __WEED_UTILS_H__
209FN_DECL int *weed_param_get_array_int(weed_plant_t *param, int *nvalues);
210FN_DECL int *weed_param_get_array_boolean(weed_plant_t *param, int *nvalues);
211FN_DECL double *weed_param_get_array_double(weed_plant_t *param, int *nvalues);
212FN_DECL int64_t *weed_param_get_array_int64(weed_plant_t *param, int *nvalues);
213FN_DECL char **weed_param_get_array_string(weed_plant_t *param, int *mvalues);
214FN_DECL weed_plant_t **weed_get_in_channels(weed_plant_t *inst, int *nchans);
215FN_DECL weed_plant_t **weed_get_out_channels(weed_plant_t *inst, int *nchans);
216FN_DECL weed_plant_t **weed_get_in_params(weed_plant_t *inst, int *nparams);
217FN_DECL weed_plant_t **weed_get_out_params(weed_plant_t *inst, int *nparams);
218FN_DECL int *weed_channel_get_rowstrides(weed_plant_t *channel, int *nplanes);
219FN_DECL void **weed_channel_get_pixel_data_planar(weed_plant_t *channel, int *nplanes);
220#endif
221
222/* Threading */
226
227// general utils
229
230#ifndef ABS
231#define ABS(a) (((a) < 0) ? -(a) : (a))
232#endif
233
234// functions for process_func()
235
236#ifdef NEED_RANDOM
237FN_DECL uint64_t fastrand(uint64_t notused);
238FN_DECL double fastrand_dbl(double range);
239FN_DECL uint32_t fastrand_int(uint32_t range);
240#endif
241
242#ifdef NEED_ALPHA_SORT // for wrappers, use this to sort filters alphabetically
243typedef struct dlink_list dlink_list_t;
244FN_DECL dlink_list_t *add_to_list_sorted(dlink_list_t *list, weed_plant_t *filter, const char *name);
245FN_DECL int add_filters_from_list(weed_plant_t *plugin_info, dlink_list_t *list);
246#endif
247
248#ifdef NEED_PALETTE_UTILS
249#define ALL_RGB_PALETTES {WEED_PALETTE_RGB24, WEED_PALETTE_BGR24, WEED_PALETTE_RGBA32, WEED_PALETTE_BGRA32, \
250 WEED_PALETTE_ARGB32, WEED_PALETTE_END}
251
252#define ALL_24BIT_PALETTES {WEED_PALETTE_RGB24, WEED_PALETTE_BGR24, WEED_PALETTE_YUV888, WEED_PALETTE_END}
253
254#define ALL_32BIT_PALETTES {WEED_PALETTE_RGBA32, WEED_PALETTE_BGRA32, WEED_PALETTE_ARGB32, WEED_PALETTE_YUVA8888,\
255 WEED_PALETTE_END}
256
257#define ALL_ALPHA_PALETTES {WEED_PALETTE_AFLOAT, WEED_PALETTE_A8, WEED_PALETTE_A1, WEED_PALETTE_END}
258
259/*( omits WEED_PALETTE_YUV411, WEED_PALETTE_UYVY, WEED_PALETTE_YUYV, WEED_PALETTE_RGB_FLOAT
260 and WEED_PALETTE_RGBA_FLOAT as well as the alpha palettes
261 WEED_PALETTE_A1, WEED_PALETTE_A8 and WEED_PALETTE_AFLOAT also WEED_PALETTE_ARGB32 so that alpha is always last*/
262
263#define ALL_PACKED_PALETTES {WEED_PALETTE_RGB24, WEED_PALETTE_BGR24, WEED_PALETTE_RGBA32, \
264 WEED_PALETTE_BGRA32, WEED_PALETTE_YUV888, WEED_PALETTE_YUVA8888, WEED_PALETTE_END}
265
266#define ALL_PACKED_PALETTES_PLUS {WEED_PALETTE_RGB24, WEED_PALETTE_BGR24, WEED_PALETTE_RGBA32, \
267 WEED_PALETTE_BGRA32, WEED_PALETTE_ARGB32, WEED_PALETTE_YUV888, WEED_PALETTE_YUVA8888, WEED_PALETTE_UYVY, \
268 WEED_PALETTE_YUYV, WEED_PALETTE_END}
269
270#define ALL_PLANAR_PALETTES {WEED_PALETTE_YUV444P, WEED_PALETTE_YUVA4444P, WEED_PALETTE_YUV422P, \
271 WEED_PALETTE_YUV420P, WEED_PALETTE_YVU420P, WEED_PALETTE_END}
272
273/* only for packed palettes (for uyvy, yuyv, it's actually the macropixel size, but we'll skip that subtlety here)*/
274#define pixel_size(pal) ((pal == WEED_PALETTE_RGB24 || pal == WEED_PALETTE_BGR24 || pal == WEED_PALETTE_YUV888) ? 3 : \
275 (pal == WEED_PALETTE_RGBA32 || pal == WEED_PALETTE_BGRA32 || pal == WEED_PALETTE_ARGB32 || \
276 pal == WEED_PALETTE_YUVA8888 || pal == WEED_PALETTE_UYVY || pal == WEED_PALETTE_YUYV) ? 4 : 0)
277
278#define rgb_offset(pal) (pal == WEED_PALETTE_ARGB32 ? 1 : 0)
279
280FN_DECL int weed_palette_is_alpha(int pal);
281FN_DECL int weed_palette_is_rgb(int pal);
282FN_DECL int weed_palette_is_yuv(int pal);
283FN_DECL int weed_palette_get_nplanes(int pal);
284FN_DECL int weed_palette_is_valid(int pal);
285FN_DECL int weed_palette_is_float(int pal);
286FN_DECL int weed_palette_has_alpha_channel(int pal);
287FN_DECL double weed_palette_get_plane_ratio_horizontal(int pal, int plane);
288FN_DECL double weed_palette_get_plane_ratio_vertical(int pal, int plane);
289
290// set src to non-null to preserve the alpha channel (if applicable)
291// othwerwise alpha will be set to 255
292// yuv_clamping is ignored fo non-yuv palettes
293// only valid for non-planar (packed) palettes: RGB24, BGR24, RGBA32, BGRA32, ARGB32, UYVY8888, YUYV8888, YUV888, YUVA8888, and YUV411
294FN_DECL size_t blank_pixel(uint8_t *dst, int pal, int yuv_clamping, uint8_t *src);
295
296// If psrc is non-NULL then the alpha values from psrc will be copied to pdst.
297// otherwise alpha will be set to 255
298//
299// valid for: RGB24, BGR24, RGBA32, BGRA32, ARGB32, UYVY8888, YUYV8888, YUV888, YUVA8888, YUV411
300// YUVA4444p, YUV444p, YUV422p, YUV420p, YVU420p
301// if scanning vertically:
302// pdst[n], psrc[n] should be increased by rowstrides[n] after each call
303//
304// for YUV420 and YVU420: set uvcopy to WEED_TRUE only on even rows,
305// and increase pdst[1], pdst[2] only on the odd rows (pscr is ignored)
306//
307FN_DECL void blank_row(uint8_t **pdst, int width, int pal, int yuv_clamping, int uvcopy, uint8_t **psrc);
308FN_DECL void blank_frame(void **pdata, int width, int height, int *rowstrides, int pal, int yuv_clamping);
309#endif
310
311#ifdef NEED_PALETTE_CONVERSIONS
312/* palette conversions use lookup tables for efficiency */
313// calculate a (rough) luma valu for a pixel; works for any palette (for WEED_PALETTE_UYVY add 1 to *pixel)
314FN_DECL uint8_t calc_luma(uint8_t *pixel, int palette, int yuv_clamping);
315
316FN_DECL uint8_t y_unclamped_to_clamped(uint8_t y);
317FN_DECL uint8_t y_clamped_to_unclamped(uint8_t y);
318FN_DECL uint8_t uv_clamped_to_unclamped(uint8_t uv);
319
320/* pre multiply or un-pre-multiply alpha for a frame: if un is set to WEED_TRUE we un-pre-multiply, othewise pre-multiply */
321FN_DECL void alpha_premult(unsigned char *ptr, int width, int height, int rowstride, int pal, int un);
322#endif
323
324#ifdef NEED_FONT_UTILS
325
326#include <wchar.h>
327 FN_DECL void weed_parse_font_string(const char *fontstr, char **family, char **fstretch, char **fweight,
328 char **fstyle, int *size);
329#endif
330
331#ifdef __cplusplus
332
333#define WEED_SETUP_START(weed_api_version, filter_api_version) extern "C" { EXPORTED weed_plant_t *weed_setup(weed_bootstrap_f weed_boot) { \
334 weed_plant_t *plugin_info = weed_plugin_info_init(weed_boot, weed_api_version, weed_api_version, filter_api_version, filter_api_version); \
335 if (plugin_info == NULL) {return NULL;} {
336
337#define WEED_SETUP_START_MINMAX(weed_api_min_version, weed_api_max_version, filter_api_min_version, filter_api_max_version) extern "C" { EXPORTED weed_plant_t *weed_setup(weed_bootstrap_f weed_boot) { \
338 weed_plant_t *plugin_info = weed_plugin_info_init(weed_boot, weed_api_min_version, weed_api_max_version, filter_api_min_Version, filter_api_max_version); \
339 if (plugin_info == NULL) {return NULL;} {
340
341#define WEED_SETUP_END } return plugin_info;}}
342
343#define WEED_DESETUP_START extern "C" { EXPORTED void weed_desetup(void) {
344#define WEED_DESETUP_END }}
345
346#else
347
348#define WEED_SETUP_START(weed_api_version, filter_api_version) EXPORTED weed_plant_t *weed_setup(weed_bootstrap_f weed_boot) { \
349 weed_plant_t *plugin_info = weed_plugin_info_init(weed_boot, weed_api_version, weed_api_version, filter_api_version, filter_api_version); \
350 if (plugin_info == NULL) {return NULL;} {
351
352#define WEED_SETUP_START_MINMAX(weed_api_min_version, weed_api_max_version, filter_api_min_version, filter_api_max_version) EXPORTED weed_plant_t *weed_setup(weed_bootstrap_f weed_boot) { \
353 weed_plant_t *plugin_info = weed_plugin_info_init(weed_boot, weed_api_min_version, weed_api_max_version, filter_api_min_version, filter_api_max_version); \
354 if (plugin_info == NULL) {return NULL;} {
355
356#define WEED_SETUP_END } return plugin_info;}
357
358#define WEED_DESETUP_START EXPORTED void weed_desetup(void) {
359#define WEED_DESETUP_END }
360
361#endif
362
363#ifdef __cplusplus
364}
365#endif
366
367#endif
weed_error_t(* weed_process_f)(weed_plant_t *filter_instance, weed_timecode_t timestamp)
Definition: weed-effects.h:163
weed_error_t(* weed_init_f)(weed_plant_t *filter_instance)
Definition: weed-effects.h:164
weed_error_t(* weed_deinit_f)(weed_plant_t *filter_instance)
Definition: weed-effects.h:165
weed_plant_t *(* weed_bootstrap_f)(weed_default_getter_f *, int32_t plugin_weed_min_api_version, int32_t plugin_weed_max_api_version, int32_t plugin_filter_min_api_version, int32_t plugin_filter_max_api_version)
Definition: weed-effects.h:152
FN_DECL weed_plant_t * weed_paramtmpl_get_gui(weed_plant_t *paramt) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_colRGBd_init(const char *name, const char *label, double red, double green, double blue) ALLOW_UNUSED
FN_DECL int weed_filter_get_flags(weed_plant_t *filter)
FN_DECL double weed_param_get_value_double(weed_plant_t *param)
FN_DECL weed_plant_t * weed_param_get_template(weed_plant_t *param)
FN_DECL int weed_param_get_value_boolean(weed_plant_t *param)
FN_DECL weed_plant_t * weed_float_init(const char *name, const char *label, double def, double min, double max) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_text_init(const char *name, const char *label, const char *def) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_out_param_colRGBi_init(const char *name, int red, int green, int blue) ALLOW_UNUSED
FN_DECL void weed_paramtmpl_declare_transition(weed_plant_t *pt)
FN_DECL int is_big_endian(void)
FN_DECL int weed_param_get_value_int(weed_plant_t *param)
FN_DECL weed_plant_t * weed_out_param_float_init(const char *name, double def, double min, double max) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_out_param_text_init(const char *name, const char *def) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_plugin_info_init(weed_bootstrap_f weed_boot, int32_t weed_abi_min_version, int32_t weed_abi_max_version, int32_t filter_api_min_version, int32_t weed_filter_api_max_version) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_out_param_float_init_nominmax(const char *name, double def) ALLOW_UNUSED
FN_DECL int weed_host_supports_premultiplied_alpha(weed_plant_t *host_info)
FN_DECL int weed_channel_get_width(weed_plant_t *channel)
FN_DECL void weed_chantmpl_set_flags(weed_plant_t *chantmpl, int flags)
FN_DECL weed_plant_t * weed_get_out_param(weed_plant_t *inst, int idx)
FN_DECL int64_t weed_param_get_value_int64(weed_plant_t *param)
FN_DECL int weed_get_host_verbosity(weed_plant_t *host_info)
#define FN_DECL
Definition: weed-plugin-utils.h:87
FN_DECL void * weed_channel_get_pixel_data(weed_plant_t *channel)
FN_DECL void weed_plugin_info_add_filter_class(weed_plant_t *plugin_info, weed_plant_t *filter_class) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_out_param_integer_init_nominmax(const char *name, int def) ALLOW_UNUSED
FN_DECL int weed_channel_get_real_height(weed_plant_t *channel)
FN_DECL int weed_host_get_flags(weed_plant_t *host_info)
FN_DECL int weed_channel_get_offset(weed_plant_t *channel)
FN_DECL void weed_paramtmpl_set_flags(weed_plant_t *paramtmpl, int flags)
FN_DECL weed_plant_t * weed_filter_get_gui(weed_plant_t *filter) ALLOW_UNUSED
FN_DECL void weed_plugin_set_package_version(weed_plant_t *pi, int v)
FN_DECL void weed_filter_set_name(weed_plant_t *filter, const char *name)
FN_DECL weed_plant_t * weed_out_param_integer_init(const char *name, int def, int min, int max) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_get_in_channel(weed_plant_t *inst, int idx)
FN_DECL int weed_paramtmpl_get_flags(weed_plant_t *paramtmpl)
#define ALLOW_UNUSED
Definition: weed-plugin-utils.h:86
FN_DECL weed_plant_t * weed_switch_init(const char *name, const char *label, int def) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_get_in_param(weed_plant_t *inst, int idx)
FN_DECL weed_plant_t * weed_channel_template_init(const char *name, int flags) ALLOW_UNUSED
FN_DECL void weed_chantmpl_set_name(weed_plant_t *chantmpl, const char *name)
FN_DECL weed_plant_t * weed_string_list_init(const char *name, const char *label, int def, const char **const list) ALLOW_UNUSED
FN_DECL int weed_channel_is_disabled(weed_plant_t *channel)
FN_DECL int weed_channel_get_stride(weed_plant_t *channel)
FN_DECL weed_plant_t * weed_colRGBi_init(const char *name, const char *label, int red, int green, int blue) ALLOW_UNUSED
FN_DECL int weed_get_api_version(weed_plant_t *plugin_info) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_param_get_gui(weed_plant_t *param) ALLOW_UNUSED
FN_DECL weed_plant_t ** weed_clone_plants(weed_plant_t **plants) ALLOW_UNUSED
FN_DECL char * weed_param_get_value_string(weed_plant_t *param)
FN_DECL weed_plant_t * weed_out_param_switch_init(const char *name, int def) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_filter_class_init(const char *name, const char *author, int version, int flags, int *palette_list, weed_init_f init_func, weed_process_f process_func, weed_deinit_f deinit_func, weed_plant_t **in_chantmpls, weed_plant_t **out_chantmpls, weed_plant_t **in_paramtmpls, weed_plant_t **out_paramtmpls) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_get_out_channel(weed_plant_t *inst, int idx)
FN_DECL weed_plant_t * weed_get_host_info(weed_plant_t *plugin_info)
FN_DECL int weed_instance_get_flags(weed_plant_t *inst)
FN_DECL int weed_is_threading(weed_plant_t *inst)
FN_DECL void weed_filter_set_flags(weed_plant_t *filter, int flags)
FN_DECL int weed_channel_get_palette(weed_plant_t *channel)
FN_DECL int weed_filter_get_version(weed_plant_t *filter)
FN_DECL weed_plant_t * weed_radio_init(const char *name, const char *label, int def, int group) ALLOW_UNUSED
FN_DECL int weed_host_supports_linear_gamma(weed_plant_t *host_info)
FN_DECL weed_plant_t * weed_instance_get_filter(weed_plant_t *inst)
FN_DECL void weed_gui_set_flags(weed_plant_t *gui, int flags)
FN_DECL weed_plant_t * weed_out_param_colRGBd_init(const char *name, double red, double green, double blue) ALLOW_UNUSED
FN_DECL weed_plant_t * weed_instance_get_gui(weed_plant_t *inst)
FN_DECL int weed_chantmpl_get_flags(weed_plant_t *chantmpl)
FN_DECL weed_plant_t * weed_integer_init(const char *name, const char *label, int def, int min, int max) ALLOW_UNUSED
FN_DECL int weed_channel_get_height(weed_plant_t *channel)
FN_DECL void weed_paramtmpl_set_name(weed_plant_t *paramtmpl, const char *name)
FN_DECL int weed_channel_get_yuv_clamping(weed_plant_t *channel)
weed_leaf_t weed_plant_t
Definition: weed.h:125