LiVES  3.2.0
Macros | Enumerations | Functions
events.c File Reference
#include "main.h"
#include "effects.h"
#include "interface.h"
#include "callbacks.h"
#include "resample.h"
#include "audio.h"
#include "cvirtual.h"

Go to the source code of this file.

Macros

#define _get_or_zero(a, b, c)   (a ? weed_get_##b##_value(a, c, NULL) : 0)
 
#define SAVE_THREAD
 

Enumerations

enum  {
  KEY_COLUMN, NAME_COLUMN, KEYVAL_COLUMN, MODEVAL_COLUMN,
  EFD_NUM_COLUMNS, TITLE_COLUMN, KEY_COLUMN, VALUE_COLUMN,
  DESC_COLUMN, NUM_COLUMNS, const_domain_notify, const_domain_response,
  const_domain_grav, const_domain_insert_mode, LIVES_DEVICE_CD = 0, LIVES_DEVICE_DVD,
  LIVES_DEVICE_VCD, LIVES_DEVICE_INTERNAL, LIVES_DEVICE_TV_CARD, LIVES_DEVICE_FW_CARD,
  TITLE_COLUMN, VALUE_COLUMN, FILTER_COLUMN, RANGE_COLUMN,
  OFFS1_COLUMN, SCALE_COLUMN, OFFS2_COLUMN, OMC_NUM_COLUMNS,
  LIST_ENTRY_GUI, LIST_ENTRY_DECODING, LIST_ENTRY_PLAYBACK, LIST_ENTRY_RECORDING,
  LIST_ENTRY_ENCODING, LIST_ENTRY_EFFECTS, LIST_ENTRY_DIRECTORIES, LIST_ENTRY_WARNINGS,
  LIST_ENTRY_MISC, LIST_ENTRY_THEMES, LIST_ENTRY_NET, LIST_ENTRY_JACK,
  LIST_ENTRY_MIDI, LIST_ENTRY_MULTITRACK, EXTENDED_NAME_COLUMN, NAME_COLUMN,
  HASH_COLUMN, NUM_COLUMNS
}
 

Functions

LIVES_GLOBAL_INLINE int weed_event_get_type (weed_event_t *event)
 
LIVES_GLOBAL_INLINE int weed_frame_event_get_tracks (weed_event_t *event, int **clips, int64_t **frames)
 
LIVES_GLOBAL_INLINE int weed_frame_event_get_audio_tracks (weed_event_t *event, int **clips, double **seeks)
 
LIVES_GLOBAL_INLINE weed_timecode_t weed_event_set_timecode (weed_event_t *event, weed_timecode_t tc)
 
LIVES_GLOBAL_INLINE weed_timecode_t weed_event_get_timecode (weed_event_t *event)
 
GNU_PURE void *** get_event_pchains (void)
 
LIVES_GLOBAL_INLINE weed_timecode_t get_event_timecode (weed_plant_t *plant)
 
LIVES_GLOBAL_INLINE int get_event_type (weed_plant_t *plant)
 
LIVES_GLOBAL_INLINE weed_plant_t * get_prev_event (weed_plant_t *event)
 
LIVES_GLOBAL_INLINE weed_plant_t * get_next_event (weed_plant_t *event)
 
LIVES_GLOBAL_INLINE weed_plant_t * get_first_event (weed_plant_t *event_list)
 
LIVES_GLOBAL_INLINE weed_plant_t * get_last_event (weed_plant_t *event_list)
 
boolean has_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t **shortcut)
 
int get_audio_frame_clip (weed_plant_t *event, int track)
 returns clip number for track (track==-1 is backing audio) More...
 
double get_audio_frame_vel (weed_plant_t *event, int track)
 returns velocity for track (track==-1 is backing audio) More...
 
double get_audio_frame_seek (weed_plant_t *event, int track)
 returns velocity for track (track==-1 is backing audio) More...
 
int get_frame_event_clip (weed_plant_t *event, int layer)
 
frames_t get_frame_event_frame (weed_plant_t *event, int layer)
 
weed_event_tlives_event_list_new (weed_event_t *elist, const char *cdate)
 lib-ish stuff More...
 
void unlink_event (weed_plant_t *event_list, weed_plant_t *event)
 
void delete_event (weed_plant_t *event_list, weed_plant_t *event)
 
boolean insert_event_before (weed_plant_t *at_event, weed_plant_t *event)
 
boolean insert_event_after (weed_plant_t *at_event, weed_plant_t *event)
 
void replace_event (weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event)
 
weed_plant_t * get_next_frame_event (weed_plant_t *event)
 
weed_plant_t * get_prev_frame_event (weed_plant_t *event)
 
weed_plant_t * get_next_audio_frame_event (weed_plant_t *event)
 
weed_plant_t * get_prev_audio_frame_event (weed_plant_t *event)
 
weed_plant_t * get_first_frame_event (weed_plant_t *event_list)
 
weed_plant_t * get_last_frame_event (weed_plant_t *event_list)
 
weed_plant_t * get_audio_block_start (weed_plant_t *event_list, int track, weed_timecode_t tc, boolean seek_back)
 
void reset_ttable (void)
 
void remove_frame_from_event (weed_plant_t *event_list, weed_plant_t *event, int track)
 
boolean is_blank_frame (weed_plant_t *event, boolean count_audio)
 
void remove_end_blank_frames (weed_plant_t *event_list, boolean remove_filter_inits)
 
weed_timecode_t get_next_paramchange (void **pchange_next, weed_timecode_t end_tc)
 
weed_timecode_t get_prev_paramchange (void **pchange_prev, weed_timecode_t start_tc)
 
