LiVES  1.6.4-svn
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
events.h
Go to the documentation of this file.
1 // events.h
2 // LiVES
3 // (c) G. Finch 2005 - 2010 <salsaman@xs4all.nl,salsaman@gmail.com>
4 // released under the GNU GPL 3 or later
5 // see file ../COPYING or www.gnu.org for licensing details
6 
7 
8 // functions/structs for event_lists and events
9 
10 #ifndef HAS_LIVES_EVENTS_H
11 #define HAS_LIVES_EVENTS_H
12 
13 weed_plant_t *append_frame_event (weed_plant_t *event_list, weed_timecode_t tc, int numframes,
14  int *clips, int *frames) WARN_UNUSED;
15 weed_plant_t *append_filter_init_event (weed_plant_t *event_list, weed_timecode_t tc,
16  int filter_idx, int num_in_tracks, int key, weed_plant_t *inst) WARN_UNUSED;
17 weed_plant_t *append_filter_deinit_event (weed_plant_t *event_list, weed_timecode_t tc,
18  void *init_event, void **pchain) WARN_UNUSED;
19 weed_plant_t *append_filter_map_event (weed_plant_t *event_list, weed_timecode_t tc, void **init_events) WARN_UNUSED;
20 weed_plant_t *append_param_change_event (weed_plant_t *event_list, weed_timecode_t tc, gint pnum,
21  weed_plant_t *param, void *init_event, void **pchain) WARN_UNUSED;
22 weed_plant_t *append_marker_event (weed_plant_t *event_list, weed_timecode_t tc, int marker_type) WARN_UNUSED;
23 
25 weed_plant_t *insert_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, int numframes,
26  int *clips, int *frames, weed_plant_t **shortcut) WARN_UNUSED;
27 void insert_audio_event_at(weed_plant_t *event_list,weed_plant_t *event, gint track, gint clipnum,
28  gdouble time, gdouble vel);
29 void remove_audio_for_track (weed_plant_t *event, int track);
30 weed_plant_t *insert_blank_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc,
31  weed_plant_t **shortcut) WARN_UNUSED;
32 
33 void remove_frame_from_event (weed_plant_t *event_list, weed_plant_t *event, gint track);
34 void remove_end_blank_frames (weed_plant_t *event_list);
35 void remove_filter_from_event_list(weed_plant_t *event_list, weed_plant_t *init_event);
36 
37 weed_plant_t *process_events (weed_plant_t *next_event, weed_timecode_t curr_tc);
38 void event_list_close_start_gap (weed_plant_t *event_list);
39 void event_list_add_track (weed_plant_t *event_list, gint layer);
40 void event_list_free (weed_plant_t *event_list);
41 
43 void event_list_replace_events (weed_plant_t *event_list, weed_plant_t *new_event_list);
44 
46 weed_plant_t *event_copy_and_insert (weed_plant_t *in_event, weed_plant_t *event_list);
47 
49 gint count_events (weed_plant_t *event_list, gboolean all_events, weed_timecode_t start_tc, weed_timecode_t end_tc);
50 
51 int count_resampled_events (weed_plant_t *event_list, gdouble fps);
52 
53 gboolean event_list_to_block (weed_plant_t *event_list, gint num_events);
54 gdouble event_list_get_end_secs (weed_plant_t *event_list);
55 gdouble event_list_get_start_secs (weed_plant_t *event_list);
56 weed_timecode_t event_list_get_end_tc (weed_plant_t *event_list);
57 weed_timecode_t event_list_get_start_tc (weed_plant_t *event_list);
58 
59 weed_plant_t *get_last_frame_event (weed_plant_t *event_list);
60 weed_plant_t *get_first_frame_event (weed_plant_t *event_list);
61 
62 weed_plant_t *get_next_frame_event (weed_plant_t *event);
63 weed_plant_t *get_prev_frame_event (weed_plant_t *event);
64 
65 weed_plant_t *get_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t *shortcut, gboolean exact);
66 weed_plant_t *get_frame_event_at_or_before (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t *shortcut);
67 gboolean filter_map_after_frame(weed_plant_t *fmap);
68 gboolean init_event_is_relevant(weed_plant_t *init_event, gint ctrack);
69 
70 
71 // definitions in events.c
72 weed_plant_t *get_first_event(weed_plant_t *event_list);
73 weed_plant_t *get_last_event(weed_plant_t *event_list);
74 weed_plant_t *get_prev_event(weed_plant_t *event);
75 weed_plant_t *get_next_event(weed_plant_t *event);
76 
77 
78 
79 
81 #if HAVE_SYSTEM_WEED
82 #include <weed/weed-utils.h>
83 #else
84 #include "../libweed/weed-utils.h"
85 #endif
86 
87 weed_timecode_t get_event_timecode (weed_plant_t *);
88 int get_event_hint (weed_plant_t *);
89 gboolean is_blank_frame (weed_plant_t *, gboolean count_audio);
90 gboolean has_audio_frame(weed_plant_t *event_list);
91 int get_frame_event_clip (weed_plant_t *, int layer);
92 int get_frame_event_frame (weed_plant_t *, int layer);
93 gboolean frame_event_has_frame_for_track (weed_plant_t *event, gint track);
94 gdouble *get_track_visibility_at_tc(weed_plant_t *event_list, gint ntracks, gint n_back_tracks,
95  weed_timecode_t tc, weed_plant_t **shortcut, gboolean bleedthru);
96 
99 
100 typedef struct {
101  gint width;
102  gint height;
103  gdouble fps;
104  gboolean ratio_fps;
105  GtkWidget *dialog;
106  GtkWidget *okbutton;
107  GtkWidget *encoder_combo;
108  GtkWidget *ofmt_combo;
109  GtkWidget *acodec_combo;
110  GtkWidget *acodec_entry;
111  GtkWidget *spinbutton_width;
112  GtkWidget *spinbutton_height;
113  GtkWidget *spinbutton_fps;
116  GtkWidget *always_checkbutton;
117  GtkWidget *always_hbox;
120  gboolean enc_changed;
121  gchar *encoder_name;
123 
124  gboolean is_encoding;
125 
126  gint arate;
127  gint achans;
128  gint asamps;
129  gint aendian;
130 
132 
133 
135 
138 
139 
140 GtkWidget *events_rec_dialog (gboolean allow_mt);
141 gint get_render_choice (void);
142 gboolean deal_with_render_choice (gboolean add_deinit);
143 
144 #define RENDER_CHOICE_DISCARD 0
145 #define RENDER_CHOICE_PREVIEW 1
146 #define RENDER_CHOICE_SAME_CLIP 2
147 #define RENDER_CHOICE_NEW_CLIP 3
148 #define RENDER_CHOICE_MULTITRACK 4
149 #define RENDER_CHOICE_EVENT_LIST 5
150 
151 GtkWidget *create_event_list_dialog (weed_plant_t *event_list, weed_timecode_t start_tc, weed_timecode_t end_tc);
153 
156 
157 gboolean render_to_clip (gboolean new_clip);
158 gboolean start_render_effect_events (weed_plant_t *event_list);
159 
160 
161 // effect insertion/updating
162 void insert_filter_init_event_at(weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event);
163 void **filter_init_add_pchanges (weed_plant_t *event_list, weed_plant_t *filter, weed_plant_t *init_event, int ntracks);
164 void insert_filter_deinit_event_at(weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event);
165 gboolean insert_filter_map_event_at(weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event,
166  gboolean before_frames);
167 weed_plant_t *get_filter_map_before(weed_plant_t *event, gint ctrack, weed_plant_t *stop_event);
168 weed_plant_t *get_filter_map_after(weed_plant_t *event, gint ctrack);
169 void **get_init_events_before(weed_plant_t *event, weed_plant_t *init_event, gboolean add);
170 void update_filter_maps (weed_plant_t *event, weed_plant_t *end_event, weed_plant_t *init_event);
171 void insert_param_change_event_at(weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event);
172 void insert_marker_event_at(weed_plant_t *event_list, weed_plant_t *at_event, int marker_type, gpointer data);
173 
174 void add_init_event_to_filter_map(weed_plant_t *fmap, weed_plant_t *event, void **hints);
175 gboolean init_event_in_list(void **init_events, int num_inits, weed_plant_t *event);
176 gboolean filter_init_has_owner(weed_plant_t *init_event, int track);
177 gboolean init_event_is_process_last(weed_plant_t *event);
178 
179 // effect deletion/moving
180 gboolean move_event_right(weed_plant_t *event_list, weed_plant_t *event, gboolean can_stay, gdouble fps);
181 gboolean move_event_left(weed_plant_t *event_list, weed_plant_t *event, gboolean can_stay, gdouble fps);
182 
183 void move_filter_init_event(weed_plant_t *event_list, weed_timecode_t new_tc, weed_plant_t *init_event, gdouble fps);
184 void move_filter_deinit_event(weed_plant_t *event_list, weed_timecode_t new_tc, weed_plant_t *deinit_event,
185  gdouble fps, gboolean rescale_pchanges);
186 
187 // event deletion
188 void unlink_event(weed_plant_t *event_list, weed_plant_t *event);
189 void delete_event(weed_plant_t *event_list, weed_plant_t *event);
190 
191 // event replacement
192 void replace_event(weed_plant_t *event_list, weed_plant_t *at_event,weed_plant_t *event);
193 
194 // event insertion
195 gboolean insert_event_before(weed_plant_t *at_event,weed_plant_t *event);
196 gboolean insert_event_after(weed_plant_t *at_event,weed_plant_t *event);
197 
198 // param changes
199 void ***get_event_pchains(void);
200 weed_timecode_t get_next_paramchange(void **pchange_next,weed_timecode_t end_tc);
201 weed_timecode_t get_prev_paramchange(void **pchange_next,weed_timecode_t start_tc);
202 gboolean is_init_pchange(weed_plant_t *init_event, weed_plant_t *pchange_event);
203 void free_pchains(gint key);
204 
205 // audio
207 int get_audio_frame_clip (weed_plant_t *event, int layer);
208 
210 double get_audio_frame_vel (weed_plant_t *event, int layer);
211 
213 double get_audio_frame_seek (weed_plant_t *event, int layer);
214 
215 
216 // playback
217 
218 void backup_host_tags(weed_plant_t *event_list, weed_timecode_t curr_tc);
219 void restore_host_tags(weed_plant_t *event_list, weed_timecode_t curr_tc);
220 
221 gboolean has_frame_event_at(weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t **shortcut);
222 
223 
224 #define EVENT_MARKER_BLOCK_START 1
225 #define EVENT_MARKER_BLOCK_UNORDERED 512
226 #define EVENT_MARKER_RECORD_START 1024
227 #define EVENT_MARKER_RECORD_END 1025
228 
229 #define WEED_PLANT_IS_EVENT(plant) (weed_get_plant_type(plant)==WEED_PLANT_EVENT?1:0)
230 #define WEED_PLANT_IS_EVENT_LIST(plant) (weed_get_plant_type(plant)==WEED_PLANT_EVENT_LIST?1:0)
231 
232 #define WEED_EVENT_IS_FRAME(event) (get_event_hint(event)==WEED_EVENT_HINT_FRAME?1:0)
233 #define WEED_EVENT_IS_FILTER_INIT(event) (get_event_hint(event)==WEED_EVENT_HINT_FILTER_INIT?1:0)
234 #define WEED_EVENT_IS_FILTER_DEINIT(event) (get_event_hint(event)==WEED_EVENT_HINT_FILTER_DEINIT?1:0)
235 #define WEED_EVENT_IS_FILTER_MAP(event) (get_event_hint(event)==WEED_EVENT_HINT_FILTER_MAP?1:0)
236 #define WEED_EVENT_IS_PARAM_CHANGE(event) (get_event_hint(event)==WEED_EVENT_HINT_PARAM_CHANGE?1:0)
237 #define WEED_EVENT_IS_MARKER(event) (get_event_hint(event)==WEED_EVENT_HINT_MARKER?1:0)
238 
239 #endif // HAS_LIVES_EVENTS_H