Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.0 / cinelerra / mwindow.h
diff --git a/cinelerra-5.0/cinelerra/mwindow.h b/cinelerra-5.0/cinelerra/mwindow.h
deleted file mode 100644 (file)
index 3f0802c..0000000
+++ /dev/null
@@ -1,647 +0,0 @@
-/*
- * CINELERRA
- * Copyright (C) 1997-2014 Adam Williams <broadcast at earthling dot net>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * 
- */
-
-#ifndef MWINDOW_H
-#define MWINDOW_H
-
-#include <stdio.h>
-#include <stdint.h>
-
-#include "arraylist.h"
-#include "asset.inc"
-#include "assets.inc"
-#include "audiodevice.inc"
-#include "awindow.inc"
-#include "batchrender.inc"
-#include "bcwindowbase.inc"
-#include "bdcreate.inc"
-#include "brender.inc"
-#include "cache.inc"
-#include "channel.inc"
-#include "channeldb.inc"
-#include "commercials.inc"
-#include "cwindow.inc"
-#include "bchash.inc"
-#include "devicedvbinput.inc"
-#include "devicempeginput.inc"
-#include "dvdcreate.inc"
-#include "edit.inc"
-#include "edl.inc"
-#include "filesystem.inc"
-#include "filexml.inc"
-#include "framecache.inc"
-#include "gwindow.inc"
-#include "indexable.inc"
-#include "keyframegui.inc"
-#include "levelwindow.inc"
-#include "loadmode.inc"
-#include "mainerror.inc"
-#include "mainindexes.inc"
-#include "mainprogress.inc"
-#include "mainsession.inc"
-#include "mainundo.inc"
-#include "maxchannels.h"
-#include "mutex.inc"
-#include "mwindow.inc"
-#include "mwindowgui.inc"
-#include "new.inc"
-#include "patchbay.inc"
-#include "playback3d.inc"
-#include "playbackengine.inc"
-#include "plugin.inc"
-#include "pluginfclient.inc"
-#include "pluginserver.inc"
-#include "pluginset.inc"
-#include "preferences.inc"
-#include "preferencesthread.inc"
-#include "record.inc"
-#include "recordlabel.inc"
-#include "render.inc"
-#include "sharedlocation.inc"
-#include "sighandler.inc"
-#include "splashgui.inc"
-#include "theme.inc"
-#include "thread.h"
-#include "threadloader.inc"
-#include "timebar.inc"
-#include "timebomb.h"
-#include "tipwindow.inc"
-#include "track.inc"
-#include "tracking.inc"
-#include "tracks.inc"
-#include "transition.inc"
-#include "transportque.inc"
-#include "videowindow.inc"
-#include "vwindow.inc"
-#include "wwindow.inc"
-#include "wavecache.inc"
-
-// All entry points for commands except for window locking should be here.
-// This allows scriptability.
-
-class MWindow : public Thread
-{
-public:
-       MWindow();
-       ~MWindow();
-
-// ======================================== initialization commands
-       void create_objects(int want_gui, 
-               int want_new,
-               char *config_path);
-       void show_splash();
-       void hide_splash();
-       void start();
-       void run();
-
-       int run_script(FileXML *script);
-       int new_project();
-       int delete_project(int flash = 1);
-       void quit(int unlock);
-       int restart() { return restart_status; }
-
-       int load_defaults();
-       int save_defaults();
-       int set_filename(const char *filename);
-// Total vertical pixels in timeline
-       int get_tracks_height();
-// Total horizontal pixels in timeline
-       int get_tracks_width();
-// Show windows
-       void show_vwindow();
-       void show_awindow();
-       void show_lwindow();
-       void show_cwindow();
-       void show_gwindow();
-       int tile_windows(int window_config);
-       char *get_cwindow_display();
-//     void set_titles(int value);
-       void set_screens(int value);
-       int asset_to_edl(EDL *new_edl, 
-               Asset *new_asset, 
-               RecordLabels *labels = 0);
-// Convert nested_edl to a nested EDL in new_edl 
-// suitable for pasting in paste_edls
-       int edl_to_nested(EDL *new_edl, 
-               EDL *nested_edl);
-
-// Entry point to insert assets and insert edls.  Called by TrackCanvas 
-// and AssetPopup when assets are dragged in from AWindow.
-// Takes the drag vectors from MainSession and
-// pastes either assets or clips depending on which is full.
-// Returns 1 if the vectors were full
-       int paste_assets(double position, Track *dest_track);
-       
-// Insert the assets at a point in the EDL.  Called by menueffects,
-// render, and CWindow drop but recording calls paste_edls directly for
-// labels.
-       void load_assets(ArrayList<Indexable*> *new_assets, 
-               double position, 
-               int load_mode,
-               Track *first_track /* = 0 */,
-               RecordLabels *labels /* = 0 */,
-               int edit_labels,
-               int edit_plugins,
-               int edit_autos);
-       int paste_edls(ArrayList<EDL*> *new_edls, 
-               int load_mode, 
-               Track *first_track /* = 0 */,
-               double current_position /* = -1 */,
-               int edit_labels,
-               int edit_plugins,
-               int edit_autos);
-// Reset everything for a load
-       void update_project(int load_mode);
-// Fit selected time to horizontal display range
-       void fit_selection();
-// Fit selected autos to the vertical display range
-       void fit_autos();
-       void expand_autos();
-       void shrink_autos();
-       void zoom_autos(float min, float max);
-// move the window to include the cursor
-       void find_cursor();
-// Search plugindb and put results in argument
-       static void search_plugindb(int do_audio, 
-               int do_video, 
-               int is_realtime, 
-               int is_transition,
-               int is_theme,
-               ArrayList<PluginServer*> &results);
-// Find the plugin whose title matches title and return it
-       static PluginServer* scan_plugindb(char *title,
-               int data_type);
-       static int plugin_exists(const char *plugin_path, ArrayList<PluginServer*> &plugins);
-       static int plugin_exists(char *plugin_path);
-       void dump_plugindb(FILE *fp);
-       void stop_playback(int wait=0);
-
-
-
-       
-       int load_filenames(ArrayList<char*> *filenames, 
-               int load_mode = LOADMODE_REPLACE,
-// Cause the project filename on the top of the window to be updated.
-// Not wanted for loading backups.
-               int update_filename = 1);
-
-// Print out plugins which are referenced in the EDL but not loaded.
-       void test_plugins(EDL *new_edl, char *path);
-
-       int interrupt_indexes();  // Stop index building
-
-       int redraw_time_dependancies();     // after reconfiguring the time format, sample rate, frame rate
-
-// =========================================== movement
-
-       void next_time_format();
-       void prev_time_format();
-       void time_format_common();
-       int reposition_timebar(int new_pixel, int new_height);
-       int expand_sample();
-       int zoom_in_sample();
-       int zoom_sample(int64_t zoom_sample);
-       void zoom_amp(int64_t zoom_amp);
-       void zoom_track(int64_t zoom_track);
-       int fit_sample();
-       int move_left(int64_t distance = 0);
-       int move_right(int64_t distance = 0);
-       void move_up(int64_t distance = 0);
-       void move_down(int64_t distance = 0);
-
-// seek to labels
-// shift_down must be passed by the caller because different windows call
-// into this
-       int next_label(int shift_down);   
-       int prev_label(int shift_down);
-// seek to edit handles
-       int next_edit_handle(int shift_down);
-       int prev_edit_handle(int shift_down);  
-// offset is pixels to add to track_start
-       void trackmovement(int offset, int pane_number);
-// view_start is pixels
-       int samplemovement(int64_t view_start, int pane_number);     
-       void select_all();
-       int goto_start();
-       int goto_end();
-       int goto_position(double position);
-       int expand_y();
-       int zoom_in_y();
-       int expand_t();
-       int zoom_in_t();
-       void split_x();
-       void split_y();
-       void crop_video();
-       void update_plugins();
-// Call after every edit operation
-       void save_backup();
-       void load_backup();
-       void show_plugin(Plugin *plugin);
-       void hide_plugin(Plugin *plugin, int lock);
-       void hide_plugins();
-       void delete_plugin(PluginServer *plugin);
-// Update plugins with configuration changes.
-// Called by TrackCanvas::cursor_motion_event.
-       void update_plugin_guis(int do_keyframe_guis = 1);
-       void update_plugin_states();
-       void update_plugin_titles();
-// Called by Attachmentpoint during playback.
-// Searches for matching plugin and renders data in it.
-       void render_plugin_gui(void *data, Plugin *plugin);
-       void render_plugin_gui(void *data, int size, Plugin *plugin);
-
-// Called from PluginVClient::process_buffer
-// Returns 1 if a GUI for the plugin is open so OpenGL routines can determine if
-// they can run.
-       int plugin_gui_open(Plugin *plugin);
-
-       void show_keyframe_gui(Plugin *plugin);
-       void hide_keyframe_guis();
-       void hide_keyframe_gui(Plugin *plugin);
-       void update_keyframe_guis();
-
-
-// ============================= editing commands ========================
-
-// Map each recordable audio track to the desired pattern
-       void map_audio(int pattern);
-       void remap_audio(int pattern);
-       enum
-       {
-               AUDIO_5_1_TO_2,
-               AUDIO_1_TO_1
-       };
-       void add_audio_track_entry(int above, Track *dst);
-       int add_audio_track(int above, Track *dst);
-       void add_clip_to_edl(EDL *edl);
-       void add_video_track_entry(Track *dst = 0);
-       int add_video_track(int above, Track *dst);
-       void add_subttl_track_entry(Track *dst = 0);
-       int add_subttl_track(int above, Track *dst);
-
-       void asset_to_all();
-       void asset_to_size();
-       void asset_to_rate();
-// Entry point for clear operations.
-       void clear_entry();
-// Clears active region in EDL.
-// If clear_handle, edit boundaries are cleared if the range is 0.
-// Called by paste, record, menueffects, render, and CWindow drop.
-       void clear(int clear_handle);
-       void clear_labels();
-       int clear_labels(double start, double end);
-       void concatenate_tracks();
-       void copy();
-       int copy(double start, double end);
-       void cut();
-
-// Calculate aspect ratio from pixel counts
-       static int create_aspect_ratio(float &w, float &h, int width, int height);
-// Calculate defaults path
-       static void create_defaults_path(char *string, const char *config_file);
-
-       void delete_folder(char *folder);
-       void delete_inpoint();
-       void delete_outpoint();    
-
-       void delete_track();
-       void delete_track(Track *track);
-       void delete_tracks();
-       int feather_edits(int64_t feather_samples, int audio, int video);
-       int64_t get_feather(int audio, int video);
-       float get_aspect_ratio();
-       void insert(double position, 
-               FileXML *file,
-               int edit_labels,
-               int edit_plugins,
-               int edit_autos,
-               EDL *parent_edl /* = 0 */);
-
-// TrackCanvas calls this to insert multiple effects from the drag_pluginservers
-// into pluginset_highlighted.
-       void insert_effects_canvas(double start,
-               double length);
-
-// CWindow calls this to insert multiple effects from 
-// the drag_pluginservers array.
-       void insert_effects_cwindow(Track *dest_track);
-
-// Attach new effect to all recordable tracks
-// single_standalone - attach 1 standalone on the first track and share it with
-// other tracks
-       void insert_effect(char *title, 
-               SharedLocation *shared_location, 
-               int data_type,
-               int plugin_type,
-               int single_standalone);
-
-// This is called multiple times by the above functions.
-// It can't sync parameters.
-       void insert_effect(char *title, 
-               SharedLocation *shared_location, 
-               Track *track,
-               PluginSet *plugin_set,
-               double start,
-               double length,
-               int plugin_type);
-
-       void match_output_size(Track *track);
-// Move edit to new position
-       void move_edits(ArrayList<Edit*> *edits,
-               Track *track,
-               double position);
-// Move effect to position
-       void move_effect(Plugin *plugin,
-               PluginSet *plugin_set,
-               Track *track,
-               int64_t position);
-       void move_plugins_up(PluginSet *plugin_set);
-       void move_plugins_down(PluginSet *plugin_set);
-       void move_track_down(Track *track);
-       void move_tracks_down();
-       void move_track_up(Track *track);
-       void move_tracks_up();
-       void mute_selection();
-       void new_folder(const char *new_folder);
-       void overwrite(EDL *source);
-// For clipboard commands
-       void paste();
-// For splice and overwrite
-       int paste(double start, 
-               double end, 
-               FileXML *file,
-               int edit_labels,
-               int edit_plugins,
-               int edit_autos);
-       int paste_output(int64_t startproject, 
-                               int64_t endproject, 
-                               int64_t startsource_sample, 
-                               int64_t endsource_sample, 
-                               int64_t startsource_frame,
-                               int64_t endsource_frame,
-                               Asset *asset, 
-                               RecordLabels *new_labels);
-       void paste_silence();
-
-// Detach single transition
-       void detach_transition(Transition *transition);
-// Detach all transitions in selection
-       void detach_transitions();
-// Attach dragged transition
-       void paste_transition();
-// Attach transition to all edits in selection
-       void paste_transitions(int track_type, char *title);
-// Attach transition dragged onto CWindow
-       void paste_transition_cwindow(Track *dest_track);
-// Attach default transition to single edit
-       void paste_audio_transition();
-       void paste_video_transition();
-       void shuffle_edits();
-       void reverse_edits();
-       void align_edits();
-       void set_edit_length(double length);
-// Set length of single transition
-       void set_transition_length(Transition *transition, double length);
-// Set length in seconds of all transitions in active range
-       void set_transition_length(double length);
-       
-       void remove_indexfile(Indexable *indexable);
-       void rebuild_indices();
-// Asset removal from caches
-       void reset_caches();
-       void remove_asset_from_caches(Asset *asset);
-       void remove_assets_from_project(int push_undo /* = 0 */, 
-               int redraw /* 1 */,
-               ArrayList<Indexable*> *drag_assets /* mwindow->session->drag_assets */,
-               ArrayList<EDL*> *drag_clips /* mwindow->session->drag_clips */);
-       void remove_assets_from_disk();
-       void resize_track(Track *track, int w, int h);
-       
-       void set_automation_mode(int mode);
-       void set_keyframe_type(int mode);
-       void set_auto_keyframes(int value, int lock_mwindow, int lock_cwindow);
-// Update the editing mode
-       int set_editing_mode(int new_editing_mode, int lock_mwindow, int lock_cwindow);
-       void set_inpoint(int is_mwindow);
-       void set_outpoint(int is_mwindow);
-       void splice(EDL *source);
-       void toggle_loop_playback();
-       void trim_selection();
-// Synchronize EDL settings with all playback engines depending on current 
-// operation.  Doesn't redraw anything.
-       void sync_parameters(int change_type = CHANGE_PARAMS);
-       void to_clip();
-       int toggle_label(int is_mwindow);
-       void undo_entry(BC_WindowBase *calling_window_gui);
-       void redo_entry(BC_WindowBase *calling_window_gui);
-
-
-       int cut_automation();
-       int copy_automation();
-       int paste_automation();
-       void clear_automation();
-       int cut_default_keyframe();
-       int copy_default_keyframe();
-// Use paste_automation to paste the default keyframe in other position.
-// Use paste_default_keyframe to replace the default keyframe with whatever is
-// in the clipboard.
-       int paste_default_keyframe();
-       int clear_default_keyframe();
-
-       int modify_edithandles();
-       int modify_pluginhandles();
-       void finish_modify_handles();
-
-       void dump_plugins(FILE *fp=stdout);
-       void dump_edl(FILE *fp=stdout);
-       void dump_undo(FILE *fp=stdout);
-       void dump_exe(FILE *fp=stdout);
-       static void trap_hook(FILE *fp, void *vp);
-       
-       void reset_android_remote();
-
-// Send new EDL to caches
-       void age_caches();
-       int optimize_assets();            // delete unused assets from the cache and assets
-
-       void select_point(double position);
-       int set_loop_boundaries();         // toggle loop playback and set boundaries for loop playback
-
-
-       Playback3D *playback_3d;
-       SplashGUI *splash_window;
-       
-// Main undo stack
-       MainUndo *undo;
-       BC_Hash *defaults;
-       Assets *assets;
-// CICaches for drawing timeline only
-       CICache *audio_cache, *video_cache;
-// Frame cache for drawing timeline only.
-// Cache drawing doesn't wait for file decoding.
-       FrameCache *frame_cache;
-       WaveCache *wave_cache;
-       Preferences *preferences;
-       PreferencesThread *preferences_thread;
-       MainSession *session;
-       Theme *theme;
-       MainIndexes *mainindexes;
-       MainProgress *mainprogress;
-       BRender *brender;
-       static Commercials *commercials;
-       int commercial_active;
-       int has_commercials();
-
-// Menu items
-       ArrayList<ColormodelItem*> colormodels;
-
-       int reset_meters();
-       void resync_guis();
-
-       int select_asset(Asset *asset, int vstream, int astream, int delete_tracks);
-       int select_asset(int vtrack, int delete_tracks);
-
-// Channel DB for playback only.  Record channel DB's are in record.C
-       ChannelDB *channeldb_buz;
-       ChannelDB *channeldb_v4l2jpeg;
-
-// ====================================== plugins ==============================
-
-// Contains file descriptors for all the dlopens
-       static ArrayList<PluginServer*> *plugindb;
-// Currently visible plugins
-       int64_t plugin_visibility;
-       ArrayList<PluginServer*> *plugin_guis;
-// GUI Plugins to delete
-       ArrayList<PluginServer*> *dead_plugins;
-// Keyframe editors
-       ArrayList<KeyFrameThread*> *keyframe_threads;
-
-// Adjust sample position to line up with frames.
-       int fix_timing(int64_t &samples_out, 
-               int64_t &frames_out, 
-               int64_t samples_in);
-
-
-       CreateBD_Thread *create_bd;
-       CreateDVD_Thread *create_dvd;
-       BatchRenderThread *batch_render;
-       Render *render;
-// Master edl
-       EDL *edl;
-// Main Window GUI
-       MWindowGUI *gui;
-// Compositor
-       CWindow *cwindow;
-// Viewer
-       Mutex *vwindows_lock;
-       ArrayList<VWindow*> vwindows;
-// Asset manager
-       AWindow *awindow;
-// Automation window
-       GWindow *gwindow;
-// Tip of the day
-       TipWindow *twindow;
-// Warning window
-       WWindow *wwindow;
-       void show_warning(int *do_warning, const char *text);
-// Levels
-       LevelWindow *lwindow;
-// Lock during creation and destruction of GUI
-       Mutex *plugin_gui_lock;
-       Mutex *dead_plugin_lock;
-       Mutex *keyframe_gui_lock;
-// Lock during creation and destruction of brender so playback doesn't use it.
-       Mutex *brender_lock;
-
-// Initialize shared memory
-       void init_shm();
-
-// Initialize channel DB's for playback
-       void init_channeldb();
-       void init_render();
-// These three happen synchronously with each other
-// Make sure this is called after synchronizing EDL's.
-       void init_brender();
-// Restart brender after testing its existence
-       void restart_brender();
-// Stops brender after testing its existence
-       void stop_brender();
-// This one happens asynchronously of the others.  Used by playback to
-// see what frame is background rendered.
-       int brender_available(int position);
-       void set_brender_start();
-       int put_commercial();
-       void activate_commercial() { commercial_active = 1; }
-       void commit_commercial();
-       void undo_commercial();
-       void cut_commercials();
-       int paste_subtitle_text(char *text, double start, double end);
-
-       void init_error();
-       void finit_error();
-       static void init_defaults(BC_Hash* &defaults, char *config_path);
-       void init_edl();
-       void init_awindow();
-       void init_gwindow();
-       void init_tipwindow();
-// Used by MWindow and RenderFarmClient
-       static void get_plugin_path(char *path, const char *plug_dir, const char *fs_path);
-       static int init_plugins(MWindow *mwindow, Preferences *preferences);
-       static int init_ladspa_plugins(MWindow *mwindow, Preferences *preferences);
-       static int check_plugin_index(ArrayList<PluginServer*> &plugins,
-               const char *plug_dir, const char *plug_path);
-       static void init_plugin_index(MWindow *mwindow, Preferences *preferences,
-               FILE *fp, const char *plugin_dir);
-       static int init_ladspa_index(MWindow *mwindow, Preferences *preferences,
-               const char *index_path, const char *plugin_dir);
-       static void scan_plugin_index(MWindow *mwindow, Preferences *preferences,
-               FILE *fp, const char *plug_dir, const char *plug_path, int &idx);
-       static void init_ffmpeg();
-       static void init_ffmpeg_index(MWindow *mwindow, Preferences *preferences, FILE *fp);
-       static int load_plugin_index(MWindow *mwindow, const char *index_path,
-               const char *plugin_dir);
-       static PluginServer* new_ffmpeg_server(MWindow *mwindow, const char *name);
-       void init_preferences();
-       void init_signals();
-       void init_theme();
-       void init_compositor();
-       void init_levelwindow();
-// Called when creating a new viewer to view footage
-       VWindow* get_viewer(int start_it, int idx=-1);
-       void init_cache();
-       void init_menus();
-       void init_indexes();
-       void init_gui();
-       void init_3d();
-       void init_playbackcursor();
-       void init_commercials();
-       static void add_plugins(ArrayList<PluginServer*> &plugins);
-       static void delete_plugins();
-// 
-       void clean_indexes();
-//     TimeBomb timebomb;
-       SigHandler *sighandler;
-       int restart_status;
-       int screens;
-       int in_destructor;
-};
-
-#endif