boolean is_init_pchange (weed_plant_t *init_event, weed_plant_t *pchange_event)
 
weed_plant_t * event_copy_and_insert (weed_plant_t *in_event, weed_timecode_t out_tc, weed_plant_t *event_list, weed_event_t **ret_event)
 copy (duplicate) in_event and append it to event_list, changing the timecode to out_tc this is called during quantisation More...
 
boolean frame_event_has_frame_for_track (weed_plant_t *event, int track)
 
weed_plant_t * get_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t *shortcut, boolean exact)
 
boolean filter_map_after_frame (weed_plant_t *fmap)
 
weed_plant_t * get_frame_event_at_or_before (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t *shortcut)
 
weed_plant_t * get_filter_map_after (weed_plant_t *event, int ctrack)
 
boolean init_event_is_relevant (weed_plant_t *init_event, int ctrack)
 
weed_plant_t * get_filter_map_before (weed_plant_t *event, int ctrack, weed_plant_t *stop_event)
 
void ** get_init_events_before (weed_plant_t *event, weed_plant_t *init_event, boolean add)
 
void update_filter_maps (weed_plant_t *event, weed_plant_t *end_event, weed_plant_t *init_event)
 
void insert_filter_init_event_at (weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event)
 
void insert_filter_deinit_event_at (weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event)
 
boolean insert_filter_map_event_at (weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event, boolean before_frames)
 
void insert_param_change_event_at (weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event)
 
weed_plant_t * insert_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, int numframes, int *clips, int64_t *frames, weed_plant_t **shortcut)
 
void insert_audio_event_at (weed_plant_t *event, int track, int clipnum, double seek, double vel)
 
void remove_audio_for_track (weed_plant_t *event, int track)
 
weed_plant_t * append_marker_event (weed_plant_t *event_list, weed_timecode_t tc, int marker_type)
 
weed_plant_t * insert_marker_event_at (weed_plant_t *event_list, weed_plant_t *at_event, int marker_type, livespointer data)
 
LIVES_GLOBAL_INLINE weed_plant_t * insert_blank_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t **shortcut)
 
void remove_filter_from_event_list (weed_plant_t *event_list, weed_plant_t *init_event)
 
LIVES_GLOBAL_INLINE boolean init_event_in_list (void **init_events, int num_inits, weed_plant_t *event)
 
boolean filter_map_has_event (weed_plant_t *fmap, weed_plant_t *event)
 
boolean filter_init_has_owner (weed_plant_t *init_event, int track)
 
void backup_host_tags (weed_plant_t *event_list, weed_timecode_t curr_tc)
 
void restore_host_tags (weed_plant_t *event_list, weed_timecode_t curr_tc)
 
void delete_param_changes_after_deinit (weed_plant_t *event_list, weed_plant_t *init_event)
 
boolean init_event_is_process_last (weed_plant_t *event)
 
void add_init_event_to_filter_map (weed_plant_t *fmap, weed_plant_t *event, void **hints)
 
void move_filter_init_event (weed_plant_t *event_list, weed_timecode_t new_tc, weed_plant_t *init_event, double fps)
 
void move_filter_deinit_event (weed_plant_t *event_list, weed_timecode_t new_tc, weed_plant_t *deinit_event, double fps, boolean rescale_pchanges)
 
boolean move_event_right (weed_plant_t *event_list, weed_plant_t *event, boolean can_stay, double fps)
 
boolean move_event_left (weed_plant_t *event_list, weed_plant_t *event, boolean can_stay, double fps)
 
void set_render_choice (LiVESToggleButton *togglebutton, livespointer choice)
 
void set_render_choice_button (LiVESButton *button, livespointer choice)
 
LiVESWidget * events_rec_dialog (void)
 
void event_list_free (weed_plant_t *event_list)
 
void event_list_replace_events (weed_plant_t *event_list, weed_plant_t *new_event_list)
 replace events in event_list with events in new_event_list More...
 
boolean event_list_to_block (weed_plant_t *event_list, int num_events)
 
void event_list_close_gaps (weed_event_t *event_list)
 
void add_track_to_avol_init (weed_plant_t *filter, weed_plant_t *event, int nbtracks, boolean behind)
 
void event_list_add_track (weed_plant_t *event_list, int layer)
 
weed_plant_t * append_frame_event (weed_plant_t *event_list, weed_timecode_t tc, int numframes, int *clips, int64_t *frames)
 
void ** filter_init_add_pchanges (weed_plant_t *event_list, weed_plant_t *plant, weed_plant_t *init_event, int ntracks, int leave)
 
weed_plant_t * append_filter_init_event (weed_plant_t *event_list, weed_timecode_t tc, int filter_idx, int num_in_tracks, int key, weed_plant_t *inst)
 
weed_plant_t * append_filter_deinit_event (weed_plant_t *event_list, weed_timecode_t tc, void *init_event, void **pchain)
 
weed_plant_t * append_param_change_event (weed_plant_t *event_list, weed_timecode_t tc, int pnum, weed_plant_t *param, void *init_event, void **pchain)
 
weed_plant_t * append_filter_map_event (weed_plant_t *event_list, weed_timecode_t tc, void **init_events)
 
void get_active_track_list (int *clip_index, int num_tracks, weed_plant_t *filter_map)
 
weed_plant_t * process_events (weed_plant_t *next_event, boolean process_audio, weed_timecode_t curr_tc)
 
lives_render_error_t render_events (boolean reset, boolean rend_video, boolean rend_audio)
 render mainw->event_list to a clip More...
 
lives_render_error_t render_events_cb (boolean dummy)
 
