LiVES 1.3.11-svn
src/events.h
Go to the documentation of this file.
00001 // events.h
00002 // LiVES
00003 // (c) G. Finch 2005 - 2010 <salsaman@xs4all.nl>
00004 // released under the GNU GPL 3 or later
00005 // see file ../COPYING or www.gnu.org for licensing details
00006 
00007 
00008 // functions/structs for event_lists and events
00009 
00010 #ifndef __HAS_EVENTS_H__
00011 #define __HAS_EVENTS_H__
00012 
00013 weed_plant_t *append_frame_event (weed_plant_t *event_list, weed_timecode_t tc, int numframes, int *clips, int *frames) WARN_UNUSED;
00014 weed_plant_t *append_filter_init_event (weed_plant_t *event_list, weed_timecode_t tc, int filter_idx, int num_in_tracks) WARN_UNUSED;
00015 weed_plant_t *append_filter_deinit_event (weed_plant_t *event_list, weed_timecode_t tc, void *init_event, void **pchain) WARN_UNUSED;
00016 weed_plant_t *append_filter_map_event (weed_plant_t *event_list, weed_timecode_t tc, void **init_events) WARN_UNUSED;
00017 weed_plant_t *append_param_change_event (weed_plant_t *event_list, weed_timecode_t tc, gint pnum, weed_plant_t *param, void *init_event, void **pchain) WARN_UNUSED;
00018 weed_plant_t *append_marker_event (weed_plant_t *event_list, weed_timecode_t tc, int marker_type) WARN_UNUSED;
00019 
00021 weed_plant_t *insert_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, int numframes, int *clips, int *frames, weed_plant_t **shortcut) WARN_UNUSED;
00022 void insert_audio_event_at(weed_plant_t *event_list,weed_plant_t *event, gint track, gint clipnum, gdouble time, gdouble vel);
00023 void remove_audio_for_track (weed_plant_t *event, int track);
00024 weed_plant_t *insert_blank_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t **shortcut) WARN_UNUSED;
00025 
00026 void remove_frame_from_event (weed_plant_t *event_list, weed_plant_t *event, gint track);
00027 void remove_end_blank_frames (weed_plant_t *event_list);
00028 void remove_filter_from_event_list(weed_plant_t *event_list, weed_plant_t *init_event);
00029 
00030 weed_plant_t *process_events (weed_plant_t *next_event, weed_timecode_t curr_tc); 
00031 void event_list_close_start_gap (weed_plant_t *event_list);
00032 void event_list_add_track (weed_plant_t *event_list, gint layer);
00033 void event_list_free (weed_plant_t *event_list);
00034 void event_list_replace_events (weed_plant_t *event_list, weed_plant_t *new_event_list); 
00035 weed_plant_t *event_copy_and_insert (weed_plant_t *in_event, weed_plant_t *event_list); 
00036 gint count_events (weed_plant_t *event_list, gboolean all_events, weed_timecode_t start_tc, weed_timecode_t end_tc); 
00037 
00038 gboolean event_list_to_block (weed_plant_t *event_list, gint num_events);
00039 gdouble event_list_get_end_secs (weed_plant_t *event_list);
00040 gdouble event_list_get_start_secs (weed_plant_t *event_list);
00041 weed_timecode_t event_list_get_end_tc (weed_plant_t *event_list);
00042 weed_timecode_t event_list_get_start_tc (weed_plant_t *event_list);
00043 
00044 weed_plant_t *get_last_frame_event (weed_plant_t *event_list);
00045 weed_plant_t *get_first_frame_event (weed_plant_t *event_list);
00046 
00047 weed_plant_t *get_next_frame_event (weed_plant_t *event);
00048 weed_plant_t *get_prev_frame_event (weed_plant_t *event);
00049 
00050 weed_plant_t *get_frame_event_at (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t *shortcut, gboolean exact);
00051 weed_plant_t *get_frame_event_at_or_before (weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t *shortcut);
00052 gboolean filter_map_after_frame(weed_plant_t *fmap);
00053 gboolean init_event_is_relevant(weed_plant_t *init_event, gint ctrack);
00054 
00055 
00056 // definitions in events.c
00057 weed_plant_t *get_first_event(weed_plant_t *event_list);
00058 weed_plant_t *get_last_event(weed_plant_t *event_list);
00059 weed_plant_t *get_prev_event(weed_plant_t *event);
00060 weed_plant_t *get_next_event(weed_plant_t *event);
00061 
00062 
00063 
00064 
00066 
00067 #include "../libweed/weed-utils.h"
00068 
00069 weed_timecode_t get_event_timecode (weed_plant_t *);
00070 int get_event_hint (weed_plant_t *);
00071 gboolean is_blank_frame (weed_plant_t *, gboolean count_audio);
00072 gboolean has_audio_frame(weed_plant_t *event_list);
00073 int get_frame_event_clip (weed_plant_t *, int layer);
00074 int get_frame_event_frame (weed_plant_t *, int layer);
00075 gboolean frame_event_has_frame_for_track (weed_plant_t *event, gint track);
00076 gdouble *get_track_visibility_at_tc(weed_plant_t *event_list, gint ntracks, gint n_back_tracks, weed_timecode_t tc, weed_plant_t **shortcut, gboolean bleedthru);
00077 
00080 
00081 typedef struct {
00082   gint width;
00083   gint height;
00084   gdouble fps;
00085   gboolean ratio_fps;
00086   GtkWidget *dialog;
00087   GtkWidget *okbutton;
00088   GtkWidget *encoder_combo;
00089   GtkWidget *ofmt_combo;
00090   GtkWidget *acodec_combo;
00091   GtkWidget *acodec_entry;
00092   GtkWidget *spinbutton_width;
00093   GtkWidget *spinbutton_height;
00094   GtkWidget *spinbutton_fps;
00095   GtkWidget *pertrack_checkbutton;
00096   GtkWidget *backaudio_checkbutton;
00097   GtkWidget *always_checkbutton;
00098   GtkWidget *always_hbox;
00099   gulong encoder_name_fn;
00100   gulong encoder_ofmt_fn;
00101   gboolean enc_changed;
00102   gchar *encoder_name;
00103   gboolean suggestion_followed;
00104 
00105   gboolean is_encoding;
00106 
00107   gint arate;
00108   gint achans;
00109   gint asamps;
00110   gint aendian;
00111 
00112 } render_details;
00113 
00114 
00115 render_details *rdet;
00116 
00119 
00120 GtkWidget *events_rec_dialog (void);
00121 gint get_render_choice (void);
00122 gboolean deal_with_render_choice (gboolean add_deinit);
00123 
00124 #define RENDER_CHOICE_DISCARD 0
00125 #define RENDER_CHOICE_PREVIEW 1
00126 #define RENDER_CHOICE_SAME_CLIP 2
00127 #define RENDER_CHOICE_NEW_CLIP 3
00128 #define RENDER_CHOICE_MULTITRACK 4
00129 #define RENDER_CHOICE_EVENT_LIST 5
00130 
00131 GtkWidget *create_event_list_dialog (weed_plant_t *event_list, weed_timecode_t start_tc, weed_timecode_t end_tc);
00132 render_details *create_render_details (gint type);
00133 
00136 
00137 gboolean render_to_clip (gboolean new_clip); 
00138 gboolean start_render_effect_events (weed_plant_t *event_list); 
00139 
00140 
00141 // effect insertion/updating
00142 void insert_filter_init_event_at(weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event);
00143 void **filter_init_add_pchanges (weed_plant_t *event_list, weed_plant_t *filter, weed_plant_t *init_event, int ntracks);
00144 void insert_filter_deinit_event_at(weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event);
00145 gboolean insert_filter_map_event_at(weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event, gboolean before_frames);
00146 weed_plant_t *get_filter_map_before(weed_plant_t *event, gint ctrack, weed_plant_t *stop_event);
00147 weed_plant_t *get_filter_map_after(weed_plant_t *event, gint ctrack);
00148 void **get_init_events_before(weed_plant_t *event, weed_plant_t *init_event, gboolean add);
00149 void update_filter_maps (weed_plant_t *event, weed_plant_t *end_event, weed_plant_t *init_event);
00150 void insert_param_change_event_at(weed_plant_t *event_list, weed_plant_t *at_event, weed_plant_t *event);
00151 void insert_marker_event_at(weed_plant_t *event_list, weed_plant_t *at_event, int marker_type, gpointer data);
00152 
00153 void add_init_event_to_filter_map(weed_plant_t *fmap, weed_plant_t *event, void **hints);
00154 gboolean init_event_in_list(void **init_events, int num_inits, weed_plant_t *event);
00155 gboolean filter_init_has_owner(weed_plant_t *init_event, int track);
00156 gboolean init_event_is_process_last(weed_plant_t *event);
00157 
00158 // effect deletion/moving
00159 gboolean move_event_right(weed_plant_t *event_list, weed_plant_t *event, gboolean can_stay, gdouble fps);
00160 gboolean move_event_left(weed_plant_t *event_list, weed_plant_t *event, gboolean can_stay, gdouble fps);
00161 
00162 void move_filter_init_event(weed_plant_t *event_list, weed_timecode_t new_tc, weed_plant_t *init_event, gdouble fps);
00163 void move_filter_deinit_event(weed_plant_t *event_list, weed_timecode_t new_tc, weed_plant_t *deinit_event, gdouble fps, gboolean rescale_pchanges);
00164 
00165 // event deletion
00166 void unlink_event(weed_plant_t *event_list, weed_plant_t *event);
00167 void delete_event(weed_plant_t *event_list, weed_plant_t *event);
00168 
00169 // event replacement
00170 void replace_event(weed_plant_t *event_list, weed_plant_t *at_event,weed_plant_t *event);
00171 
00172 // event insertion
00173 gboolean insert_event_before(weed_plant_t *at_event,weed_plant_t *event);
00174 gboolean insert_event_after(weed_plant_t *at_event,weed_plant_t *event);
00175 
00176 // param changes
00177 void ***get_event_pchains(void);
00178 weed_timecode_t get_next_paramchange(void **pchange_next,weed_timecode_t end_tc);
00179 weed_timecode_t get_prev_paramchange(void **pchange_next,weed_timecode_t start_tc);
00180 gboolean is_init_pchange(weed_plant_t *init_event, weed_plant_t *pchange_event);
00181 void free_pchains(gint key);
00182 
00183 // audio
00184 int get_audio_frame_clip (weed_plant_t *event, int layer); 
00185 double get_audio_frame_vel (weed_plant_t *event, int layer); 
00186 double get_audio_frame_seek (weed_plant_t *event, int layer); 
00187 
00188 
00189 // playback
00190 
00191 void backup_host_tags(weed_plant_t *event_list, weed_timecode_t curr_tc);
00192 void restore_host_tags(weed_plant_t *event_list, weed_timecode_t curr_tc);
00193 
00194 gboolean has_frame_event_at(weed_plant_t *event_list, weed_timecode_t tc, weed_plant_t **shortcut);
00195 
00196 
00197 #define EVENT_MARKER_BLOCK_START 1
00198 #define EVENT_MARKER_BLOCK_UNORDERED 512
00199 #define EVENT_MARKER_RECORD_START 1024
00200 #define EVENT_MARKER_RECORD_END 1025
00201 
00202 #define WEED_PLANT_IS_EVENT(plant) (weed_get_plant_type(plant)==WEED_PLANT_EVENT?1:0)
00203 #define WEED_PLANT_IS_EVENT_LIST(plant) (weed_get_plant_type(plant)==WEED_PLANT_EVENT_LIST?1:0)
00204 
00205 #define WEED_EVENT_IS_FRAME(event) (get_event_hint(event)==WEED_EVENT_HINT_FRAME?1:0)
00206 #define WEED_EVENT_IS_FILTER_INIT(event) (get_event_hint(event)==WEED_EVENT_HINT_FILTER_INIT?1:0)
00207 #define WEED_EVENT_IS_FILTER_DEINIT(event) (get_event_hint(event)==WEED_EVENT_HINT_FILTER_DEINIT?1:0)
00208 #define WEED_EVENT_IS_FILTER_MAP(event) (get_event_hint(event)==WEED_EVENT_HINT_FILTER_MAP?1:0)
00209 #define WEED_EVENT_IS_PARAM_CHANGE(event) (get_event_hint(event)==WEED_EVENT_HINT_PARAM_CHANGE?1:0)
00210 #define WEED_EVENT_IS_MARKER(event) (get_event_hint(event)==WEED_EVENT_HINT_MARKER?1:0)
00211 
00212 #endif // __HAS_EVENTS_H
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines