LiVES 2.4.6

- Main Page
- Namespaces
- Data Structures
- Files

- File List
- Globals

All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
Data Structures | Macros | Enumerations | Functions
multitrack.h File Reference

Go to the source code of this file.

## Data Structures
struct | mt_opts
struct | lives_mt
struct | mt_undo
struct | lives_amixer_t
struct | track_rect
struct | ttable
struct | layout_map

## Macros
#define | CLIP_THUMB_WIDTH ((int)(72.*widget_opts.scale))
#define | CLIP_THUMB_HEIGHT ((int)(72.*widget_opts.scale))
#define | CLIP_LABEL_LENGTH ((int)(20.*widget_opts.scale))
#define | BLOCK_THUMB_WIDTH ((int)(40.*widget_opts.scale))
#define | MT_PLAY_WIDTH_SMALL ((int)(320.*widget_opts.scale))
#define | MT_PLAY_HEIGHT_SMALL ((int)(216.*widget_opts.scale))
#define | MT_PLAY_WIDTH_EXP ((int)(432.*widget_opts.scale))
#define | MT_PLAY_HEIGHT_EXP ((int)(324.*widget_opts.scale))
#define | MT_CTX_WIDTH ((int)(320.*widget_opts.scale))
#define | MT_CTX_HEIGHT ((int)(220.*widget_opts.scale))
#define | FX_BLOCK_WIDTH ((int)(80.*widget_opts.scale))
#define | FX_BLOCK_HEIGHT ((int)(20.*widget_opts.scale))
#define | MT_TRACK_HEIGHT ((int)(25.*widget_opts.scale))
#define | TIMECODE_LENGTH 14
| length of timecode text entry, must be >12 More...
#define | TIMELINE_TABLE_COLUMNS 40
#define | BLOCK_DRAW_SIMPLE 1
#define | BLOCK_DRAW_THUMB 2
#define | BLOCK_DRAW_TYPE BLOCK_DRAW_THUMB
#define | DEF_TIME 120
| default seconds when there is no event_list More...
#define | TRACK_I_HIDDEN_USER (1<<0)
#define | TRACK_I_HIDDEN_SCROLLED (1<<1)
#define | MAX_TRACKS 65536
#define | MAX_VIDEO_TRACKS 65536
#define | MAX_AUDIO_TRACKS 65536

## Enumerations
enum | lives_mt_mouse_mode_t { MOUSE_MODE_MOVE, MOUSE_MODE_SELECT, MOUSE_MODE_COPY }
enum | lives_mt_insert_mode_t { INSERT_MODE_NORMAL, INSERT_MODE_OVERWRITE, INSERT_MODE_FLEX, INSERT_MODE_FILL }
enum | lives_mt_grav_mode_t { GRAV_MODE_NORMAL, GRAV_MODE_LEFT, GRAV_MODE_RIGHT }
enum | lives_mt_undo_t { MT_UNDO_NONE =0, MT_UNDO_INSERT_BLOCK =1, MT_UNDO_INSERT_AUDIO_BLOCK =2, MT_UNDO_APPLY_FILTER =512, MT_UNDO_DELETE_FILTER =513, MT_UNDO_SPLIT =514, MT_UNDO_SPLIT_MULTI =515, MT_UNDO_FILTER_MAP_CHANGE =516, MT_UNDO_DELETE_BLOCK =1024, MT_UNDO_MOVE_BLOCK =1025, MT_UNDO_REMOVE_GAPS =1026, MT_UNDO_DELETE_AUDIO_BLOCK =1027, MT_UNDO_MOVE_AUDIO_BLOCK =1028, MT_UNDO_INSERT_GAP =1029 }
enum | lives_mt_nb_error_t { NB_ERROR_SEL, NB_ERROR_NOEFFECT, NB_ERROR_NOTRANS, NB_ERROR_NOCOMP, NB_ERROR_NOCLIP }
enum | lives_mt_poly_state_t { POLY_NONE =0, POLY_CLIPS, POLY_IN_OUT, POLY_FX_STACK, POLY_EFFECTS, POLY_TRANS, POLY_COMP, POLY_PARAMS }
enum | lives_direction_t { DIRECTION_NEGATIVE, DIRECTION_POSITIVE }
enum | lives_mt_last_fx_type_t { MT_LAST_FX_NONE =0, MT_LAST_FX_BLOCK, MT_LAST_FX_REGION }
enum | lives_mt_fx_order_t { FX_ORD_NONE =0, FX_ORD_BEFORE, FX_ORD_AFTER }
enum | lives_mt_block_state_t { BLOCK_UNSELECTED =0, BLOCK_SELECTED }
enum | lives_lmap_error_t { LMAP_ERROR_MISSING_CLIP =1, LMAP_ERROR_CLOSE_FILE =2, LMAP_ERROR_DELETE_FRAMES =3, LMAP_ERROR_DELETE_AUDIO =4, LMAP_ERROR_SHIFT_FRAMES =65, LMAP_ERROR_ALTER_FRAMES =66, LMAP_ERROR_SHIFT_AUDIO =67, LMAP_ERROR_ALTER_AUDIO =68, LMAP_INFO_SETNAME_CHANGED =1024 }