boolean start_render_effect_events (weed_plant_t *event_list, boolean render_vid, boolean render_aud)
 
int count_events (weed_plant_t *event_list, boolean all_events, weed_timecode_t start_tc, weed_timecode_t end_tc)
 
frames_t count_resampled_events (weed_plant_t *event_list, double fps)
 
weed_timecode_t event_list_get_end_tc (weed_plant_t *event_list)
 
double event_list_get_end_secs (weed_plant_t *event_list)
 
weed_timecode_t event_list_get_start_tc (weed_plant_t *event_list)
 
double event_list_get_start_secs (weed_plant_t *event_list)
 
boolean has_audio_frame (weed_plant_t *event_list)
 
boolean render_to_clip (boolean new_clip, boolean transcode)
 rendering More...
 
LIVES_INLINE void dprint_recneg (void)
 
boolean backup_recording (char **esave_file, char **asave_file)
 
void event_list_add_end_events (weed_event_t *event_list, boolean is_final)
 
boolean deal_with_render_choice (boolean add_deinit)
 
double * get_track_visibility_at_tc (weed_plant_t *event_list, int ntracks, int nbtracks, weed_timecode_t tc, weed_plant_t **shortcut, boolean bleedthru)
 calculate the "visibility" of each track at timecode tc More...
 
LiVESWidget * create_event_list_dialog (weed_plant_t *event_list, weed_timecode_t start_tc, weed_timecode_t end_tc)
 
void rdetw_spinh_changed (LiVESSpinButton *spinbutton, livespointer user_data)
 
void rdetw_spinw_changed (LiVESSpinButton *spinbutton, livespointer user_data)
 
void rdetw_spinf_changed (LiVESSpinButton *spinbutton, livespointer user_data)
 
LiVESWidget * add_video_options (LiVESWidget **spwidth, int defwidth, LiVESWidget **spheight, int defheight, LiVESWidget **spfps, double deffps, LiVESWidget **spframes, int defframes, boolean add_aspect, LiVESWidget *extra)
 
LiVESWidget * add_audio_options (LiVESWidget **cbbackaudio, LiVESWidget **cbpertrack)
 
render_detailscreate_render_details (int type)
 

Macro Definition Documentation

◆ _get_or_zero

