Go to the documentation of this file.
31 static weed_plant_t *resize_instance = NULL;
33 static boolean apply_audio_fx;
45 if (!plural)
return ((
_(
"generator")));
46 else return ((
_(
"Generators")));
48 if (!plural)
return ((
_(
"audio generator")));
49 else return ((
_(
"Audio Generators")));
51 if (!plural)
return ((
_(
"audio/video generator")));
52 else return ((
_(
"Audio/Video Generators")));
54 if (!plural)
return ((
_(
"data generator")));
55 else return ((
_(
"Data Generators")));
57 if (!plural)
return ((
_(
"data visualiser")));
58 else return ((
_(
"Data Visualisers")));
60 if (!plural)
return ((
_(
"data processor")));
61 else return ((
_(
"Data Processors")));
63 if (!plural)
return ((
_(
"data source")));
64 else return ((
_(
"Data Sources")));
66 if (!plural)
return ((
_(
"transition")));
67 else return ((
_(
"Transitions")));
69 if (!plural)
return ((
_(
"effect")));
70 else return ((
_(
"Effects")));
72 if (!plural)
return ((
_(
"utility")));
73 else return ((
_(
"Utilities")));
75 if (!plural)
return ((
_(
"compositor")));
76 else return ((
_(
"Compositors")));
78 if (!plural)
return ((
_(
"tap")));
79 else return ((
_(
"Taps")));
81 if (!plural)
return ((
_(
"splitter")));
82 else return ((
_(
"Splitters")));
84 if (!plural)
return ((
_(
"converter")));
85 else return ((
_(
"Converters")));
87 if (!plural)
return ((
_(
"analyser")));
88 else return ((
_(
"Analysers")));
92 if (!plural)
return ((
_(
"audio/video")));
93 else return ((
_(
"Audio/Video Transitions")));
95 if (!plural)
return ((
_(
"video only")));
96 else return ((
_(
"Video only Transitions")));
98 if (!plural)
return ((
_(
"audio only")));
99 else return ((
_(
"Audio only Transitions")));
101 if (!plural)
return ((
_(
"audio")));
102 else return ((
_(
"Audio Mixers")));
104 if (!plural)
return ((
_(
"audio")));
105 else return ((
_(
"Audio Effects")));
107 if (!plural)
return ((
_(
"video")));
108 else return ((
_(
"Video Effects")));
110 if (!plural)
return ((
_(
"audio volume controller")));
111 else return ((
_(
"Audio Volume Controllers")));
113 if (!plural)
return ((
_(
"video analyser")));
114 else return ((
_(
"Video Analysers")));
116 if (!plural)
return ((
_(
"audio analyser")));
117 else return ((
_(
"Audio Analysers")));
120 return ((
_(
"unknown")));
134 int oundo_start =
cfile->undo_start;
135 int oundo_end =
cfile->undo_end;
136 char effectstring[128];
137 double old_pb_fps =
cfile->pb_fps;
140 char *fxcommand = NULL, *cmd;
143 int new_file = current_file;
146 boolean got_no_frames =
FALSE;
168 else plugin_name = lives_strdup(rfx->
name);
183 cmd = lives_strdup(
"pfxrender");
185 }
else cmd = lives_strdup(
"fxrender");
186 fxcommand = lives_strconcat(
prefs->
backend,
" \"", cmd,
"_", plugin_name,
"\" ", pdefault,
197 if (
cfile->frame_index_back) {
199 cfile->frame_index_back = NULL;
214 if (!
cfile->pumper) {
219 }
else cfile->fx_frame_pump = 0;
222 cfile->undo_start = oundo_start;
223 cfile->undo_end = oundo_end;
229 tmp = (
_(
"%s all frames..."));
233 tmp = (
_(
"%s clipboard into frames %d to %d..."));
239 tmp = (
_(
"%s to clipboard..."));
242 tmp = (
_(
"%s to new clip..."));
246 tmp = (
_(
"%s frames %d to %d..."));
274 cfile->pb_fps = 1000000.;
277 tmp = (
_(
"%s clipboard with selection"));
278 lives_snprintf(effectstring, 128, tmp,
_(rfx->
action_desc));
281 tmp = (
_(
"%s to clipboard"));
282 lives_snprintf(effectstring, 128, tmp,
_(rfx->
action_desc));
284 tmp = (
_(
"%s to new clip"));
285 lives_snprintf(effectstring, 128, tmp,
_(rfx->
action_desc));
288 tmp = (
_(
"%s frames %d to %d"));
298 weed_plant_t *first_ot = weed_get_plantptr_value(first_out, WEED_LEAF_TEMPLATE, &
error);
307 cfile->pumper = NULL;
320 cfile->undo_start = oundo_start;
321 cfile->undo_end = oundo_end;
323 cfile->pb_fps = old_pb_fps;
327 cfile->fx_frame_pump = 0;
329 if (
cfile->start == 0) {
354 if (
cfile->start == 0) {
363 cfile->fx_frame_pump = 0;
368 cfile->pb_fps = old_pb_fps;
379 char **array = lives_strsplit(
mainw->
msg,
"|", numtok);
381 if (numtok > 4)
cfile->end =
cfile->progress_end =
cfile->start + atoi(array[4]) - 1;
386 cfile->hsize = atoi(array[1]);
387 cfile->vsize = atoi(array[2]);
389 cfile->hsize = atoi(array[5]);
390 cfile->vsize = atoi(array[6]);
393 cfile->fps =
cfile->pb_fps = strtod(array[3], NULL);
399 lives_strfreev(array);
402 cfile->progress_start = 1;
408 weed_plant_t *first_ot = weed_get_plantptr_value(first_out, WEED_LEAF_TEMPLATE, &
error);
416 boolean bad_header =
FALSE;
482 if (new_file != img_file) {
491 }
else got_no_frames =
TRUE;
501 if (!lives_file_test(tfile, LIVES_FILE_TEST_EXISTS)) {
508 if (got_no_frames ||
cfile->frames <= 0) {
516 if (!got_no_frames) {
543 new_file = current_file;
571 if (new_file != -1) {
594 LiVESError *
error = NULL;
634 if (++i >
cfile->end) {
636 lives_snprintf(
mainw->
msg, 9,
"completed");
652 layer =
on_rte_apply(layer, 0, 0, (weed_timecode_t)frameticks);
655 layer_palette = weed_get_int_value(layer, WEED_LEAF_CURRENT_PALETTE, &weed_error);
657 if (!resize_instance)
resize_layer(layer,
cfile->hsize,
cfile->vsize, LIVES_INTERP_BEST, layer_palette, 0);
658 if (
cfile->img_type ==
IMG_TYPE_JPEG && layer_palette != WEED_PALETTE_RGB24 && layer_palette != WEED_PALETTE_RGBA32) {
660 layer_palette = WEED_PALETTE_RGB24;
661 }
else if (
cfile->img_type ==
IMG_TYPE_PNG && layer_palette != WEED_PALETTE_RGBA32) {
663 layer_palette = WEED_PALETTE_RGBA32;
667 weed_plant_free(layer);
670 lives_snprintf(oname,
PATH_MAX,
"%s", tmp);
679 lives_error_free(
error);
683 }
while (retval == LIVES_RESPONSE_RETRY);
688 cfile->frame_index[i - 1] = -1;
690 }
else weed_plant_free(layer);
692 if (apply_audio_fx) {
698 if (++i >
cfile->end) {
719 sprintf(
mainw->
msg,
"%s",
"completed");
723 if (write_error)
return write_error;
733 boolean has_new_audio =
FALSE;
735 apply_audio_fx =
FALSE;
750 has_new_audio =
TRUE;
752 apply_audio_fx =
TRUE;
757 if (type == 1) resize_instance = (weed_plant_t *)rfx->
source;
758 else resize_instance = NULL;
769 if (apply_audio_fx) {
779 cfile->undo_signed_endian =
cfile->signed_endian;
794 resize_instance = NULL;
801 uint32_t chk_mask = 0;
835 static weed_layer_t *get_blend_layer_inner(weed_timecode_t tc) {
836 static weed_timecode_t blend_tc = 0;
838 weed_timecode_t ntc = tc;
850 if (!
cfile->play_paused) {
874 get_blend_layer_inner(tc);
887 weed_plant_t **layers, *retlayer;
892 layers = (weed_plant_t **)
lives_malloc(3 *
sizeof(weed_plant_t *));
897 if (resize_instance) {
899 weed_plant_t *init_event = weed_plant_new(WEED_PLANT_EVENT);
905 retlayer = layers[0];
906 weed_plant_free(init_event);
912 for (i = 0; layers[i]; i++) {
921 weed_plant_t **layers;
923 weed_plant_t *deint_filter, *deint_instance, *next_inst, *init_event, *orig_instance;
925 int deint_idx,
error;
936 layers = (weed_plant_t **)
lives_malloc(2 *
sizeof(weed_plant_t *));
942 init_event = weed_plant_new(WEED_PLANT_EVENT);
952 else next_inst = NULL;
958 deint_instance = next_inst;
964 weed_plant_free(init_event);
974 boolean rte_on_off_callback(LiVESAccelGroup *group, LiVESWidgetObject *obj, uint32_t keyval, LiVESXModifierType mod,
975 livespointer user_data) {
981 int key = LIVES_POINTER_TO_INT(user_data);
1003 new_rte =
GU641 << (key);
1112 boolean grabkeys_callback(LiVESAccelGroup * group, LiVESWidgetObject * obj, uint32_t keyval, LiVESXModifierType mod,
1113 livespointer user_data) {
1115 int fx = LIVES_POINTER_TO_INT(user_data);
1136 boolean textparm_callback(LiVESAccelGroup * group, LiVESWidgetObject * obj, uint32_t keyval, LiVESXModifierType mod,
1137 livespointer user_data) {
1151 boolean rtemode_callback(LiVESAccelGroup * group, LiVESWidgetObject * obj, uint32_t keyval, LiVESXModifierType mod,
1152 livespointer user_data) {
1153 int dirn = LIVES_POINTER_TO_INT(user_data);
1165 int key_mode = LIVES_POINTER_TO_INT(user_data);
1167 int key = (int)(key_mode / modes);
1168 int mode = key_mode - key * modes;
1177 boolean swap_fg_bg_callback(LiVESAccelGroup * group, LiVESWidgetObject * obj, uint32_t keyval, LiVESXModifierType mod,
1178 livespointer user_data) {
1238 new_rte =
GU641 << (key);
1240 if (on)
return TRUE;
1241 }
else if (!on)
return FALSE;
1255 static uint64_t backup_rte = 0;
1263 for (i = 0; i < nkeys; i++) {
1275 for (i = 0; i < nkeys; i++) {
#define LIVES_GLOBAL_INLINE
void clear_mainw_msg(void)
boolean internal_messaging
internal fx
double blend_factor
keyboard control parameter
weed_plant_t * rte_textparm
send keyboard input to this paramter (usually NULL)
@ LIVES_FX_CAT_AUDIO_MIXER
int swapped_clip
maintains the current cliplist postion even if we swap fg and bg clips
void set_undoable(const char *what, boolean sensitive)
void get_blend_layer(weed_timecode_t tc)
#define PLUGIN_RENDERED_EFFECTS_BUILTIN
external rendered fx plugins (RFX plugins)
char file_name[PATH_MAX]
input file
frames_t calc_new_playback_position(int fileno, ticks_t otc, ticks_t *ntc)
#define WARN_MASK_LAYOUT_ALTER_FRAMES
off by default on a fresh install
boolean rte_key_valid(int key, boolean is_userkey)
returns TRUE if there is a filter bound to active mode of hotkey
boolean has_audio_filters(lives_af_t af_type)
int weed_get_blend_factor(int hotkey)
boolean do_progress_dialog(boolean visible, boolean cancellable, const char *text)
weed_plant_t * rte_keymode_get_filter(int key, int mode)
returns filter_class bound to key/mode (or NULL)
weed_error_t weed_call_deinit_func(weed_plant_t *instance)
boolean rtemode_callback(LiVESAccelGroup *group, LiVESWidgetObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
for accel groups
void lives_sync(int times)
void override_if_active_input(int hotkey)
char workdir[PATH_MAX]
kept in locale encoding
@ LIVES_FX_CAT_VIDEO_EFFECT
LiVESWidget * select_last
#define IS_VALID_CLIP(clip)
boolean crash_recovery
TRUE==maintain mainw->recovery file.
lives_rfx_status_t status
weed_plant_t * get_weed_filter(int idx)
char * name
the name of the executable (so we can run it !)
char * action_desc
for Weed "Applying $s"
int new_clip
clip we should switch to during playback; switch will happen at the designated SWITCH POINT
weed_plant_t * on_rte_apply(weed_layer_t *layer, int opwidth, int opheight, weed_timecode_t tc)
LIVES_GLOBAL_INLINE boolean rte_key_is_enabled(int key)
frames_t frames
number of video frames
lives_clip_type_t clip_type
LIVES_GLOBAL_INLINE boolean rte_key_toggle(int key)
boolean swap_fg_bg_callback(LiVESAccelGroup *group, LiVESWidgetObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
char backend[PATH_MAX *4]
frames_t virtual_to_images(int sfileno, frames_t sframe, frames_t eframe, boolean update_progress, LiVESPixbuf **pbr)
void ce_thumbs_set_keych(int key, boolean on)
weed_plant_t * get_textparm(void)
for rte textmode, get first string parameter for current key/mode instance we will then forward all k...
void rtew_set_keygr(int key)
int verhash(char *version)
weed_plant_t * blend_layer
char * menu_text
for Weed, this is the filter_class "name"
LiVESList * list
list of filter_idx from which user can delegate
#define WEED_LEAF_HOST_WIDTH
LIVES_GLOBAL_INLINE LiVESResponseType do_info_dialog(const char *text)
char * lives_fx_cat_to_text(lives_fx_cat_t cat, boolean plural)
@ LIVES_FX_CAT_VIDEO_GENERATOR
char backend_sync[PATH_MAX *4]
boolean check_backend_return(lives_clip_t *sfile)
boolean rte_on_off_callback(LiVESAccelGroup *group, LiVESWidgetObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
for accel groups
void mt_init_clips(lives_mt *mt, int orig_file, boolean add)
size_t get_token_count(const char *string, int delim)
@ CLIP_TYPE_GENERATOR
frames from generator plugin
void add_to_clipmenu(void)
#define TICKS_PER_SECOND
ticks per second - GLOBAL TIMEBASE
boolean check_if_non_virtual(int fileno, frames_t start, frames_t end)
@ LIVES_FX_CAT_AUDIO_ANALYSER
void rte_keymodes_backup(int nkeys)
boolean rtemode_callback_hook(LiVESToggleButton *button, livespointer user_data)
for widgets
@ LIVES_FX_CAT_TRANSITION
uint64_t make_version_hash(const char *ver)
void do_rfx_cleanup(lives_rfx_t *rfx)
LIVES_GLOBAL_INLINE LiVESResponseType do_error_dialog(const char *text)
boolean do_header_write_error(int clip)
boolean weed_init_effect(int hotkey)
hotkey starts at 1
void deinterlace_frame(weed_layer_t *layer, weed_timecode_t tc)
void weed_deinit_all(boolean shutdown)
deinit all effects (except generators* during playback) this is called on ctrl-0 or on shutdown backg...
lives_img_type_t img_type
#define SCREEN_AREA_BACKGROUND
@ CLIP_TYPE_DISK
imported video, broken into frames
#define RFX_PROPS_BATCHG
is a batch generator
LIVES_GLOBAL_INLINE int filter_mutex_lock(int key)
@ LIVES_FX_CAT_DATA_VISUALISER
weed_plant_t * weed_apply_effects(weed_plant_t **layers, weed_plant_t *filter_map, weed_timecode_t tc, int opwidth, int opheight, void ***pchains)
boolean do_effect(lives_rfx_t *rfx, boolean is_preview)
defined as extern in paramwindow.c
void end_override_if_activate_output(int hotkey)
boolean is_pure_audio(weed_plant_t *plant, boolean count_opt)
TRUE if audio in or out and no vid in/out.
volatile lives_cancel_t cancelled
int get_frame_count(int idx, int xsize)
sets mainw->files[idx]->frames with current framecount
#define LIVES_FILE_EXT_MGK
@ RFX_STATUS_WEED
indicates an internal RFX, created from a weed instance
@ CANCEL_ERROR
cancelled because of error
boolean check_for_layout_errors(const char *operation, int fileno, int start, int end, uint32_t *in_mask)
check for layout errors, using in_mask as a guide (mask values are taken from prefs->warn_mask,...
@ LIVES_FX_CAT_AUDIO_TRANSITION
int rte_keys
which effect is bound to keyboard (m) modechange and ctrl-alt-up-arrow / ctrl-alt-down-arrow param ch...
@ LIVES_FX_CAT_AV_TRANSITION
lives_filter_error_t weed_apply_instance(weed_plant_t *inst, weed_plant_t *init_event, weed_plant_t **layers, int opwidth, int opheight, weed_timecode_t tc)
process a single video filter instance
lives_proc_thread_t lives_proc_thread_create(lives_thread_attr_t attr, lives_funcptr_t func, int return_type, const char *args_fmt,...)
create the specific plant which defines a background task to be run
@ LIVES_FX_CAT_VIDEO_ANALYSER
void ce_thumbs_highlight_current_clip(void)
#define LIVES_IS_INTERACTIVE
LIVES_GLOBAL_INLINE boolean pull_frame(weed_layer_t *layer, const char *image_ext, weed_timecode_t tc)
pull a frame from an external source into a layer the WEED_LEAF_CLIP and WEED_LEAF_FRAME leaves must ...
void d_print(const char *fmt,...)
char name[CLIP_NAME_MAXLEN]
the display name
void weed_reinit_all(void)
void close_current_file(int file_to_switch_to)
close current file, and try to switch to file_to_switch_to
int blend_file
background clip details
boolean keep_pre
set if previewed frames should be retained as processed frames (for rendered effects / generators)
@ LIVES_RENDER_ERROR_WRITE_AUDIO
#define WEED_LEAF_IN_TRACKS
LIVES_GLOBAL_INLINE int rte_getmodespk(void)
LIVES_GLOBAL_INLINE int filter_mutex_unlock(int key)
LIVES_GLOBAL_INLINE void rte_keys_reset(void)
@ CLIP_TYPE_FILE
unimported video, not or partially broken in frames
int pre_src_file
video file we were playing before any ext input started
@ LIVES_RENDER_EFFECTS_PAUSED
volatile int blend_palette
here we can store the details of the blend file at the insertion point, if nothing changes we can tar...
void switch_clip(int type, int newclip, boolean force)
lives_filter_error_t
filter apply errors
#define FX_CANDIDATE_DEINTERLACE
boolean grabkeys_callback(LiVESAccelGroup *group, LiVESWidgetObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
for accel groups
boolean rte_key_setmode(int key, int newmode)
newmode has two special values, -1 = cycle forwards, -2 = cycle backwards key is 1 based,...
void d_print_failed(void)
@ LIVES_FX_CAT_DATA_SOURCE
int playing_file
which number file we are playing (or -1) [generally mainw->current_file]
boolean save_frame_index(int fileno)
@ LIVES_RENDER_ERROR_WRITE_FRAME
int max_modes_per_key
maximum effect modes per key
lives_clip_t * files[MAX_FILES+1]
+1 for the clipboard
@ LIVES_FX_CAT_AUDIO_EFFECT
boolean save_clip_value(int which, lives_clip_details_t, void *val)
weed_plant_t * weed_instance_from_filter(weed_plant_t *filter)
boolean apply_rte_audio_init(void)
boolean weed_deinit_effect(int hotkey)
hotkey starts at 1
LiVESWidget * menuitem
the menu item which activates this effect
@ LIVES_FX_CAT_AUDIO_GENERATOR
void add_to_recovery_file(const char *handle)
#define WEED_LEAF_HOST_HEIGHT
pthread_mutex_t event_list_mutex
prevent simultaneous writing to event_list by audio and video threads
lives_render_error_t(* progress_fn)(boolean reset)
@ LIVES_FX_CAT_DATA_GENERATOR
error("LSD_RANDFUNC(ptr, size) must be defined")
boolean rte_key_on_off(int key, boolean on)
#define WARN_MASK_LAYOUT_ALTER_AUDIO
off by default on a fresh install
int delegate
offset in list of current delegate
boolean rte_on_off_callback_hook(LiVESToggleButton *button, livespointer user_data)
for widgets
void rtew_set_keych(int key, boolean on)
boolean gen_to_clipboard
rendered generators
_resaudw * create_resaudw(short type, render_details *rdet, LiVESWidget *top_vbox)
resample audio window
#define lives_strdup_printf(fmt,...)
boolean osc_block
TODO - make this a mutex and more finely grained : things we need to block are (clip switches,...
boolean convert_layer_palette(weed_layer_t *layer, int outpl, int op_clamping)
boolean grabkeys_callback_hook(LiVESToggleButton *button, livespointer user_data)
for widgets
weed_plant_t weed_layer_t
lives_render_error_t realfx_progress(boolean reset)
void popup_lmap_errors(LiVESMenuItem *menuitem, livespointer user_data)
boolean close_keep_frames
special value for when generating to clipboard
boolean textparm_callback(LiVESAccelGroup *group, LiVESWidgetObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
#define FX_KEYS_MAX_VIRTUAL
must be >= FX_KEYS_PHYSICAL, and <=64 (number of bits in a 64bit int mask) (max number of keys accesi...
#define LIVES_THRDATTR_NONE
@ LIVES_FX_CAT_VIDEO_TRANSITION
@ LIVES_RENDER_PROCESSING
void pull_frame_threaded(weed_layer_t *layer, const char *img_ext, weed_timecode_t tc, int width, int height)
#define SCREEN_AREA_FOREGROUND
#define CURRENT_CLIP_IS_NORMAL
@ RFX_STATUS_BUILTIN
factory presets
lives_mt * multitrack
holds a pointer to the entire multitrack environment; NULL in Clip Edit mode
#define CURRENT_CLIP_IS_VALID
boolean is_virtual_frame(int sfileno, frames_t frame)
void d_print_cancelled(void)
boolean suppress_dprint
tidy up, e.g. by blocking "switched to file..." and "closed file..." messages
uint32_t last_grabbable_effect
#define RFX_PROPS_MAY_RESIZE
is a tool
LiVESResponseType do_write_failed_error_s_with_retry(const char *fname, const char *errtext)
void mt_clip_select(lives_mt *mt, boolean scroll)
int last_dprint_file
message output settings
int num_tr_applied
number of transitions active
char * make_image_file_name(lives_clip_t *clip, frames_t frame, const char *img_ext)
lives_image_type can be a string, lives_img_type_t is an enumeration
LIVES_GLOBAL_INLINE weed_layer_t * lives_layer_new_for_frame(int clip, frames_t frame)
weed_plant_t * get_enabled_channel(weed_plant_t *inst, int which, boolean is_in)
for FILTER_INST
void lives_notify(int msgnumber, const char *msgstring)
const char * get_image_ext_for_type(lives_img_type_t imgtype)
#define WEED_LEAF_OUT_TRACKS
boolean on_realfx_activate_inner(int type, lives_rfx_t *rfx)
LIVES_GLOBAL_INLINE int weed_instance_unref(weed_plant_t *inst)
#define LIVES_OSC_NOTIFY_CLIP_OPENED
sent after a clip is opened
boolean resize_layer(weed_layer_t *layer, int width, int height, LiVESInterpType interp, int opal_hint, int oclamp_hint)
resize a layer
void apply_rte_audio_end(boolean del)
double pb_fps
current playback rate, may vary from fps, can be 0. or negative
void rte_keymodes_restore(int nkeys)
#define WEED_LEAF_HOST_NEXT_INSTANCE
@ LIVES_FX_CAT_COMPOSITOR
@ CANCEL_KEEP
user pressed 'Keep'
int lives_system(const char *com, boolean allow_error)
LIVES_GLOBAL_INLINE weed_layer_t * weed_layer_free(weed_layer_t *layer)
frees pixel_data for a layer, then the layer itself
void reget_afilesize(int fileno)
void init_clipboard(void)
lives_fx_candidate_t fx_candidates[MAX_FX_CANDIDATE_TYPES]
< effects which can have candidates from which a delegate is selected (current examples are: audio_vo...
void *(* lives_funcptr_t)(void *)
volatile uint64_t rte
current max for VJ mode == 64 effects on fg clip
boolean show_procd
override showing of "processing..." dialog
corresponds to one clip in the GUI
boolean is_processing
states
@ LIVES_RENDER_WARNING_READ_FRAME
char * param_marshall(lives_rfx_t *rfx, boolean with_min_max)
void * source
points to the source (e.g. a weed_plant_t)
boolean apply_rte_audio(int64_t nframes)
#define lives_nanosleep_until_nonzero(condition)
boolean pconx_chain_data(int key, int mode, boolean is_audio_thread)
boolean has_video_filters(boolean analysers_only)
ulong open_file_sel(const char *file_name, double start_time, int frames)
weed_plant_t * filter_map
LIVES_GLOBAL_INLINE boolean lives_proc_thread_cancel(lives_proc_thread_t tinfo)
int rte_key_getmode(int key)
returns current active mode for a key (or -1)
void ce_thumbs_add_param_box(int key, boolean remove)
volatile int agen_key
which fx key is generating audio [1 based] (or 0 for none)
LiVESPixbuf * layer_to_pixbuf(weed_layer_t *layer, boolean realpalette, boolean fordisplay)
boolean is_loaded
should we continue loading if we come back to this clip
boolean save_clip_values(int which_file)
void on_realfx_activate(LiVESMenuItem *menuitem, livespointer xrfx)
@ LIVES_FX_CAT_AV_GENERATOR
@ LIVES_RENDER_ERROR_NONE
int lives_rm(const char *file)
@ LIVES_FX_CAT_DATA_PROCESSOR
frames_t * frame_index_copy(frames_t *findex, frames_t nframes, frames_t offset)
void unbuffer_lmap_errors(boolean add)
lives_render_error_t
various return conditions from rendering (multitrack or after recording)
boolean lives_pixbuf_save(LiVESPixbuf *pixbuf, char *fname, lives_img_type_t imgtype, int quality, int width, int height, LiVESError **gerrorptr)
Save a pixbuf to a file using the specified imgtype and the specified quality/compression value.
#define MAINW_MSG_SIZE
mainw->msg bytesize
boolean foreign
for external window capture
lives_rfx_t * rendered_fx
rendered fx