00001 #ifndef TRACK_H
00002 #define TRACK_H
00003
00004 #include "arraylist.h"
00005 #include "asset.inc"
00006 #include "autoconf.inc"
00007 #include "automation.inc"
00008 #include "datatype.h"
00009 #include "bchash.inc"
00010 #include "edit.inc"
00011 #include "edits.inc"
00012 #include "edl.inc"
00013 #include "filexml.inc"
00014 #include "floatautos.inc"
00015 #include "guicast.h"
00016 #include "keyframe.inc"
00017 #include "linklist.h"
00018 #include "module.inc"
00019 #include "patch.inc"
00020 #include "plugin.inc"
00021 #include "pluginset.inc"
00022 #include "renderengine.inc"
00023 #include "sharedlocation.inc"
00024 #include "theme.inc"
00025 #include "intautos.inc"
00026 #include "trackcanvas.inc"
00027 #include "tracks.inc"
00028 #include "transition.inc"
00029
00030 #include <stdint.h>
00031
00032
00033
00034 class Track : public ListItem<Track>
00035 {
00036 public:
00037 Track(EDL *edl, Tracks *tracks);
00038 Track();
00039 virtual ~Track();
00040
00041 int create_objects();
00042 int get_id();
00043 virtual int load_defaults(BC_Hash *defaults);
00044 int load(FileXML *file, int track_offset, uint32_t load_flags);
00045 virtual int save_header(FileXML *file) { return 0; };
00046 virtual int save_derived(FileXML *file) { return 0; };
00047 virtual int load_header(FileXML *file, uint32_t load_flags) { return 0; };
00048 virtual int load_derived(FileXML *file, uint32_t load_flags) { return 0; };
00049 void equivalent_output(Track *track, double *result);
00050
00051 virtual void copy_from(Track *track);
00052 Track& operator=(Track& track);
00053 virtual PluginSet* new_plugins() { return 0; };
00054
00055 virtual void synchronize_params(Track *track);
00056
00057
00058 virtual int vertical_span(Theme *theme);
00059 int64_t horizontal_span();
00060 void resample(double old_rate, double new_rate);
00061
00062
00063 double get_length();
00064
00065 void get_source_dimensions(double position, int &w, int &h);
00066
00067
00068 void insert_asset(Asset *asset,
00069 double length,
00070 double position,
00071 int track_number);
00072 Plugin* insert_effect(char *title,
00073 SharedLocation *shared_location,
00074 KeyFrame *keyframe,
00075 PluginSet *plugin_set,
00076 double start,
00077 double length,
00078 int plugin_type);
00079 void insert_plugin_set(Track *track, double position);
00080 void detach_effect(Plugin *plugin);
00081
00082 void insert_track(Track *track,
00083 double position,
00084 int replace_default,
00085 int edit_plugins);
00086
00087 void optimize();
00088 int is_muted(int64_t position, int direction);
00089
00090 void move_plugins_up(PluginSet *plugin_set);
00091 void move_plugins_down(PluginSet *plugin_set);
00092 void remove_pluginset(PluginSet *plugin_set);
00093 void remove_asset(Asset *asset);
00094
00095
00096
00097 virtual int64_t to_units(double position, int round);
00098
00099 virtual double to_doubleunits(double position);
00100 virtual double from_units(int64_t position);
00101
00102
00103
00104
00105 virtual int identical(int64_t sample1, int64_t sample2) { return 0; };
00106
00107
00108 Plugin* get_current_plugin(double position,
00109 int plugin_set,
00110 int direction,
00111 int convert_units,
00112 int use_nudge);
00113 Plugin* get_current_transition(double position,
00114 int direction,
00115 int convert_units,
00116 int use_nudge);
00117
00118
00119 void detach_shared_effects(int module);
00120
00121
00122
00123
00124
00125 int is_synthesis(RenderEngine *renderengine,
00126 int64_t position,
00127 int direction);
00128
00129
00130
00131 virtual int is_playable(int64_t position,
00132 int direction);
00133
00134
00135 virtual int direct_copy_possible(int64_t start, int direction, int use_nudge);
00136
00137
00138 int plugin_used(int64_t position, int64_t direction);
00139
00140
00141
00142
00143
00144 virtual int copy_settings(Track *track);
00145 void shift_keyframes(double position, double length, int convert_units);
00146 void shift_effects(double position, double length, int convert_units);
00147 void change_plugins(SharedLocation &old_location,
00148 SharedLocation &new_location,
00149 int do_swap);
00150 void change_modules(int old_location,
00151 int new_location,
00152 int do_swap);
00153
00154 EDL *edl;
00155 Tracks *tracks;
00156
00157 Edits *edits;
00158
00159 ArrayList<PluginSet*> plugin_set;
00160 Automation *automation;
00161
00162
00163 int y_pixel;
00164 int expand_view;
00165 int draw;
00166
00167
00168
00169 int gang;
00170 char title[BCTEXTLEN];
00171 int play;
00172 int record;
00173
00174
00175 int64_t nudge;
00176
00177 int data_type;
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197 int load_automation(FileXML *file);
00198 int load_edits(FileXML *file);
00199
00200 virtual int change_channels(int oldchannels, int newchannels) { return 0; };
00201 virtual int dump();
00202
00203
00204
00205
00206 int copy(double start,
00207 double end,
00208 FileXML *file,
00209 char *output_path = "");
00210 int copy_assets(double start,
00211 double end,
00212 ArrayList<Asset*> *asset_list);
00213 virtual int copy_derived(int64_t start, int64_t end, FileXML *file) { return 0; };
00214 virtual int paste_derived(int64_t start, int64_t end, int64_t total_length, FileXML *file, int ¤t_channel) { return 0; };
00215 int clear(double start,
00216 double end,
00217 int edit_edits,
00218 int edit_labels,
00219 int clear_plugins,
00220 int convert_units,
00221 Edits *trim_edits);
00222
00223
00224 void clear_automation(double selectionstart,
00225 double selectionend,
00226 int shift_autos ,
00227 int default_only );
00228 void straighten_automation(double selectionstart,
00229 double selectionend);
00230 virtual int clear_automation_derived(AutoConf *auto_conf,
00231 double selectionstart,
00232 double selectionend,
00233 int shift_autos = 1) { return 0; };
00234 virtual int clear_derived(double start,
00235 double end) { return 0; };
00236
00237 int copy_automation(double selectionstart,
00238 double selectionend,
00239 FileXML *file,
00240 int default_only,
00241 int autos_only);
00242 virtual int copy_automation_derived(AutoConf *auto_conf,
00243 double selectionstart,
00244 double selectionend,
00245 FileXML *file) { return 0; };
00246 int paste_automation(double selectionstart,
00247 double total_length,
00248 double frame_rate,
00249 int64_t sample_rate,
00250 FileXML *file,
00251 int default_only);
00252 virtual int paste_automation_derived(double selectionstart,
00253 double selectionend,
00254 double total_length,
00255 FileXML *file,
00256 int shift_autos,
00257 int ¤t_pan) { return 0; };
00258 int paste_auto_silence(double start, double end);
00259 virtual int paste_auto_silence_derived(int64_t start, int64_t end) { return 0; };
00260 int scale_time(float rate_scale, int scale_edits, int scale_autos, int64_t start, int64_t end);
00261 virtual int scale_time_derived(float rate_scale, int scale_edits, int scale_autos, int64_t start, int64_t end) { return 0; };
00262 int purge_asset(Asset *asset);
00263 int asset_used(Asset *asset);
00264 int clear_handle(double start,
00265 double end,
00266 int clear_labels,
00267 int clear_plugins,
00268 double &distance);
00269 int paste_silence(double start, double end, int edit_plugins);
00270 virtual int select_translation(int cursor_x, int cursor_y) { return 0; };
00271 virtual int update_translation(int cursor_x, int cursor_y, int shift_down) { return 0; };
00272 int select_auto(AutoConf *auto_conf, int cursor_x, int cursor_y);
00273 virtual int select_auto_derived(float zoom_units, float view_start, AutoConf *auto_conf, int cursor_x, int cursor_y) { return 0; };
00274 int move_auto(AutoConf *auto_conf, int cursor_x, int cursor_y, int shift_down);
00275 virtual int move_auto_derived(float zoom_units, float view_start, AutoConf *auto_conf, int cursor_x, int cursor_y, int shift_down) { return 0; };
00276 int release_auto();
00277 virtual int release_auto_derived() { return 0; };
00278
00279 int automation_is_used(int64_t start, int64_t end);
00280 virtual int automation_is_used_derived(int64_t start, int64_t end) { return 0; }
00281
00282 int popup_transition(int cursor_x, int cursor_y);
00283
00284
00285 int modify_edithandles(double oldposition,
00286 double newposition,
00287 int currentend,
00288 int handle_mode,
00289 int edit_labels,
00290 int edit_plugins);
00291 int modify_pluginhandles(double oldposition,
00292 double newposition,
00293 int currentend,
00294 int handle_mode,
00295 int edit_labels,
00296 Edits *trim_edits);
00297 int select_edit(int cursor_x,
00298 int cursor_y,
00299 double &new_start,
00300 double &new_end);
00301 virtual int end_translation() { return 0; };
00302 virtual int reset_translation(int64_t start, int64_t end) { return 0; };
00303 int feather_edits(int64_t start, int64_t end, int64_t units);
00304 int64_t get_feather(int64_t selectionstart, int64_t selectionend);
00305
00306
00307
00308 int number_of();
00309
00310
00311
00312 virtual int get_dimensions(double &view_start,
00313 double &view_units,
00314 double &zoom_units) { return 0; };
00315
00316 int64_t edit_change_duration(int64_t input_position,
00317 int64_t input_length,
00318 int reverse,
00319 int test_transitions,
00320 int use_nudge);
00321 int64_t plugin_change_duration(int64_t input_position,
00322 int64_t input_length,
00323 int reverse,
00324 int use_nudge);
00325
00326 int need_edit(Edit *current, int test_transitions);
00327
00328
00329 int playable_edit(int64_t position, int direction);
00330
00331
00332
00333 int64_t old_view_start;
00334 int pixel;
00335
00336 int track_w, track_h;
00337
00338
00339
00340
00341 private:
00342
00343 int id;
00344 };
00345
00346 #endif