#define _get_or_zero (   a,
  b,
 
)    (a ? weed_get_##b##_value(a, c, NULL) : 0)

Definition at line 96 of file events.c.

◆ SAVE_THREAD

#define SAVE_THREAD

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
KEY_COLUMN 
NAME_COLUMN 
KEYVAL_COLUMN 
MODEVAL_COLUMN 
EFD_NUM_COLUMNS 
TITLE_COLUMN 
KEY_COLUMN 
VALUE_COLUMN 
DESC_COLUMN 
NUM_COLUMNS 
const_domain_notify 
const_domain_response 
const_domain_grav 
const_domain_insert_mode 
LIVES_DEVICE_CD 
LIVES_DEVICE_DVD 
LIVES_DEVICE_VCD 
LIVES_DEVICE_INTERNAL 
LIVES_DEVICE_TV_CARD 
LIVES_DEVICE_FW_CARD 
TITLE_COLUMN 
VALUE_COLUMN 
FILTER_COLUMN 
RANGE_COLUMN 
OFFS1_COLUMN 
SCALE_COLUMN 
OFFS2_COLUMN 
OMC_NUM_COLUMNS 
LIST_ENTRY_GUI 
LIST_ENTRY_DECODING 
LIST_ENTRY_PLAYBACK 
LIST_ENTRY_RECORDING 
LIST_ENTRY_ENCODING 
LIST_ENTRY_EFFECTS 
LIST_ENTRY_DIRECTORIES 
LIST_ENTRY_WARNINGS 
LIST_ENTRY_MISC 
LIST_ENTRY_THEMES 
LIST_ENTRY_NET 
LIST_ENTRY_JACK 
LIST_ENTRY_MIDI 
LIST_ENTRY_MULTITRACK 
EXTENDED_NAME_COLUMN 
NAME_COLUMN 
HASH_COLUMN 
NUM_COLUMNS 

Definition at line 5551 of file events.c.

Function Documentation

◆ add_audio_options()

LiVESWidget* add_audio_options ( LiVESWidget **  cbbackaudio,
LiVESWidget **  cbpertrack 
)

Definition at line 6184 of file events.c.

◆ add_init_event_to_filter_map()

void add_init_event_to_filter_map ( weed_plant_t *  fmap,
weed_plant_t *  event,
void **  hints 
)

Definition at line 1731 of file events.c.

Referenced by update_filter_maps().

◆ add_track_to_avol_init()

void add_track_to_avol_init ( weed_plant_t *  filter,
weed_plant_t *  event,
int  nbtracks,
boolean  behind 
)

Definition at line 2435 of file events.c.

◆ add_video_options()

LiVESWidget* add_video_options ( LiVESWidget **  spwidth,
int  defwidth,
LiVESWidget **  spheight,
int  defheight,
LiVESWidget **  spfps,
double  deffps,
LiVESWidget **  spframes,
int  defframes,
boolean  add_aspect,
LiVESWidget *  extra 
)

Definition at line 6072 of file events.c.

◆ append_filter_deinit_event()

weed_plant_t* append_filter_deinit_event ( weed_plant_t *  event_list,
weed_timecode_t  tc,
void *  init_event,
void **  pchain 
)

Definition at line 2882 of file events.c.

◆ append_filter_init_event()

weed_plant_t* append_filter_init_event ( weed_plant_t *  event_list,
weed_timecode_t  tc,
int  filter_idx,
int  num_in_tracks,
int  key,
weed_plant_t *  inst 
)

Definition at line 2731 of file events.c.

◆ append_filter_map_event()

weed_plant_t* append_filter_map_event ( weed_plant_t *  event_list,
weed_timecode_t  tc,
void **  init_events 
)

Definition at line 2968 of file events.c.

◆ append_frame_event()

weed_plant_t* append_frame_event ( weed_plant_t *  event_list,
weed_timecode_t  tc,
int  numframes,
int *  clips,
int64_t *  frames 
)

Definition at line 2610 of file events.c.

Referenced by insert_frame_event_at(), load_frame_image(), and on_resample_vid_ok().

◆ append_marker_event()

weed_plant_t* append_marker_event ( weed_plant_t *  event_list,
weed_timecode_t  tc,
int  marker_type 
)

Definition at line 1382 of file events.c.

Referenced by event_list_add_end_events(), freeze_callback(), and load_frame_image().

◆ append_param_change_event()

weed_plant_t* append_param_change_event ( weed_plant_t *  event_list,
weed_timecode_t  tc,
int  pnum,
weed_plant_t *  param,
void *  init_event,
void **  pchain 
)

Definition at line 2919 of file events.c.

Referenced by rec_param_change().

◆ backup_host_tags()

void backup_host_tags ( weed_plant_t *  event_list,
weed_timecode_t  curr_tc 
)

Definition at line 1590 of file events.c.

◆ backup_recording()

boolean backup_recording ( char **  esave_file,
char **  asave_file 
)

Definition at line 5028 of file events.c.

Referenced by catch_sigint(), and lives_exit().

◆ count_events()

int count_events ( weed_plant_t *  event_list,
boolean  all_events,
weed_timecode_t  start_tc,
weed_timecode_t  end_tc 
)

◆ count_resampled_events()

frames_t count_resampled_events ( weed_plant_t *  event_list,
double  fps 
)

Definition at line 4560 of file events.c.

Referenced by start_render_effect_events().

◆ create_event_list_dialog()

LiVESWidget* create_event_list_dialog ( weed_plant_t *  event_list,
weed_timecode_t  start_tc,
weed_timecode_t  end_tc 
)

Definition at line 5582 of file events.c.

Referenced by multitrack_view_events(), and multitrack_view_sel_events().

◆ create_render_details()

render_details* create_render_details ( int  type)

Definition at line 6252 of file events.c.

Referenced by mt_change_vals_activate(), on_multitrack_activate(), and render_to_clip().

◆ deal_with_render_choice()

boolean deal_with_render_choice ( boolean  add_deinit)

user may have recorded a generator with no other clips loaded

< new clip frames always start at 1

< same clip frames start where recording started

multitrack will set this itself

Definition at line 5159 of file events.c.

Referenced by render_choice_idle().

◆ delete_event()

void delete_event ( weed_plant_t *  event_list,
weed_plant_t *  event 
)

◆ delete_param_changes_after_deinit()

void delete_param_changes_after_deinit ( weed_plant_t *  event_list,
weed_plant_t *  init_event 
)

Definition at line 1623 of file events.c.

◆ dprint_recneg()

LIVES_INLINE void dprint_recneg ( void  )

Definition at line 5026 of file events.c.

◆ event_copy_and_insert()

weed_plant_t* event_copy_and_insert ( weed_plant_t *  in_event,
weed_timecode_t  out_tc,
weed_plant_t *  event_list,
weed_event_t **  ret_event 
)

copy (duplicate) in_event and append it to event_list, changing the timecode to out_tc this is called during quantisation

called during quantisation

copy an event and insert it in event_list events must be copied in time order, since filter_deinit, filter_map and param_change events MUST refer to prior filter_init events

when we copy a filter_init, we add a new field to the copy "event_id". This contains the value of the pointer to original event we use this to locate the effect_init event in the new event_list

for effect_deinit, effect_map, param_change, we change the "init_event(s)" property to point to our copy effect_init

we don't need to make pchain array here, provided we later call event_list_rectify() (this only applies to multitrack, since we interpolate parameters there; in clip editor the paramter changes are applied as recorded, with no interpolation)

we check for memory allocation errors here, because we could be building a large new event_list on mem error we return NULL, caller should free() event_list in that case

Definition at line 622 of file events.c.

◆ event_list_add_end_events()

void event_list_add_end_events ( weed_event_t event_list,
boolean  is_final 
)

Definition at line 5102 of file events.c.

Referenced by on_record_perf_activate().

◆ event_list_add_track()

void event_list_add_track ( weed_plant_t *  event_list,
int  layer 
)

Definition at line 2497 of file events.c.

◆ event_list_close_gaps()

void event_list_close_gaps ( weed_event_t event_list)

offset of recording in clip

if this is > clip length we cannnot render to same clip

subtract delta to close gaps, we already subtracted tc_offs

Definition at line 2365 of file events.c.

◆ event_list_free()

void event_list_free ( weed_plant_t *  event_list)

◆ event_list_get_end_secs()

double event_list_get_end_secs ( weed_plant_t *  event_list)

Definition at line 4607 of file events.c.

Referenced by resize_timeline().

◆ event_list_get_end_tc()

weed_timecode_t event_list_get_end_tc ( weed_plant_t *  event_list)

Definition at line 4601 of file events.c.

Referenced by event_list_get_end_secs().

◆ event_list_get_start_secs()

double event_list_get_start_secs ( weed_plant_t *  event_list)

Definition at line 4618 of file events.c.

Referenced by save_event_frames().

◆ event_list_get_start_tc()

weed_timecode_t event_list_get_start_tc ( weed_plant_t *  event_list)

Definition at line 4612 of file events.c.

Referenced by event_list_get_start_secs().

◆ event_list_replace_events()

void event_list_replace_events ( weed_plant_t *  event_list,
weed_plant_t *  new_event_list 
)

replace events in event_list with events in new_event_list

Definition at line 2320 of file events.c.

Referenced by render_to_clip().

◆ event_list_to_block()

boolean event_list_to_block ( weed_plant_t *  event_list,
int  num_events 
)

Definition at line 2329 of file events.c.

Referenced by save_event_frames().

◆ events_rec_dialog()

LiVESWidget* events_rec_dialog ( void  )

Definition at line 2186 of file events.c.

◆ filter_init_add_pchanges()

void** filter_init_add_pchanges ( weed_plant_t *  event_list,
weed_plant_t *  plant,
weed_plant_t *  init_event,
int  ntracks,
int  leave 
)

Definition at line 2648 of file events.c.

◆ filter_init_has_owner()

boolean filter_init_has_owner ( weed_plant_t *  init_event,
int  track 
)

Definition at line 1570 of file events.c.

◆ filter_map_after_frame()

boolean filter_map_after_frame ( weed_plant_t *  fmap)

Definition at line 803 of file events.c.

Referenced by get_next_fm(), and get_prev_fm().

◆ filter_map_has_event()

boolean filter_map_has_event ( weed_plant_t *  fmap,
weed_plant_t *  event 
)

Definition at line 1560 of file events.c.

◆ frame_event_has_frame_for_track()

boolean frame_event_has_frame_for_track ( weed_plant_t *  event,
int  track 
)

Definition at line 761 of file events.c.

◆ get_active_track_list()

void get_active_track_list ( int *  clip_index,
int  num_tracks,
weed_plant_t *  filter_map 
)

if we are previewing a solo effect in multitrack, then we ignore the usual rules for the front frame, and instead use the (first) output track from the filter instance

Definition at line 3008 of file events.c.

Referenced by load_frame_image(), and render_events().

◆ get_audio_block_start()

weed_plant_t* get_audio_block_start ( weed_plant_t *  event_list,
int  track,
weed_timecode_t  tc,
boolean  seek_back 
)

Definition at line 434 of file events.c.

Referenced by multitrack_audio_insert().

◆ get_audio_frame_clip()

int get_audio_frame_clip ( weed_plant_t *  event,
int  track 
)

returns clip number for track (track==-1 is backing audio)

Definition at line 147 of file events.c.

Referenced by avel_reverse_toggled(), avel_spin_changed(), and get_audio_block_start().

◆ get_audio_frame_seek()

double get_audio_frame_seek ( weed_plant_t *  event,
int  track 
)

returns velocity for track (track==-1 is backing audio)

Definition at line 187 of file events.c.

Referenced by avel_reverse_toggled(), and avel_spin_changed().

◆ get_audio_frame_vel()

double get_audio_frame_vel ( weed_plant_t *  event,
int  track 
)

returns velocity for track (track==-1 is backing audio)

Definition at line 165 of file events.c.

Referenced by avel_reverse_toggled(), get_audio_block_start(), in_anchor_toggled(), and out_anchor_toggled().

◆ get_event_pchains()

GNU_PURE void** * get_event_pchains ( void  )

Definition at line 94 of file events.c.

◆ get_event_timecode()

LIVES_GLOBAL_INLINE weed_timecode_t get_event_timecode ( weed_plant_t *  plant)

Definition at line 98 of file events.c.

Referenced by add_blank_frames_up_to(), add_filter_deinit_events(), add_markers(), add_mt_param_box(), audio_process_events_to(), avel_reverse_toggled(), avel_spin_changed(), backup_host_tags(), block_overlap(), count_events(), count_resampled_events(), deorder_frames(), do_block_context(), event_list_add_end_events(), event_list_close_gaps(), event_list_get_end_tc(), event_list_get_start_tc(), fill_abuffer_from(), filter_init_add_pchanges(), filter_map_after_frame(), freeze_callback(), get_audio_and_effects_state_at(), get_frame_event_at(), get_frame_event_at_or_before(), get_next_paramchange(), get_prev_fm(), get_prev_paramchange(), get_region_overlap(), has_frame_event_at(), in_anchor_toggled(), insert_event_after(), insert_event_before(), insert_filter_deinit_event_at(), insert_filter_init_event_at(), insert_filter_map_event_at(), insert_frame_event_at(), insert_marker_event_at(), insert_param_change_event_at(), interpolate_param(), is_init_pchange(), move_block(), move_event_left(), move_event_right(), move_filter_deinit_event(), move_filter_init_event(), mt_add_block_effect(), mt_add_region_effect(), mt_do_autotransition(), mt_sensitise(), multitrack_audio_insert(), multitrack_insert(), on_del_node_clicked(), on_mt_delfx_activate(), on_next_fm_clicked(), on_next_node_clicked(), on_node_spin_value_changed(), on_prev_fm_clicked(), on_prev_node_clicked(), on_set_pvals_clicked(), out_anchor_toggled(), pre_analyse(), remove_frame_from_event(), render_events(), replace_event(), restore_host_tags(), show_in_out_images(), update_filter_events(), weed_event_get_timecode(), and weed_event_set_timecode().

◆ get_event_type()

LIVES_GLOBAL_INLINE int get_event_type ( weed_plant_t *  plant)

◆ get_filter_map_after()

weed_plant_t* get_filter_map_after ( weed_plant_t *  event,
int  ctrack 
)

Definition at line 821 of file events.c.

Referenced by get_next_fm().

◆ get_filter_map_before()

weed_plant_t* get_filter_map_before ( weed_plant_t *  event,
int  ctrack,
weed_plant_t *  stop_event 
)

Definition at line 895 of file events.c.

Referenced by get_next_fm(), get_prev_fm(), and get_track_visibility_at_tc().

◆ get_first_event()

LIVES_GLOBAL_INLINE weed_plant_t* get_first_event ( weed_plant_t *  event_list)

◆ get_first_frame_event()

weed_plant_t* get_first_frame_event ( weed_plant_t *  event_list)

◆ get_frame_event_at()

weed_plant_t* get_frame_event_at ( weed_plant_t *  event_list,
weed_timecode_t  tc,
weed_plant_t *  shortcut,
boolean  exact 
)

◆ get_frame_event_at_or_before()

weed_plant_t* get_frame_event_at_or_before ( weed_plant_t *  event_list,
weed_timecode_t  tc,
weed_plant_t *  shortcut 
)

Definition at line 812 of file events.c.

Referenced by get_audio_block_start(), and get_track_visibility_at_tc().

◆ get_frame_event_clip()

int get_frame_event_clip ( weed_plant_t *  event,
int  layer 
)

◆ get_frame_event_frame()

frames_t get_frame_event_frame ( weed_plant_t *  event,
int  layer 
)

Definition at line 224 of file events.c.

Referenced by move_event_left(), move_event_right(), and pre_analyse().

◆ get_init_events_before()

void** get_init_events_before ( weed_plant_t *  event,
weed_plant_t *  init_event,
boolean  add 
)

Definition at line 936 of file events.c.

◆ get_last_event()

LIVES_GLOBAL_INLINE weed_plant_t* get_last_event ( weed_plant_t *  event_list)

◆ get_last_frame_event()

weed_plant_t* get_last_frame_event ( weed_plant_t *  event_list)

◆ get_next_audio_frame_event()

weed_plant_t* get_next_audio_frame_event ( weed_plant_t *  event)

Definition at line 380 of file events.c.

Referenced by fill_abuffer_from().

◆ get_next_event()

LIVES_GLOBAL_INLINE weed_plant_t* get_next_event ( weed_plant_t *  event)

◆ get_next_frame_event()

weed_plant_t* get_next_frame_event ( weed_plant_t *  event)

◆ get_next_paramchange()

weed_timecode_t get_next_paramchange ( void **  pchange_next,
weed_timecode_t  end_tc 
)

Definition at line 565 of file events.c.

◆ get_prev_audio_frame_event()

weed_plant_t* get_prev_audio_frame_event ( weed_plant_t *  event)

Definition at line 392 of file events.c.

◆ get_prev_event()

LIVES_GLOBAL_INLINE weed_plant_t* get_prev_event ( weed_plant_t *  event)

◆ get_prev_frame_event()

weed_plant_t* get_prev_frame_event ( weed_plant_t *  event)

◆ get_prev_paramchange()

weed_timecode_t get_prev_paramchange ( void **  pchange_prev,
weed_timecode_t  start_tc 
)

Definition at line 575 of file events.c.

◆ get_track_visibility_at_tc()

double* get_track_visibility_at_tc ( weed_plant_t *  event_list,
int  ntracks,
int  nbtracks,
weed_timecode_t  tc,
weed_plant_t **  shortcut,
boolean  bleedthru 
)

calculate the "visibility" of each track at timecode tc

that is to say, only the front track is visible, except if we have a transition and WEED_LEAF_HOST_AUDIO_TRANSITION is set

  • in which case the track visibilty is proportional to the transition parameter

to do this, we need a filter map and a frame/clip stack

if bleedthru is TRUE, all values are set to 1.0

TODO *** make selectable: linear or non-linear

Definition at line 5400 of file events.c.

◆ has_audio_frame()

boolean has_audio_frame ( weed_plant_t *  event_list)

Definition at line 4623 of file events.c.

Referenced by render_to_clip().

◆ has_frame_event_at()

boolean has_frame_event_at ( weed_plant_t *  event_list,
weed_timecode_t  tc,
weed_plant_t **  shortcut 
)

Definition at line 129 of file events.c.

◆ init_event_in_list()

LIVES_GLOBAL_INLINE boolean init_event_in_list ( void **  init_events,
int  num_inits,
weed_plant_t *  event 
)

Definition at line 1550 of file events.c.

Referenced by compare_filter_maps().

◆ init_event_is_process_last()

boolean init_event_is_process_last ( weed_plant_t *  event)

Definition at line 1718 of file events.c.

Referenced by compare_filter_maps().

◆ init_event_is_relevant()

boolean init_event_is_relevant ( weed_plant_t *  init_event,
int  ctrack 
)

Definition at line 859 of file events.c.

Referenced by compare_filter_maps().

◆ insert_audio_event_at()

void insert_audio_event_at ( weed_plant_t *  event,
int  track,
int  clipnum,
double  seek,
double  vel 
)

◆ insert_blank_frame_event_at()

LIVES_GLOBAL_INLINE weed_plant_t* insert_blank_frame_event_at ( weed_plant_t *  event_list,
weed_timecode_t  tc,
weed_plant_t **  shortcut 
)

Definition at line 1472 of file events.c.

Referenced by event_list_add_end_events(), load_frame_image(), and remove_frame_from_event().

◆ insert_event_after()

boolean insert_event_after ( weed_plant_t *  at_event,
weed_plant_t *  event 
)

◆ insert_event_before()

boolean insert_event_before ( weed_plant_t *  at_event,
weed_plant_t *  event 
)

◆ insert_filter_deinit_event_at()

void insert_filter_deinit_event_at ( weed_plant_t *  event_list,
weed_plant_t *  at_event,
weed_plant_t *  event 
)

Definition at line 1043 of file events.c.

◆ insert_filter_init_event_at()

void insert_filter_init_event_at ( weed_plant_t *  event_list,
weed_plant_t *  at_event,
weed_plant_t *  event 
)

Definition at line 1021 of file events.c.

◆ insert_filter_map_event_at()

boolean insert_filter_map_event_at ( weed_plant_t *  event_list,
weed_plant_t *  at_event,
weed_plant_t *  event,
boolean  before_frames 
)

Definition at line 1066 of file events.c.

◆ insert_frame_event_at()

weed_plant_t* insert_frame_event_at ( weed_plant_t *  event_list,
weed_timecode_t  tc,
int  numframes,
int *  clips,
int64_t *  frames,
weed_plant_t **  shortcut 
)

◆ insert_marker_event_at()

weed_plant_t* insert_marker_event_at ( weed_plant_t *  event_list,
weed_plant_t *  at_event,
int  marker_type,
livespointer  data 
)

Definition at line 1418 of file events.c.

Referenced by add_markers().

◆ insert_param_change_event_at()

void insert_param_change_event_at ( weed_plant_t *  event_list,
weed_plant_t *  at_event,
weed_plant_t *  event 
)

Definition at line 1116 of file events.c.

Referenced by filter_init_add_pchanges(), and move_event_right().

◆ is_blank_frame()

boolean is_blank_frame ( weed_plant_t *  event,
boolean  count_audio 
)

Definition at line 523 of file events.c.

Referenced by remove_end_blank_frames().

◆ is_init_pchange()

boolean is_init_pchange ( weed_plant_t *  init_event,
weed_plant_t *  pchange_event 
)

Definition at line 585 of file events.c.

Referenced by append_param_change_event().

◆ lives_event_list_new()

weed_event_t* lives_event_list_new ( weed_event_t elist,
const char *  cdate 
)

◆ move_event_left()

boolean move_event_left ( weed_plant_t *  event_list,
weed_plant_t *  event,
boolean  can_stay,
double  fps 
)

Definition at line 2103 of file events.c.

Referenced by update_filter_events().

◆ move_event_right()

boolean move_event_right ( weed_plant_t *  event_list,
weed_plant_t *  event,
boolean  can_stay,
double  fps 
)

Definition at line 2030 of file events.c.

Referenced by update_filter_events().

◆ move_filter_deinit_event()

void move_filter_deinit_event ( weed_plant_t *  event_list,
weed_timecode_t  new_tc,
weed_plant_t *  deinit_event,
double  fps,
boolean  rescale_pchanges 
)

Definition at line 1892 of file events.c.

Referenced by move_event_left(), and update_filter_events().

◆ move_filter_init_event()

void move_filter_init_event ( weed_plant_t *  event_list,
weed_timecode_t  new_tc,
weed_plant_t *  init_event,
double  fps 
)

Definition at line 1784 of file events.c.

Referenced by move_event_right(), and update_filter_events().

◆ process_events()

weed_plant_t* process_events ( weed_plant_t *  next_event,
boolean  process_audio,
weed_timecode_t  curr_tc 
)

load a frame from the scrap file

Definition at line 3082 of file events.c.

Referenced by get_audio_and_effects_state_at().

◆ rdetw_spinf_changed()

void rdetw_spinf_changed ( LiVESSpinButton *  spinbutton,
livespointer  user_data 
)

Definition at line 6066 of file events.c.

◆ rdetw_spinh_changed()

void rdetw_spinh_changed ( LiVESSpinButton *  spinbutton,
livespointer  user_data 
)

Definition at line 6054 of file events.c.

◆ rdetw_spinw_changed()

void rdetw_spinw_changed ( LiVESSpinButton *  spinbutton,
livespointer  user_data 
)

Definition at line 6060 of file events.c.

◆ remove_audio_for_track()

void remove_audio_for_track ( weed_plant_t *  event,
int  track 
)

Definition at line 1349 of file events.c.

◆ remove_end_blank_frames()

void remove_end_blank_frames ( weed_plant_t *  event_list,
boolean  remove_filter_inits 
)

Definition at line 546 of file events.c.

Referenced by on_mt_delfx_activate().

◆ remove_filter_from_event_list()

void remove_filter_from_event_list ( weed_plant_t *  event_list,
weed_plant_t *  init_event 
)

◆ remove_frame_from_event()

void remove_frame_from_event ( weed_plant_t *  event_list,
weed_plant_t *  event,
int  track 
)

Definition at line 489 of file events.c.

◆ render_events()

lives_render_error_t render_events ( boolean  reset,
boolean  rend_video,
boolean  rend_audio 
)

render mainw->event_list to a clip

the first time, this should be called with reset = TRUE, then always with reset = FALSE for the rest of the rendering each subsequent call will handle one event in the event list (the current event is stored internally and updated on each call).

Video and audio are rendered separately, audio is rendered only when:

  • a new "audio_frame" is reached
  • the end of the list is reached
  • or mainw->flush_audio_tc is set to non-zero,

The first two cases happen automatically, the latter case may be used if a preview is required, to ensure that audio is rendered up to the preview end point.

the resulting output may be to an existing clip or a new one. When rendering to an existing clip (cfile->old_frames > 0) each call may overwrite an existing frame or extend it by (at most) one frame (measured in ouput fps). On this case rec_tc_delta is used to offset input timecodes to output. When outputting to a new clip, rec_tc_delta is ignored and each frame is appended ar the next frame timecode

The event_list is resampled in place, so that out frames coincide with the ouput frame rate (frames may be dropped or duplicated)

  • generally the list would have been pre-quantised using quantise_events() so that this process is smoothed out. In multitrack, in and out frame rates always match so this is not a concern there.

When rendering to a new clip, the frame width, height, fps and audio values (channels, rate etc) (if rendering audio) must be set first.

the event_list is rendered as-is, with the exception that param changes are not applied if rendering in multitrack, since these are interpolated separately. Otherwise, effect inits / deinits, param changes and filter maps are all updated. Seperate filter map pointers are maintained for video and audio and only filters for that stream are updated.

When rendering audio it is most efficient to render as large blocks as possible. These will be broken into smaller chunks internally and the audio filters are applied and updated using these smaller chunks. If rendering audio, the final call should be with mainw->flush_audio_tc set to the event_list length + (1. / cfile->fps) * TICKS_PER_SECOND. If audio ends before this then it will padded to the end with silence. When rendering to an existing clip, the behaviour of audio rendering is undefined.

The following values (lives_render_error_t) may be returned: LIVES_RENDER_READY - returned after the initial call with reset set to TRUE

LIVES_RENDER_PROCESSING - the next video event / audio block was handled successfully

LIVES_RENDER_EFFECTS_PAUSED - processing is paused, the internal state is unchanged

LIVES_RENDER_COMPLETE - the final event in the list was reached

LIVES_RENDER_ERROR_WRITE_FRAME - the output frame could not be written, and the user declined to retr

LIVES_RENDER_ERROR_WRITE_AUDIO LIVES_RENDER_ERROR_READ_AUDIO

tc delta is only used if we are rendering to an existing clip; otherwise resampling should have removed the event but just in case, we ignore it

set audio and video start positions

set the highest quality palette conversions

define the number of backing audio tracks (i.e tracks with audio but no video)

set (fixed) volume levels for input audio tracks

alt label text for when we are rendering audio parts

tc delta is only used if we are rendering to an existing clip; otherwise resampling should have removed the event but just in case, we ignore it

free bufferes to relesae memory

smooth out audio by ignoring tiny seek differences

no more events or audio to flush, rendering complete

Definition at line 3609 of file events.c.

Referenced by render_events_cb(), and start_render_effect_events().

◆ render_events_cb()

lives_render_error_t render_events_cb ( boolean  dummy)

values ignored if first param is FALSE

Definition at line 4447 of file events.c.

Referenced by on_effects_paused(), and start_render_effect_events().

◆ render_to_clip()

boolean render_to_clip ( boolean  new_clip,
boolean  transcode 
)

rendering

will reshow the dialog

Definition at line 4635 of file events.c.

Referenced by on_render_activate().

◆ replace_event()

void replace_event ( weed_plant_t *  event_list,
weed_plant_t *  at_event,
weed_plant_t *  event 
)

Definition at line 347 of file events.c.

Referenced by insert_filter_map_event_at().

◆ reset_ttable()

void reset_ttable ( void  )

Definition at line 486 of file events.c.

◆ restore_host_tags()

void restore_host_tags ( weed_plant_t *  event_list,
weed_timecode_t  curr_tc 
)

Definition at line 1605 of file events.c.

◆ set_render_choice()

void set_render_choice ( LiVESToggleButton *  togglebutton,
livespointer  choice 
)

Definition at line 2176 of file events.c.

◆ set_render_choice_button()

void set_render_choice_button ( LiVESButton *  button,
livespointer  choice 
)

Definition at line 2181 of file events.c.

◆ start_render_effect_events()

boolean start_render_effect_events ( weed_plant_t *  event_list,
boolean  render_vid,
boolean  render_aud 
)

Definition at line 4453 of file events.c.

Referenced by render_to_clip().

◆ unlink_event()

void unlink_event ( weed_plant_t *  event_list,
weed_plant_t *  event 
)

Definition at line 297 of file events.c.

Referenced by delete_event(), and move_event_right().

◆ update_filter_maps()

void update_filter_maps ( weed_plant_t *  event,
weed_plant_t *  end_event,
weed_plant_t *  init_event 
)

Definition at line 1009 of file events.c.

◆ weed_event_get_timecode()

LIVES_GLOBAL_INLINE weed_timecode_t weed_event_get_timecode ( weed_event_t event)

Definition at line 89 of file events.c.

Referenced by append_param_change_event(), audio_process_events_to(), and pre_analyse().

◆ weed_event_get_type()

LIVES_GLOBAL_INLINE int weed_event_get_type ( weed_event_t event)

Definition at line 31 of file events.c.

Referenced by get_audio_and_effects_state_at().

◆ weed_event_set_timecode()

LIVES_GLOBAL_INLINE weed_timecode_t weed_event_set_timecode ( weed_event_t event,
weed_timecode_t  tc 
)

Definition at line 83 of file events.c.

Referenced by pre_analyse().

◆ weed_frame_event_get_audio_tracks()

LIVES_GLOBAL_INLINE int weed_frame_event_get_audio_tracks ( weed_event_t event,
int **  clips,
double **  seeks 
)

number of actual tracks is actually half of the returned value

Definition at line 59 of file events.c.

Referenced by event_list_add_track(), and insert_audio_event_at().

◆ weed_frame_event_get_tracks()

LIVES_GLOBAL_INLINE int weed_frame_event_get_tracks ( weed_event_t event,
int **  clips,
int64_t **  frames 
)

Definition at line 36 of file events.c.