LiVES 1.4.9
|
00001 // events.h 00002 // LiVES 00003 // (c) G. Finch 2005 - 2010 <salsaman@xs4all.nl,salsaman@gmail.com> 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