## Functions
lives_mt * | multitrack (weed_plant_t *, int orig_file, double fps)
| create and return lives_mt struct More...
void | mt_init_tracks (lives_mt *, boolean set_min_max)
| add basic tracks, or set tracks from mt->event_list More...
boolean | on_multitrack_activate (LiVESMenuItem *menuitem, weed_plant_t *event_list)
| menuitem callback More...
boolean | multitrack_delete (lives_mt *, boolean save)
void | polymorph (lives_mt *, lives_mt_poly_state_t poly)
void | mt_desensitise (lives_mt *)
void | mt_sensitise (lives_mt *)
void | add_aparam_menuitems (lives_mt *)
void | insert_here_cb (LiVESMenuItem *, livespointer mt)
void | insert_audio_here_cb (LiVESMenuItem *, livespointer mt)
void | insert_at_ctx_cb (LiVESMenuItem *, livespointer mt)
void | insert_audio_at_ctx_cb (LiVESMenuItem *, livespointer mt)
void | multitrack_end_cb (LiVESMenuItem *, livespointer mt)
void | delete_block_cb (LiVESMenuItem *, livespointer mt)
void | selblock_cb (LiVESMenuItem *, livespointer mt)
void | list_fx_here_cb (LiVESMenuItem *, livespointer mt)
void | edit_start_end_cb (LiVESMenuItem *, livespointer mt)
void | close_clip_cb (LiVESMenuItem *, livespointer mt)
void | show_clipinfo_cb (LiVESMenuItem *, livespointer mt)
boolean | multitrack_insert (LiVESMenuItem *, livespointer mt)
track_rect * | move_block (lives_mt *, track_rect *block, double timesecs, int old_track, int new_track)
void | update_grav_mode (lives_mt *)
void | update_insert_mode (lives_mt *)
boolean | on_render_activate (LiVESMenuItem *, livespointer mt)
void | mt_set_autotrans (int idx)
weed_plant_t * | add_blank_frames_up_to (weed_plant_t *event_list, weed_plant_t *start_event, weed_timecode_t end_tc, double fps)
void | on_cback_audio_activate (LiVESMenuItem *, livespointer mt)
LiVESWidget * | add_audio_track (lives_mt *, int trackno, boolean behind)
int | add_video_track_behind (LiVESMenuItem *, livespointer mt)
int | add_video_track_front (LiVESMenuItem *, livespointer mt)
void | delete_video_track (lives_mt *, int layer, boolean full)
void | delete_audio_track (lives_mt *, LiVESWidget *eventbox, boolean full)
void | delete_audio_tracks (lives_mt *, LiVESList *list, boolean full)
void | remove_gaps (LiVESMenuItem *, livespointer mt)
void | remove_first_gaps (LiVESMenuItem *, livespointer mt)
void | on_insgap_sel_activate (LiVESMenuItem *, livespointer mt)
void | on_insgap_cur_activate (LiVESMenuItem *, livespointer mt)
void | on_split_activate (LiVESMenuItem *, livespointer mt)
void | scroll_tracks (lives_mt *, int top_track, boolean set_value)
boolean | track_arrow_pressed (LiVESWidget *ahbox, LiVESXEventButton *, livespointer mt)
void | track_select (lives_mt *)
| must call after setting mt->current_track More...
boolean | mt_track_is_audio (lives_mt *, int ntrack)
| return TRUE if ntrack is a valid backing audio track More...
boolean | mt_track_is_video (lives_mt *, int ntrack)
| return TRUE if ntrack is a valid video track More...
char * | get_track_name (lives_mt *mt, int track_num, boolean is_audio)
void | mt_do_autotransition (lives_mt *, track_rect *block)
| call this on a block to apply autotransition on it More...
void | set_track_label_string (lives_mt *mt, int track, const char *label)
LiVESWidget * | get_eventbox_for_track (lives_mt *mt, int ntrack)
void | on_rename_track_activate (LiVESMenuItem *menuitem, livespointer mt)
boolean | on_track_click (LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
boolean | on_atrack_click (LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
boolean | on_track_header_click (LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
boolean | on_track_between_click (LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
boolean | on_track_release (LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt)
boolean | on_atrack_release (LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt)
boolean | on_track_header_release (LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
boolean | on_track_between_release (LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
boolean | on_track_move (LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt)
boolean | on_track_header_move (LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt)
void | unselect_all (lives_mt *)
| unselect all blocks More...
void | insert_frames (int filenum, weed_timecode_t offset_start, weed_timecode_t offset_end, weed_timecode_t tc, lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block)
void | insert_audio (int filenum, weed_timecode_t offset_start, weed_timecode_t offset_end, weed_timecode_t tc, double avel, lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block)
void | on_seltrack_toggled (LiVESWidget *, livespointer mt)
void | scroll_track_by_scrollbar (LiVESScrollbar *sbar, livespointer mt)
void | in_out_start_changed (LiVESWidget *, livespointer mt)
void | in_out_end_changed (LiVESWidget *, livespointer mt)
void | in_anchor_toggled (LiVESToggleButton *, livespointer mt)
void | out_anchor_toggled (LiVESToggleButton *, livespointer mt)
void | avel_reverse_toggled (LiVESToggleButton *, livespointer mt)
void | avel_spin_changed (LiVESSpinButton *, livespointer mt)
track_rect * | find_block_by_uid (lives_mt *mt, ulong uid)
ulong | mt_get_last_block_uid (lives_mt *mt)
| get index of last inserted (wallclock time) block for track More...
int | mt_get_block_count (lives_mt *, int ntrack)
| count blocks in track More...
double | mt_get_block_sttime (lives_mt *, int ntrack, int iblock)
| return time in seconds of first frame event in block More...
double | mt_get_block_entime (lives_mt *, int ntrack, int iblock)
| get timeline start time of block More...
track_rect * | get_block_from_track_and_time (lives_mt *mt, int track, double time)
| get timeline end time of block More...
int | get_track_for_block (track_rect *block)
| return track number for a given block More...
int | get_clip_for_block (track_rect *block)
void | mt_tl_move_relative (lives_mt *, double pos_rel)
void | mt_tl_move (lives_mt *, double pos_abs)
void | set_timeline_end_secs (lives_mt *, double secs)
boolean | on_timeline_press (LiVESWidget *, LiVESXEventButton *, livespointer mt)
boolean | on_timeline_release (LiVESWidget *, LiVESXEventButton *, livespointer mt)
boolean | on_timeline_update (LiVESWidget *, LiVESXEventMotion *, livespointer mt)
void | draw_region (lives_mt *mt)
void | tc_to_rs (LiVESMenuItem *, livespointer mt)
void | tc_to_re (LiVESMenuItem *, livespointer mt)
void | rs_to_tc (LiVESMenuItem *, livespointer mt)
void | re_to_tc (LiVESMenuItem *, livespointer mt)
boolean | mt_mark_callback (LiVESAccelGroup *group, LiVESObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
void | multitrack_clear_marks (LiVESMenuItem *, livespointer mt)
void | mt_show_current_frame (lives_mt *, boolean return_layer)
| preview the current frame More...
void | mt_clear_timeline (lives_mt *mt)
void | clear_context (lives_mt *)
void | add_context_label (lives_mt *, const char *text)
void | mouse_mode_context (lives_mt *)
void | do_sel_context (lives_mt *)
void | do_fx_list_context (lives_mt *, int fxcount)
void | do_fx_move_context (lives_mt *mt)
void | multitrack_playall (lives_mt *)
void | multitrack_play_sel (LiVESMenuItem *, livespointer mt)
void | animate_multitrack (lives_mt *)
void | unpaint_line (lives_mt *, LiVESWidget *eventbox)
void | unpaint_lines (lives_mt *)
void | mt_prepare_for_playback (lives_mt *)
void | mt_post_playback (lives_mt *)
void | on_next_node_clicked (LiVESWidget *, livespointer mt)
void | on_prev_node_clicked (LiVESWidget *, livespointer mt)
void | on_del_node_clicked (LiVESWidget *, livespointer mt)
void | on_node_spin_value_changed (LiVESSpinButton *, livespointer mt)
double | mt_get_effect_time (lives_mt *)
void | on_frame_preview_clicked (LiVESButton *, livespointer mt)
void | show_preview (lives_mt *, weed_timecode_t tc)
boolean | add_mt_param_box (lives_mt *)
weed_plant_t * | get_prev_fm (lives_mt *, int current_track, weed_plant_t *frame)
weed_plant_t * | get_next_fm (lives_mt *, int current_track, weed_plant_t *frame)
void | on_prev_fm_clicked (LiVESWidget *button, livespointer mt)
void | on_next_fm_clicked (LiVESWidget *button, livespointer mt)
void | on_fx_insb_clicked (LiVESWidget *button, livespointer mt)
void | on_fx_insa_clicked (LiVESWidget *button, livespointer mt)
uint32_t | event_list_get_byte_size (lives_mt *, weed_plant_t *event_list, int *num_events)
| returns bytes and sets num_events More...
boolean | event_list_rectify (lives_mt *, weed_plant_t *event_listy)
boolean | make_backup_space (lives_mt *, size_t space_needed)
void | activate_mt_preview (lives_mt *)
| sensitize Show Preview and Apply buttons More...
void ** | mt_get_pchain (void)
void | event_list_free_undos (lives_mt *)
boolean | used_in_current_layout (lives_mt *, int file)
boolean | set_new_set_name (lives_mt *)
LiVESPixbuf * | make_thumb (lives_mt *, int file, int width, int height, int frame, boolean noblanks)
boolean | compare_filter_maps (weed_plant_t *fm1, weed_plant_t *fm2, int ctrack)
| ctrack can be -1 to compare all events, else we cf for ctrack More...
void | move_init_in_filter_map (lives_mt *, weed_plant_t *event_list, weed_plant_t *fmap, weed_plant_t *ifrom, weed_plant_t *ito, int track, boolean after)
void | update_filter_events (lives_mt *, weed_plant_t *first_event, weed_timecode_t start_tc, weed_timecode_t end_tc, int track, weed_timecode_t new_start_tc, int new_track)
void | mt_fixup_events (lives_mt *, weed_plant_t *old_event, weed_plant_t *new_event)
char * | get_eload_filename (lives_mt *mt, boolean allow_auto_reload)
weed_plant_t * | load_event_list (lives_mt *, char *eload_file)
boolean | on_save_event_list_activate (LiVESMenuItem *, livespointer mt)
LiVESList * | load_layout_map (void)
void | add_markers (lives_mt *, weed_plant_t *event_list, boolean add_block_ids)
void | remove_markers (weed_plant_t *event_list)
void | save_layout_map (int *lmap, double *lmap_audio, const char *file, const char *dir)
void | wipe_layout (lives_mt *)
void | migrate_layouts (const char *old_set_name, const char *new_set_name)
LiVESList * | layout_frame_is_affected (int clipno, int frame)
LiVESList * | layout_audio_is_affected (int clipno, double time)
boolean | check_for_layout_del (lives_mt *, boolean exiting)
boolean | on_load_event_list_activate (LiVESMenuItem *, livespointer mt)
void | stored_event_list_free_all (boolean wiped)
void | stored_event_list_free_undos (void)
void | remove_current_from_affected_layouts (lives_mt *)
uint32_t | mt_idle_add (lives_mt *)
void | recover_layout (void)
void | recover_layout_cancelled (boolean is_startup)
boolean | write_backup_layout_numbering (lives_mt *)
void | amixer_show (LiVESButton *, livespointer mt)
void | on_amixer_close_clicked (LiVESButton *, lives_mt *mt)
LiVESWidget * | amixer_add_channel_slider (lives_mt *, int i)
void | mt_change_disp_tracks_ok (LiVESButton *, livespointer mt)
void | mt_swap_play_pause (lives_mt *, boolean put_pause)
char * | set_values_from_defs (lives_mt *, boolean from_prefs)
void | mt_clip_select (lives_mt *, boolean scroll)
void | mt_delete_clips (lives_mt *, int file)
void | mt_init_clips (lives_mt *, int orig_file, boolean add)
boolean | mt_prevclip (LiVESAccelGroup *, LiVESObject *, uint32_t keyval, LiVESXModifierType mod, livespointer)
boolean | mt_nextclip (LiVESAccelGroup *, LiVESObject *, uint32_t keyval, LiVESXModifierType mod, livespointer)

## Macro Definition Documentation

#define BLOCK_DRAW_SIMPLE 1

#define BLOCK_DRAW_THUMB 2

#define BLOCK_DRAW_TYPE BLOCK_DRAW_THUMB

#define BLOCK_THUMB_WIDTH ((int)(40.*widget_opts.scale))

#define CLIP_LABEL_LENGTH ((int)(20.*widget_opts.scale))

#define CLIP_THUMB_HEIGHT ((int)(72.*widget_opts.scale))

#define CLIP_THUMB_WIDTH ((int)(72.*widget_opts.scale))

#define DEF_TIME 120

default seconds when there is no event_list

#define FX_BLOCK_HEIGHT ((int)(20.*widget_opts.scale))

#define FX_BLOCK_WIDTH ((int)(80.*widget_opts.scale))

#define MAX_AUDIO_TRACKS 65536

#define MAX_TRACKS 65536

#define MAX_VIDEO_TRACKS 65536

#define MT_CTX_HEIGHT ((int)(220.*widget_opts.scale))

#define MT_CTX_WIDTH ((int)(320.*widget_opts.scale))

#define MT_PLAY_HEIGHT_EXP ((int)(324.*widget_opts.scale))

#define MT_PLAY_HEIGHT_SMALL ((int)(216.*widget_opts.scale))

#define MT_PLAY_WIDTH_EXP ((int)(432.*widget_opts.scale))

#define MT_PLAY_WIDTH_SMALL ((int)(320.*widget_opts.scale))

#define MT_TRACK_HEIGHT ((int)(25.*widget_opts.scale))

#define TIMECODE_LENGTH 14

length of timecode text entry, must be >12

#define TIMELINE_TABLE_COLUMNS 40

#define TRACK_I_HIDDEN_SCROLLED (1<<1)

#define TRACK_I_HIDDEN_USER (1<<0)

## Enumeration Type Documentation

enum lives_direction_t

Enumerator
DIRECTION_NEGATIVE |
DIRECTION_POSITIVE |

enum lives_lmap_error_t

Enumerator
LMAP_ERROR_MISSING_CLIP |
LMAP_ERROR_CLOSE_FILE |
LMAP_ERROR_DELETE_FRAMES |
LMAP_ERROR_DELETE_AUDIO |
LMAP_ERROR_SHIFT_FRAMES |
LMAP_ERROR_ALTER_FRAMES |
LMAP_ERROR_SHIFT_AUDIO |
LMAP_ERROR_ALTER_AUDIO |
LMAP_INFO_SETNAME_CHANGED |

enum lives_mt_block_state_t

Enumerator
BLOCK_UNSELECTED |
BLOCK_SELECTED |

enum lives_mt_fx_order_t

Enumerator
FX_ORD_NONE |
FX_ORD_BEFORE |
FX_ORD_AFTER |

enum lives_mt_grav_mode_t

Enumerator
GRAV_MODE_NORMAL |
GRAV_MODE_LEFT |
GRAV_MODE_RIGHT |

enum lives_mt_insert_mode_t

Enumerator
INSERT_MODE_NORMAL | the default (only insert if it fits)
INSERT_MODE_OVERWRITE | overwite existing blocks
INSERT_MODE_FLEX | stretch first gap to fit block
INSERT_MODE_FILL | insert enough to fill gap (from selection start or end depending on gravity)

enum lives_mt_last_fx_type_t

Enumerator
MT_LAST_FX_NONE |
MT_LAST_FX_BLOCK |
MT_LAST_FX_REGION |

enum lives_mt_mouse_mode_t

Enumerator
MOUSE_MODE_MOVE |
MOUSE_MODE_SELECT |
MOUSE_MODE_COPY |

enum lives_mt_nb_error_t

Enumerator
NB_ERROR_SEL |
NB_ERROR_NOEFFECT |
NB_ERROR_NOTRANS |
NB_ERROR_NOCOMP |
NB_ERROR_NOCLIP |

enum lives_mt_poly_state_t

Enumerator
POLY_NONE |
POLY_CLIPS |
POLY_IN_OUT |
POLY_FX_STACK |
POLY_EFFECTS |
POLY_TRANS |
POLY_COMP |
POLY_PARAMS |

enum lives_mt_undo_t

Enumerator
MT_UNDO_NONE | no event_list
MT_UNDO_INSERT_BLOCK |
MT_UNDO_INSERT_AUDIO_BLOCK |
MT_UNDO_APPLY_FILTER |
MT_UNDO_DELETE_FILTER |
MT_UNDO_SPLIT |
MT_UNDO_SPLIT_MULTI |
MT_UNDO_FILTER_MAP_CHANGE |
MT_UNDO_DELETE_BLOCK |
MT_UNDO_MOVE_BLOCK |
MT_UNDO_REMOVE_GAPS |
MT_UNDO_DELETE_AUDIO_BLOCK |
MT_UNDO_MOVE_AUDIO_BLOCK |
MT_UNDO_INSERT_GAP |

## Function Documentation

void activate_mt_preview | ( | lives_mt * |  | ) |

sensitize Show Preview and Apply buttons

void add_aparam_menuitems | ( | lives_mt * |  | ) |

LiVESWidget* add_audio_track | ( | lives_mt * | ,
|  | int | trackno,
|  | boolean | behind
| ) |  |

weed_plant_t* add_blank_frames_up_to | ( | weed_plant_t * | event_list,
|  | weed_plant_t * | start_event,
|  | weed_timecode_t | end_tc,
|  | double | fps
| ) |  |

void add_context_label | ( | lives_mt * | ,
|  | const char * | text
| ) |  |

void add_markers | ( | lives_mt * | ,
|  | weed_plant_t * | event_list,
|  | boolean | add_block_ids
| ) |  |

boolean add_mt_param_box | ( | lives_mt * |  | ) |

int add_video_track_behind | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

int add_video_track_front | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

LiVESWidget* amixer_add_channel_slider | ( | lives_mt * | ,
|  | int | i
| ) |  |

void amixer_show | ( | LiVESButton * | ,
|  | livespointer | mt
| ) |  |

void animate_multitrack | ( | lives_mt * |  | ) |

void avel_reverse_toggled | ( | LiVESToggleButton * | ,
|  | livespointer | mt
| ) |  |

void avel_spin_changed | ( | LiVESSpinButton * | ,
|  | livespointer | mt
| ) |  |

boolean check_for_layout_del | ( | lives_mt * | ,
|  | boolean | exiting
| ) |  |

void clear_context | ( | lives_mt * |  | ) |

void close_clip_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean compare_filter_maps | ( | weed_plant_t * | fm1,
|  | weed_plant_t * | fm2,
|  | int | ctrack
| ) |  |

ctrack can be -1 to compare all events, else we cf for ctrack

void delete_audio_track | ( | lives_mt * | ,
|  | LiVESWidget * | eventbox,
|  | boolean | full
| ) |  |

void delete_audio_tracks | ( | lives_mt * | ,
|  | LiVESList * | list,
|  | boolean | full
| ) |  |

void delete_block_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void delete_video_track | ( | lives_mt * | ,
|  | int | layer,
|  | boolean | full
| ) |  |

void do_fx_list_context | ( | lives_mt * | ,
|  | int | fxcount
| ) |  |

void do_fx_move_context | ( | lives_mt * | mt | ) |

void do_sel_context | ( | lives_mt * |  | ) |

void draw_region | ( | lives_mt * | mt | ) |

< opaque black

void edit_start_end_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void event_list_free_undos | ( | lives_mt * |  | ) |

uint32_t event_list_get_byte_size | ( | lives_mt * | ,
|  | weed_plant_t * | event_list,
|  | int * | num_events
| ) |  |

returns bytes and sets num_events

boolean event_list_rectify | ( | lives_mt * | ,
|  | weed_plant_t * | event_listy
| ) |  |

track_rect* find_block_by_uid | ( | lives_mt * | mt,
|  | ulong | uid
| ) |  |

track_rect* get_block_from_track_and_time | ( | lives_mt * | mt,
|  | int | track,
|  | double | time
| ) |  |

get timeline end time of block

int get_clip_for_block | ( | track_rect * | block | ) |

char* get_eload_filename | ( | lives_mt * | mt,
|  | boolean | allow_auto_reload
| ) |  |

LiVESWidget* get_eventbox_for_track | ( | lives_mt * | mt,
|  | int | ntrack
| ) |  |

weed_plant_t* get_next_fm | ( | lives_mt * | ,
|  | int | current_track,
|  | weed_plant_t * | frame
| ) |  |

weed_plant_t* get_prev_fm | ( | lives_mt * | ,
|  | int | current_track,
|  | weed_plant_t * | frame
| ) |  |

int get_track_for_block | ( | track_rect * | block | ) |

return track number for a given block

char* get_track_name | ( | lives_mt * | mt,
|  | int | track_num,
|  | boolean | is_audio
| ) |  |

void in_anchor_toggled | ( | LiVESToggleButton * | ,
|  | livespointer | mt
| ) |  |

void in_out_end_changed | ( | LiVESWidget * | ,
|  | livespointer | mt
| ) |  |

void in_out_start_changed | ( | LiVESWidget * | ,
|  | livespointer | mt
| ) |  |

void insert_at_ctx_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void insert_audio | ( | int | filenum,
|  | weed_timecode_t | offset_start,
|  | weed_timecode_t | offset_end,
|  | weed_timecode_t | tc,
|  | double | avel,
|  | lives_direction_t | direction,
|  | LiVESWidget * | eventbox,
|  | lives_mt * | ,
|  | track_rect * | in_block
| ) |  |

void insert_audio_at_ctx_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void insert_audio_here_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void insert_frames | ( | int | filenum,
|  | weed_timecode_t | offset_start,
|  | weed_timecode_t | offset_end,
|  | weed_timecode_t | tc,
|  | lives_direction_t | direction,
|  | LiVESWidget * | eventbox,
|  | lives_mt * | ,
|  | track_rect * | in_block
| ) |  |

void insert_here_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

LiVESList* layout_audio_is_affected | ( | int | clipno,
|  | double | time
| ) |  |

LiVESList* layout_frame_is_affected | ( | int | clipno,
|  | int | frame
| ) |  |

void list_fx_here_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

weed_plant_t* load_event_list | ( | lives_mt * | ,
|  | char * | eload_file
| ) |  |

LiVESList* load_layout_map | ( | void |  | ) |

boolean make_backup_space | ( | lives_mt * | ,
|  | size_t | space_needed
| ) |  |

LiVESPixbuf* make_thumb | ( | lives_mt * | ,
|  | int | file,
|  | int | width,
|  | int | height,
|  | int | frame,
|  | boolean | noblanks
| ) |  |

void migrate_layouts | ( | const char * | old_set_name,
|  | const char * | new_set_name
| ) |  |

void mouse_mode_context | ( | lives_mt * |  | ) |

track_rect* move_block | ( | lives_mt * | ,
|  | track_rect * | block,
|  | double | timesecs,
|  | int | old_track,
|  | int | new_track
| ) |  |

void move_init_in_filter_map | ( | lives_mt * | ,
|  | weed_plant_t * | event_list,
|  | weed_plant_t * | fmap,
|  | weed_plant_t * | ifrom,
|  | weed_plant_t * | ito,
|  | int | track,
|  | boolean | after
| ) |  |

void mt_change_disp_tracks_ok | ( | LiVESButton * | ,
|  | livespointer | mt
| ) |  |

void mt_clear_timeline | ( | lives_mt * | mt | ) |

void mt_clip_select | ( | lives_mt * | ,
|  | boolean | scroll
| ) |  |

void mt_delete_clips | ( | lives_mt * | ,
|  | int | file
| ) |  |

void mt_desensitise | ( | lives_mt * |  | ) |

void mt_do_autotransition | ( | lives_mt * | ,
|  | track_rect * | block
| ) |  |

call this on a block to apply autotransition on it

<invalid block

<filter has no (visible) in parameters

< filter has no transition parameter

< cannot transition with self !

< force some visual changes

< cannot transition with self !

void mt_fixup_events | ( | lives_mt * | ,
|  | weed_plant_t * | old_event,
|  | weed_plant_t * | new_event
| ) |  |

int mt_get_block_count | ( | lives_mt * | ,
|  | int | ntrack
| ) |  |

count blocks in track

< no blocks in track

double mt_get_block_entime | ( | lives_mt * | mt,
|  | int | ntrack,
|  | int | iblock
| ) |  |

get timeline start time of block

get timeline start time of block

< invalid track or block number

double mt_get_block_sttime | ( | lives_mt * | ,
|  | int | ntrack,
|  | int | iblock
| ) |  |

return time in seconds of first frame event in block

< invalid track or block number

double mt_get_effect_time | ( | lives_mt * |  | ) |

ulong mt_get_last_block_uid | ( | lives_mt * | mt | ) |

get index of last inserted (wallclock time) block for track

< no blocks in track

void** mt_get_pchain | ( | void |  | ) |

uint32_t mt_idle_add | ( | lives_mt * |  | ) |

void mt_init_clips | ( | lives_mt * | ,
|  | int | orig_file,
|  | boolean | add
| ) |  |

void mt_init_tracks | ( | lives_mt * | ,
|  | boolean | set_min_max
| ) |  |

add basic tracks, or set tracks from mt->event_list

boolean mt_mark_callback | ( | LiVESAccelGroup * | group,
|  | LiVESObject * | obj,
|  | uint32_t | keyval,
|  | LiVESXModifierType | mod,
|  | livespointer | user_data
| ) |  |

boolean mt_nextclip | ( | LiVESAccelGroup * | ,
|  | LiVESObject * | ,
|  | uint32_t | keyval,
|  | LiVESXModifierType | mod,
|  | livespointer |
| ) |  |

void mt_post_playback | ( | lives_mt * |  | ) |

void mt_prepare_for_playback | ( | lives_mt * |  | ) |

boolean mt_prevclip | ( | LiVESAccelGroup * | ,
|  | LiVESObject * | ,
|  | uint32_t | keyval,
|  | LiVESXModifierType | mod,
|  | livespointer |
| ) |  |

void mt_sensitise | ( | lives_mt * |  | ) |

void mt_set_autotrans | ( | int | idx | ) |

void mt_show_current_frame | ( | lives_mt * | ,
|  | boolean | return_layer
| ) |  |

preview the current frame

void mt_swap_play_pause | ( | lives_mt * | ,
|  | boolean | put_pause
| ) |  |

void mt_tl_move | ( | lives_mt * | ,
|  | double | pos_abs
| ) |  |

void mt_tl_move_relative | ( | lives_mt * | ,
|  | double | pos_rel
| ) |  |

boolean mt_track_is_audio | ( | lives_mt * | ,
|  | int | ntrack
| ) |  |

return TRUE if ntrack is a valid backing audio track

boolean mt_track_is_video | ( | lives_mt * | ,
|  | int | ntrack
| ) |  |

return TRUE if ntrack is a valid video track

lives_mt* multitrack | ( | weed_plant_t * | ,
|  | int | orig_file,
|  | double | fps
| ) |  |

create and return lives_mt struct

the autotransitions menu

apply block effect menu

None autotransition

void multitrack_clear_marks | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean multitrack_delete | ( | lives_mt * | ,
|  | boolean | save
| ) |  |

void multitrack_end_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean multitrack_insert | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void multitrack_play_sel | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void multitrack_playall | ( | lives_mt * |  | ) |

void on_amixer_close_clicked | ( | LiVESButton * | ,
|  | lives_mt * | mt
| ) |  |

boolean on_atrack_click | ( | LiVESWidget * | eventbox,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

boolean on_atrack_release | ( | LiVESWidget * | eventbox,
|  | LiVESXEventButton * | event,
|  | livespointer | mt
| ) |  |

void on_cback_audio_activate | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void on_del_node_clicked | ( | LiVESWidget * | ,
|  | livespointer | mt
| ) |  |

void on_frame_preview_clicked | ( | LiVESButton * | ,
|  | livespointer | mt
| ) |  |

void on_fx_insa_clicked | ( | LiVESWidget * | button,
|  | livespointer | mt
| ) |  |

void on_fx_insb_clicked | ( | LiVESWidget * | button,
|  | livespointer | mt
| ) |  |

void on_insgap_cur_activate | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void on_insgap_sel_activate | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean on_load_event_list_activate | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean on_multitrack_activate | ( | LiVESMenuItem * | menuitem,
|  | weed_plant_t * | event_list
| ) |  |

menuitem callback

void on_next_fm_clicked | ( | LiVESWidget * | button,
|  | livespointer | mt
| ) |  |

void on_next_node_clicked | ( | LiVESWidget * | ,
|  | livespointer | mt
| ) |  |

void on_node_spin_value_changed | ( | LiVESSpinButton * | ,
|  | livespointer | mt
| ) |  |

void on_prev_fm_clicked | ( | LiVESWidget * | button,
|  | livespointer | mt
| ) |  |

void on_prev_node_clicked | ( | LiVESWidget * | ,
|  | livespointer | mt
| ) |  |

void on_rename_track_activate | ( | LiVESMenuItem * | menuitem,
|  | livespointer | mt
| ) |  |

boolean on_render_activate | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean on_save_event_list_activate | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void on_seltrack_toggled | ( | LiVESWidget * | ,
|  | livespointer | mt
| ) |  |

void on_split_activate | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean on_timeline_press | ( | LiVESWidget * | ,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

boolean on_timeline_release | ( | LiVESWidget * | ,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

boolean on_timeline_update | ( | LiVESWidget * | ,
|  | LiVESXEventMotion * | ,
|  | livespointer | mt
| ) |  |

boolean on_track_between_click | ( | LiVESWidget * | eventbox,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

boolean on_track_between_release | ( | LiVESWidget * | eventbox,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

boolean on_track_click | ( | LiVESWidget * | eventbox,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

boolean on_track_header_click | ( | LiVESWidget * | eventbox,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

boolean on_track_header_move | ( | LiVESWidget * | widget,
|  | LiVESXEventMotion * | event,
|  | livespointer | mt
| ) |  |

boolean on_track_header_release | ( | LiVESWidget * | eventbox,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

boolean on_track_move | ( | LiVESWidget * | widget,
|  | LiVESXEventMotion * | event,
|  | livespointer | mt
| ) |  |

boolean on_track_release | ( | LiVESWidget * | eventbox,
|  | LiVESXEventButton * | event,
|  | livespointer | mt
| ) |  |

void out_anchor_toggled | ( | LiVESToggleButton * | ,
|  | livespointer | mt
| ) |  |

void polymorph | ( | lives_mt * | ,
|  | lives_mt_poly_state_t | poly
| ) |  |

< can happen during mt exit

void re_to_tc | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void recover_layout | ( | void |  | ) |

void recover_layout_cancelled | ( | boolean | is_startup | ) |

void remove_current_from_affected_layouts | ( | lives_mt * |  | ) |

void remove_first_gaps | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void remove_gaps | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void remove_markers | ( | weed_plant_t * | event_list | ) |

void rs_to_tc | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void save_layout_map | ( | int * | lmap,
|  | double * | lmap_audio,
|  | const char * | file,
|  | const char * | dir
| ) |  |

void scroll_track_by_scrollbar | ( | LiVESScrollbar * | sbar,
|  | livespointer | mt
| ) |  |

void scroll_tracks | ( | lives_mt * | ,
|  | int | top_track,
|  | boolean | set_value
| ) |  |

void selblock_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean set_new_set_name | ( | lives_mt * |  | ) |

void set_timeline_end_secs | ( | lives_mt * | ,
|  | double | secs
| ) |  |

void set_track_label_string | ( | lives_mt * | mt,
|  | int | track,
|  | const char * | label
| ) |  |

char* set_values_from_defs | ( | lives_mt * | ,
|  | boolean | from_prefs
| ) |  |

void show_clipinfo_cb | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void show_preview | ( | lives_mt * | ,
|  | weed_timecode_t | tc
| ) |  |

void stored_event_list_free_all | ( | boolean | wiped | ) |

void stored_event_list_free_undos | ( | void |  | ) |

void tc_to_re | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

void tc_to_rs | ( | LiVESMenuItem * | ,
|  | livespointer | mt
| ) |  |

boolean track_arrow_pressed | ( | LiVESWidget * | ahbox,
|  | LiVESXEventButton * | ,
|  | livespointer | mt
| ) |  |

void track_select | ( | lives_mt * |  | ) |

must call after setting mt->current_track

void unpaint_line | ( | lives_mt * | ,
|  | LiVESWidget * | eventbox
| ) |  |

void unpaint_lines | ( | lives_mt * |  | ) |

void unselect_all | ( | lives_mt * |  | ) |

unselect all blocks

void update_filter_events | ( | lives_mt * | ,
|  | weed_plant_t * | first_event,
|  | weed_timecode_t | start_tc,
|  | weed_timecode_t | end_tc,
|  | int | track,
|  | weed_timecode_t | new_start_tc,
|  | int | new_track
| ) |  |

void update_grav_mode | ( | lives_mt * |  | ) |

void update_insert_mode | ( | lives_mt * |  | ) |

boolean used_in_current_layout | ( | lives_mt * | ,
|  | int | file
| ) |  |

void wipe_layout | ( | lives_mt * |  | ) |

boolean write_backup_layout_numbering | ( | lives_mt * |  | ) |