00001 #ifndef MWINDOW_H
00002 #define MWINDOW_H
00003
00004 #include "arraylist.h"
00005 #include "asset.inc"
00006 #include "assets.inc"
00007 #include "audiodevice.inc"
00008 #include "awindow.inc"
00009 #include "batchrender.inc"
00010 #include "bcwindowbase.inc"
00011 #include "brender.inc"
00012 #include "cache.inc"
00013 #include "channel.inc"
00014 #include "channeldb.inc"
00015 #include "cwindow.inc"
00016 #include "bchash.inc"
00017 #include "devicedvbinput.inc"
00018 #include "edit.inc"
00019 #include "edl.inc"
00020 #include "exportedl.inc"
00021 #include "filesystem.inc"
00022 #include "filexml.inc"
00023 #include "framecache.inc"
00024 #include "gwindow.inc"
00025 #include "levelwindow.inc"
00026 #include "loadmode.inc"
00027 #include "mainerror.inc"
00028 #include "mainindexes.inc"
00029 #include "mainprogress.inc"
00030 #include "mainsession.inc"
00031 #include "mainundo.inc"
00032 #include "maxchannels.h"
00033 #include "mutex.inc"
00034 #include "mwindow.inc"
00035 #include "mwindowgui.inc"
00036 #include "new.inc"
00037 #include "patchbay.inc"
00038 #include "playback3d.inc"
00039 #include "playbackengine.inc"
00040 #include "plugin.inc"
00041 #include "pluginserver.inc"
00042 #include "pluginset.inc"
00043 #include "preferences.inc"
00044 #include "preferencesthread.inc"
00045 #include "recordlabel.inc"
00046 #include "removethread.inc"
00047 #include "render.inc"
00048 #include "sharedlocation.inc"
00049 #include "sighandler.inc"
00050 #include "splashgui.inc"
00051 #include "theme.inc"
00052 #include "thread.h"
00053 #include "threadloader.inc"
00054 #include "timebar.inc"
00055 #include "timebomb.h"
00056 #include "tipwindow.inc"
00057 #include "track.inc"
00058 #include "tracking.inc"
00059 #include "tracks.inc"
00060 #include "transition.inc"
00061 #include "transportque.inc"
00062 #include "videowindow.inc"
00063 #include "vwindow.inc"
00064 #include "wavecache.inc"
00065
00066 #include <stdint.h>
00067
00068
00069
00070
00071 class MWindow : public Thread
00072 {
00073 public:
00074 MWindow();
00075 ~MWindow();
00076
00077
00078 void create_objects(int want_gui,
00079 int want_new,
00080 char *config_path);
00081 void show_splash();
00082 void hide_splash();
00083 void start();
00084 void run();
00085
00086 int run_script(FileXML *script);
00087 int new_project();
00088 int delete_project(int flash = 1);
00089
00090 int load_defaults();
00091 int save_defaults();
00092 int set_filename(char *filename);
00093
00094 int get_tracks_height();
00095
00096 int get_tracks_width();
00097
00098 void show_vwindow();
00099 void show_awindow();
00100 void show_lwindow();
00101 void show_cwindow();
00102 void show_gwindow();
00103 void tile_windows();
00104 void set_titles(int value);
00105 int asset_to_edl(EDL *new_edl, Asset *new_asset, RecordLabels *labels = 0);
00106
00107
00108
00109
00110
00111
00112 int paste_assets(double position, Track *dest_track, int overwrite);
00113
00114
00115
00116
00117 void load_assets(ArrayList<Asset*> *new_assets,
00118 double position,
00119 int load_mode,
00120 Track *first_track ,
00121 RecordLabels *labels ,
00122 int edit_labels,
00123 int edit_plugins,
00124 int overwrite);
00125 int paste_edls(ArrayList<EDL*> *new_edls,
00126 int load_mode,
00127 Track *first_track ,
00128 double current_position ,
00129 int edit_labels,
00130 int edit_plugins,
00131 int overwrite);
00132
00133 void update_project(int load_mode);
00134
00135 void fit_selection();
00136
00137 void fit_autos(int doall);
00138 void change_currentautorange(int autogrouptype, int increment, int changemax);
00139 void expand_autos(int changeall, int domin, int domax);
00140 void shrink_autos(int changeall, int domin, int domax);
00141
00142 void find_cursor();
00143
00144 void create_plugindb(int do_audio,
00145 int do_video,
00146 int is_realtime,
00147 int is_transition,
00148 int is_theme,
00149 ArrayList<PluginServer*> &plugindb);
00150
00151 PluginServer* scan_plugindb(char *title,
00152 int data_type);
00153 void dump_plugins();
00154
00155
00156
00157
00158 int load_filenames(ArrayList<char*> *filenames,
00159 int load_mode = LOAD_REPLACE,
00160
00161
00162 int update_filename = 1,
00163 char *reel_name = "cin0000",
00164 int reel_number = 0,
00165 int overwrite_reel = 0);
00166
00167
00168
00169 void test_plugins(EDL *new_edl, char *path);
00170
00171 int interrupt_indexes();
00172
00173
00174 int redraw_time_dependancies();
00175
00176
00177
00178 void next_time_format();
00179 void prev_time_format();
00180 void time_format_common();
00181 int reposition_timebar(int new_pixel, int new_height);
00182 int expand_sample(double fixed_sample = -1);
00183 int zoom_in_sample(double fixed_sample = -1);
00184 int zoom_sample(int64_t zoom_sample, int64_t view_start = -1);
00185 void zoom_amp(int64_t zoom_amp);
00186 void zoom_track(int64_t zoom_track);
00187 int fit_sample();
00188 int move_left(int64_t distance = 0);
00189 int move_right(int64_t distance = 0);
00190 void move_up(int64_t distance = 0);
00191 void move_down(int64_t distance = 0);
00192
00193
00194
00195
00196 int next_label(int shift_down);
00197 int prev_label(int shift_down);
00198
00199 int next_edit_handle(int shift_down);
00200 int prev_edit_handle(int shift_down);
00201 void trackmovement(int track_start);
00202 int samplemovement(int64_t view_start);
00203 void select_all();
00204 int goto_start();
00205 int goto_end();
00206 int expand_y();
00207 int zoom_in_y();
00208 int expand_t();
00209 int zoom_in_t();
00210 void crop_video();
00211 void update_plugins();
00212
00213 void save_backup();
00214 void show_plugin(Plugin *plugin);
00215 void hide_plugin(Plugin *plugin, int lock);
00216 void hide_plugins();
00217
00218
00219 void update_plugin_guis();
00220 void update_plugin_states();
00221 void update_plugin_titles();
00222
00223
00224 void render_plugin_gui(void *data, Plugin *plugin);
00225 void render_plugin_gui(void *data, int size, Plugin *plugin);
00226
00227
00228
00229
00230 int plugin_gui_open(Plugin *plugin);
00231
00232
00233
00234
00235
00236 void map_audio(int pattern);
00237 enum
00238 {
00239 AUDIO_5_1_TO_2,
00240 AUDIO_1_TO_1
00241 };
00242 void add_audio_track_entry(int above, Track *dst);
00243 int add_audio_track(int above, Track *dst);
00244 void add_clip_to_edl(EDL *edl);
00245 void add_video_track_entry(Track *dst = 0);
00246 int add_video_track(int above, Track *dst);
00247
00248 void asset_to_size();
00249 void asset_to_rate();
00250
00251 void clear_entry();
00252
00253
00254
00255 void clear(int clear_handle);
00256 void clear_labels();
00257 int clear_labels(double start, double end);
00258 void concatenate_tracks();
00259 void copy();
00260 int copy(double start, double end);
00261 void cut();
00262
00263
00264 static int create_aspect_ratio(float &w, float &h, int width, int height);
00265
00266 static void create_defaults_path(char *string);
00267
00268 void delete_folder(char *folder);
00269 void delete_inpoint();
00270 void delete_outpoint();
00271
00272 void delete_track();
00273 void delete_track(Track *track);
00274 void delete_tracks();
00275 void detach_transition(Transition *transition);
00276 int feather_edits(int64_t feather_samples, int audio, int video);
00277 int64_t get_feather(int audio, int video);
00278 float get_aspect_ratio();
00279 void insert(double position,
00280 FileXML *file,
00281 int edit_labels,
00282 int edit_plugins,
00283 EDL *parent_edl = 0);
00284
00285
00286
00287 void insert_effects_canvas(double start,
00288 double length);
00289
00290
00291
00292 void insert_effects_cwindow(Track *dest_track);
00293
00294
00295
00296 void insert_effect(char *title,
00297 SharedLocation *shared_location,
00298 Track *track,
00299 PluginSet *plugin_set,
00300 double start,
00301 double length,
00302 int plugin_type);
00303
00304 void match_output_size(Track *track);
00305
00306 void move_edits(ArrayList<Edit*> *edits,
00307 Track *track,
00308 double position,
00309 int behaviour);
00310
00311 void move_effect(Plugin *plugin,
00312 PluginSet *plugin_set,
00313 Track *track,
00314 int64_t position);
00315 void move_plugins_up(PluginSet *plugin_set);
00316 void move_plugins_down(PluginSet *plugin_set);
00317 void move_track_down(Track *track);
00318 void move_tracks_down();
00319 void move_track_up(Track *track);
00320 void move_tracks_up();
00321 void mute_selection();
00322 void new_folder(char *new_folder);
00323 void overwrite(EDL *source);
00324
00325 void paste();
00326
00327 int paste(double start,
00328 double end,
00329 FileXML *file,
00330 int edit_labels,
00331 int edit_plugins);
00332 int paste_output(int64_t startproject,
00333 int64_t endproject,
00334 int64_t startsource_sample,
00335 int64_t endsource_sample,
00336 int64_t startsource_frame,
00337 int64_t endsource_frame,
00338 Asset *asset,
00339 RecordLabels *new_labels);
00340 void paste_silence();
00341
00342 void paste_transition();
00343 void paste_transition_cwindow(Track *dest_track);
00344 void paste_audio_transition();
00345 void paste_video_transition();
00346 void rebuild_indices();
00347
00348 void reset_caches();
00349 void remove_asset_from_caches(Asset *asset);
00350 void remove_assets_from_project(int push_undo = 0);
00351 void remove_assets_from_disk();
00352 void resize_track(Track *track, int w, int h);
00353 void set_auto_keyframes(int value);
00354 void set_labels_follow_edits(int value);
00355
00356
00357 int set_editing_mode(int new_editing_mode);
00358 void toggle_editing_mode();
00359 void set_inpoint(int is_mwindow);
00360 void set_outpoint(int is_mwindow);
00361 void splice(EDL *source);
00362 void toggle_loop_playback();
00363 void trim_selection();
00364
00365
00366 void sync_parameters(int change_type = CHANGE_PARAMS);
00367 void to_clip();
00368 int toggle_label(int is_mwindow);
00369 void undo_entry(BC_WindowBase *calling_window_gui);
00370 void redo_entry(BC_WindowBase *calling_window_gui);
00371
00372
00373 int cut_automation();
00374 int copy_automation();
00375 int paste_automation();
00376 void clear_automation();
00377 void straighten_automation();
00378 int cut_default_keyframe();
00379 int copy_default_keyframe();
00380
00381
00382
00383 int paste_default_keyframe();
00384 int clear_default_keyframe();
00385
00386 int modify_edithandles();
00387 int modify_pluginhandles();
00388 void finish_modify_handles();
00389
00390
00391
00392
00393
00394
00395
00396
00397 void age_caches();
00398 int optimize_assets();
00399
00400
00401 void select_point(double position);
00402 int set_loop_boundaries();
00403
00404
00405 Playback3D *playback_3d;
00406 RemoveThread *remove_thread;
00407
00408 SplashGUI *splash_window;
00409
00410 MainUndo *undo;
00411 BC_Hash *defaults;
00412 Assets *assets;
00413
00414 CICache *audio_cache, *video_cache;
00415
00416
00417 FrameCache *frame_cache;
00418 WaveCache *wave_cache;
00419 Preferences *preferences;
00420 PreferencesThread *preferences_thread;
00421 MainSession *session;
00422 Theme *theme;
00423 MainIndexes *mainindexes;
00424 MainProgress *mainprogress;
00425 BRender *brender;
00426
00427
00428 ArrayList<ColormodelItem*> colormodels;
00429 ArrayList<InterlaceautofixoptionItem*> interlace_asset_autofixoptions;
00430 ArrayList<InterlacemodeItem*> interlace_project_modes;
00431 ArrayList<InterlacemodeItem*> interlace_asset_modes;
00432 ArrayList<InterlacefixmethodItem*> interlace_asset_fixmethods;
00433
00434 int reset_meters();
00435
00436
00437 ChannelDB *channeldb_buz;
00438 ChannelDB *channeldb_v4l2jpeg;
00439
00440
00441
00442
00443 ArrayList<PluginServer*> *plugindb;
00444
00445 ArrayList<PluginServer*> *plugin_guis;
00446
00447
00448
00449 int fix_timing(int64_t &samples_out,
00450 int64_t &frames_out,
00451 int64_t samples_in);
00452
00453
00454 BatchRenderThread *batch_render;
00455 Render *render;
00456
00457 ExportEDL *exportedl;
00458
00459
00460
00461 EDL *edl;
00462
00463 MWindowGUI *gui;
00464
00465 CWindow *cwindow;
00466
00467 VWindow *vwindow;
00468
00469 AWindow *awindow;
00470
00471 GWindow *gwindow;
00472
00473 TipWindow *twindow;
00474
00475 LevelWindow *lwindow;
00476
00477 Mutex *plugin_gui_lock;
00478
00479 Mutex *brender_lock;
00480
00481
00482
00483 DeviceDVBInput *dvb_input;
00484
00485 Mutex *dvb_input_lock;
00486
00487
00488
00489 void init_shm();
00490
00491
00492 void init_channeldb();
00493 void init_render();
00494 void init_exportedl();
00495
00496
00497 void init_brender();
00498
00499 void restart_brender();
00500
00501 void stop_brender();
00502
00503
00504 int brender_available(int position);
00505 void set_brender_start();
00506
00507 void init_error();
00508 static void init_defaults(BC_Hash* &defaults,
00509 char *config_path);
00510 void init_edl();
00511 void init_awindow();
00512 void init_gwindow();
00513 void init_tipwindow();
00514
00515 static void init_plugins(Preferences *preferences,
00516 ArrayList<PluginServer*>* &plugindb,
00517 SplashGUI *splash_window);
00518 static void init_plugin_path(Preferences *preferences,
00519 ArrayList<PluginServer*>* &plugindb,
00520 FileSystem *fs,
00521 SplashGUI *splash_window,
00522 int *counter);
00523 void init_preferences();
00524 void init_signals();
00525 void init_theme();
00526 void init_compositor();
00527 void init_levelwindow();
00528 void init_viewer();
00529 void init_cache();
00530 void init_menus();
00531 void init_indexes();
00532 void init_gui();
00533 void init_3d();
00534 void init_playbackcursor();
00535 void delete_plugins();
00536
00537 void clean_indexes();
00538
00539 SigHandler *sighandler;
00540 };
00541
00542 #endif