4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
32 #include "filexml.inc"
33 #include "indexable.inc"
34 #include "mwindow.inc"
37 #include "transition.inc"
39 // UNITS ARE SAMPLES FOR AUDIO / FRAMES FOR VIDEO
40 // zoom_units was mwindow->zoom_sample for AEdit
42 // Generic edit of something
44 class Edit : public ListItem<Edit>
47 Edit(EDL *edl, Edits *edits);
48 Edit(EDL *edl, Track *track);
54 Indexable* get_source();
55 // Copy from different EDL
56 virtual void copy_from(Edit *edit);
57 // Compare with edit in same EDL
58 virtual int identical(Edit &edit);
59 virtual Edit& operator=(Edit& edit);
60 // Called by Edits and PluginSet.
61 // Compare with edit in different EDL
62 virtual void equivalent_output(Edit *edit, int64_t *result);
63 virtual int operator==(Edit& edit);
64 // When inherited by a plugin need to resample keyframes
65 virtual void synchronize_params(Edit *edit);
66 // Used by Edits::insert_edits to shift plugin keyframes
67 virtual void shift_keyframes(int64_t position) {};
69 // Get size of frame to draw on timeline
73 double frames_per_picon();
74 int copy(int64_t start, int64_t end, FileXML *xml, const char *output_path);
75 // When inherited by a plugin need to resample keyframes
76 virtual void resample(double old_rate, double new_rate) {};
79 virtual void shift(int64_t difference);
80 int shift_start_in(int edit_mode,
88 int shift_start_out(int edit_mode,
96 int shift_end_in(int edit_mode,
104 int shift_end_out(int edit_mode,
113 void insert_transition(char *title);
114 void detach_transition();
115 // Determine if silence depending on existance of asset or plugin title
116 virtual int silence();
118 void set_selected(int v);
120 // Media edit information
121 // Units are native units for the track.
122 // Start of edit in source file normalized to project sample rate.
123 // Normalized because all the editing operations clip startsource relative
124 // to the project sample rate;
126 // Start of edit in project file.
127 int64_t startproject;
128 // # of units in edit.
130 // Channel or layer of source
132 // ID for resource pixmaps
134 // ID for selection groups
136 // User defined title for timeline
137 char user_title[BCTEXTLEN];
138 int is_plugin, is_selected;
139 // edge cannot be optimized
140 int hard_left, hard_right;
143 // Transition if one is present at the beginning of this edit
144 // This stores the length of the transition
145 Transition *transition;
151 // points to an object in edl->assets if set
153 // points to an object in edl->nested_edls if set
155 // Asset and nested_edl are 0 if silence
157 // Parent EDL of this edit
160 int load_properties(FileXML *xml, int64_t &startproject);
161 virtual int load_properties_derived(FileXML *xml) { return 0; };
163 virtual int copy_properties_derived(FileXML *xml,
164 int64_t length_in_selection) { return 0; }
166 int popup_transition(float view_start, float zoom_units, int cursor_x, int cursor_y);
168 // Return 1 if the left handle was selected 2 if the right handle was selected
169 int select_handle(float view_start, float zoom_units,
170 int cursor_x, int cursor_y, int64_t &selection);
171 virtual int get_handle_parameters(int64_t &left, int64_t &right,
172 int64_t &left_sample, int64_t &right_sample, float view_start,
173 float zoom_units) { return 0; }
174 virtual int64_t get_source_end(int64_t default_);
175 void get_title(char *title);
177 int dump(FILE *fp=stdout);
178 virtual int dump_derived() { return 0; }