X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindow.h;h=8f80280f13ef45a412969db698e89a0b6e35bf03;hp=14f736ca3c9280a41e4af3c2a8330abf5df51b83;hb=refs%2Fheads%2Fmaster;hpb=e41864cf7931bfb86f68c5d35d4578dfe161d386 diff --git a/cinelerra-5.1/cinelerra/mwindow.h b/cinelerra-5.1/cinelerra/mwindow.h index 14f736ca..b1b95a3e 100644 --- a/cinelerra-5.1/cinelerra/mwindow.h +++ b/cinelerra-5.1/cinelerra/mwindow.h @@ -1,6 +1,7 @@ /* * CINELERRA * Copyright (C) 1997-2014 Adam Williams + * Copyright (C) 2003-2016 Cinelerra CV contributors * * 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 @@ -23,6 +24,7 @@ #include #include +#include #include "apatchgui.h" #include "arraylist.h" @@ -39,6 +41,7 @@ #include "channel.inc" #include "channeldb.inc" #include "commercials.inc" +#include "convert.inc" #include "cwindow.inc" #include "bchash.inc" #include "devicedvbinput.inc" @@ -62,6 +65,7 @@ #include "mainsession.inc" #include "mainundo.inc" #include "maxchannels.h" +#include "mixersalign.inc" #include "mutex.inc" #include "mwindow.inc" #include "mwindowgui.inc" @@ -70,6 +74,7 @@ #include "playback3d.inc" #include "playbackengine.inc" #include "plugin.inc" +#include "pluginclient.inc" #include "pluginfclient.inc" #include "pluginserver.inc" #include "pluginset.inc" @@ -82,11 +87,11 @@ #include "sharedlocation.inc" #include "sighandler.inc" #include "splashgui.inc" +#include "shuttle.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" @@ -99,11 +104,72 @@ #include "zwindow.inc" #include "wwindow.inc" #include "wavecache.inc" +#include "wintv.inc" +#include "x10tv.inc" #define FONT_SEARCHPATH "fonts" -// All entry points for commands except for window locking should be here. -// This allows scriptability. +class StackItem +{ +public: + EDL *edl, *new_edl; + Indexable *idxbl; + Edit *edit; + MainUndo *undo; + int64_t mtime; + double duration; +}; + +class Stack : public ArrayList +{ +public: +}; + + +#define BEEP_SAMPLE_RATE 48000 + +class Beeper : public Thread +{ +public: + typedef int16_t audio_data_t; + Beeper(MWindow *mwindow); + ~Beeper(); + + void run(); + void start(); + void stop(int wait); + void tone(double freq, double secs, double gain); + + MWindow *mwindow; + double freq, secs, gain; + AudioDevice *audio; + int playing_audio, interrupted; + int audio_pos; +}; + + +class DrawTrackMovement : public Thread +{ +public: + DrawTrackMovement(MWindow *mwindow); + ~DrawTrackMovement(); + void run(); + + MWindow *mwindow; +}; + +class ConfirmRefWindow : public BC_Window +{ +public: + ConfirmRefWindow(MWindow *mwindow, char *path, + int px, int py, int cw, int ch); + ~ConfirmRefWindow(); + void create_objects(); + + MWindow *mwindow; + const char *path; +}; + class MWindow : public Thread { @@ -115,6 +181,7 @@ public: void create_objects(int want_gui, int want_new, char *config_path); + int uses_opengl(); void show_splash(); void hide_splash(); void start(); @@ -129,18 +196,35 @@ public: int load_defaults(); int save_defaults(); int set_filename(const char *filename); + int set_titlebar(const char *filename); // Total vertical pixels in timeline int get_tracks_height(); // Total horizontal pixels in timeline int get_tracks_width(); +// session stack + void stack_push(EDL *edl, Indexable *idxbl); + void stack_pop(); + int save(EDL *edl, char *filename, int stat); + int save(int save_as); + void show_plugins(); + void clip_to_media(); + void media_to_clip(); + int create_ref(Asset *asset, EDL *ref); // Show windows - void show_vwindow(); + void show_vwindow(int raise); + void hide_vwindow(int raise); void show_awindow(); - void show_lwindow(); + void hide_awindow(); void show_cwindow(); + void hide_cwindow(); + void show_lwindow(); + void hide_lwindow(); void show_gwindow(); void hide_gwindow(); void restore_windows(); + void load_layout(const char *layout); + void save_layout(const char *layout); + void delete_layout(const char *layout); int tile_windows(int window_config); char *get_cwindow_display(); void set_screens(int value); @@ -175,14 +259,19 @@ public: int edit_plugins, int edit_autos, int overwrite); + void collect_effects(); + void paste_effects(); + // Reset everything for a load void update_project(int load_mode); + void update_preferences(Preferences *prefs); void update_vwindow(); // Fit selected time to horizontal display range void fit_selection(); // Fit selected autos to the vertical display range - void fit_autos(int doall); + void fit_autos(int all); void change_currentautorange(int autogrouptype, int increment, int changemax); + void update_autorange(int type, int increment, int use_max); void expand_autos(int changeall, int domin, int domax); void shrink_autos(int changeall, int domin, int domax); // move the window to include the cursor @@ -203,36 +292,44 @@ public: void dump_plugindb(FILE *fp); void stop_playback(int wait); void stop_transport(); + void undo_before(const char *description = "", void *creator = 0); + void undo_after(const char *description, uint32_t load_flags, int changes_made = 1); - void queue_mixers(EDL *edl, int command, int wait_tracking, - int use_inout, int update_refresh, int toggle_audio, int loop_play); - ZWindow *create_mixer(Indexable *indexable); - void create_mixers(); + void handle_mixers(EDL *edl, int command, int wait_tracking, + int use_inout, int toggle_audio, int loop_play, float speed); + ZWindow *create_mixer(Indexable *indexable, double position); + void create_mixers(double position = 0); void refresh_mixers(int dir=1); void stop_mixers(); - void close_mixers(int destroy=1); + void close_mixers(int result=1); void open_mixers(); ZWindow *get_mixer(Mixer *&mixer); - void del_mixer(ZWindow *zwindow); + ZWindow *get_mixer(int idx); + void close_mixer(ZWindow *zwindow); int mixer_track_active(Track *track); void update_mixer_tracks(); void start_mixer(); int select_zwindow(ZWindow *zwindow); void tile_mixers(); - + void tile_mixers(int x1, int x2, int y1, int y2); + int masters_to_mixers(); + void mix_masters(); + void set_gang_tracks(int v); int load_filenames(ArrayList *filenames, int load_mode = LOADMODE_REPLACE, + int edl_mode = LOADMODE_EDL_CLIP, // 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); + void test_plugins(EDL *new_edl, const char *path); int interrupt_indexes(); // Stop index building int redraw_time_dependancies(); // after reconfiguring the time format, sample rate, frame rate + void draw_trackmovement(); // after reconfiguring tracks/patchbay guis + DrawTrackMovement *redraw_tracks; // =========================================== movement @@ -245,7 +342,8 @@ public: int zoom_sample(int64_t zoom_sample); void zoom_autos(float min, float max); void zoom_amp(int64_t zoom_amp); - void zoom_track(int64_t zoom_track); + void zoom_atrack(int64_t zoom); + void zoom_vtrack(int64_t zoom); int fit_sample(); int move_left(int64_t distance = 0); int move_right(int64_t distance = 0); @@ -254,6 +352,11 @@ public: int find_selection(double position, int scroll_display = 0); void toggle_camera_xyz(); void toggle_projector_xyz(); + double get_position(); + void set_position(double position); + double get_timecode_offset(); + void set_timecode_offset(double offset); + void align_timecodes(); // seek to labels // shift_down must be passed by the caller because different windows call @@ -265,6 +368,7 @@ public: int prev_edit_handle(int shift_down); // seek to keyframes int nearest_plugin_keyframe(int shift_down, int dir); + int nearest_auto_keyframe(int shift_down, int dir); // offset is pixels to add to track_start void trackmovement(int offset, int pane_number); // view_start is pixels @@ -279,13 +383,16 @@ public: int zoom_in_t(); void split_x(); void split_y(); - void crop_video(); + void crop_video(int mode); void update_plugins(); + void get_backup_path(char *path, int len); + void create_timestamped_copy_from_previous_backup(char *previouspath); // 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_plugin(int plugin_id, int lock); void hide_plugins(); void delete_plugin(PluginServer *plugin); // Update plugins with configuration changes. @@ -297,17 +404,25 @@ public: // 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); + void reset_plugin_gui_frames(Plugin *plugin); + void render_plugin_gui_frames(PluginClientFrames *frames, Plugin *plugin); + double get_tracking_position(); + int get_tracking_direction(); // 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 stop_plugin_guis(); void show_keyframe_gui(Plugin *plugin); void hide_keyframe_guis(); void hide_keyframe_gui(Plugin *plugin); void update_keyframe_guis(); - + int get_hash_color(Edit *edit); + int get_hash_color(int v); + int get_group_color(int v); + int get_title_color(Edit *edit); // ============================= editing commands ======================== @@ -319,13 +434,13 @@ public: 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 add_audio_track_entry(int above, Track *dst); + Track *add_audio_track(int above, Track *dst); + void add_video_track_entry(int above, Track *dst); + Track *add_video_track(int above, Track *dst); + void add_subttl_track_entry(int above, Track *dst); + Track *add_subttl_track(int above, Track *dst); void asset_to_all(); void asset_to_size(); @@ -338,7 +453,12 @@ public: void clear(int clear_handle); void clear_labels(); int clear_labels(double start, double end); + void clear_hard_edges(); + int clear_hard_edges(double start, double end); + void clear_select(); + void select_edits(int v); void concatenate_tracks(); + int copy_flags(int copy_flags=COPY_CLIPBOARD); void copy(); int copy(double start, double end); void cut(); @@ -355,23 +475,18 @@ public: // Calculate defaults path static void create_defaults_path(char *string, const char *config_file); - 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 */); + void insert(double position, FileXML *file, + int edit_labels, int edit_plugins, int edit_autos, + EDL *parent_edl, Track *first_track, int overwrite); // TrackCanvas calls this to insert multiple effects from the drag_pluginservers // into pluginset_highlighted. - void insert_effects_canvas(double start, - double length); + void insert_effects_canvas(Track *dest_track, double start, double length); // CWindow calls this to insert multiple effects from // the drag_pluginservers array. @@ -382,35 +497,36 @@ public: // other tracks void insert_effect(char *title, SharedLocation *shared_location, - int data_type, - int plugin_type, - int single_standalone); + 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); + Track *track, PluginSet *plugin_set, + double start, double length, int plugin_type); void match_output_size(Track *track); + void delete_edit(Edit *edit, const char *msg, int collapse=0); + void delete_edits(ArrayList *edits, const char *msg, int collapse=0); + void delete_edits(int collapse=0); + void cut_selected_edits(int collapse, int packed); // Move edit to new position - void move_edits(ArrayList *edits, - Track *track, - double position, - int behaviour); // behaviour: 0 - old style (cut and insert elswhere), 1- new style - (clear and overwrite elsewere) + void move_edits(ArrayList *edits, Track *track, double position, + int mode); // mode: 0 - mute and overwrite, 1 - cut and paste + void selected_edits_to_clipboard(int packed); + void paste_clipboard(Track *first_track, double position, int overwrite, + int edit_edits, int edit_labels, int edit_autos, int edit_plugins); + void move_group(EDL *group, Track *first_track, double position, int overwrite); // Move effect to position - void move_effect(Plugin *plugin, - Track *track, - int64_t position); - void move_effect(Plugin *plugin, - PluginSet *plugin_set, - int64_t position); + void move_effect(Plugin *plugin, Track *track, int64_t position); + void move_effect(Plugin *plugin, PluginSet *plugin_set, int64_t position); void move_plugins_up(PluginSet *plugin_set); void move_plugins_down(PluginSet *plugin_set); + void roll_track_down(Track *track); + void roll_tracks_down(); + void roll_track_up(Track *track); + void roll_tracks_up(); void move_track_down(Track *track); void move_tracks_down(); void move_track_up(Track *track); @@ -420,11 +536,13 @@ public: void delete_folder(char *folder); // For clipboard commands void paste(); + void paste(double start, Track *first_track, int clear_selection, int overwrite); // For splice and overwrite void overwrite(EDL *source, int all); void splice(EDL *source, int all); int paste(double start, double end, FileXML *file, - int edit_labels, int edit_plugins, int edit_autos); + int edit_labels, int edit_plugins, int edit_autos, + Track *first_track, int overwrite); 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, @@ -456,10 +574,9 @@ public: 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 */, + void reset_caches(int locked); + void remove_from_caches(Indexable *idxbl); + void remove_assets_from_project(int push_undo, int redraw, int delete_indexes, ArrayList *drag_assets /* mwindow->session->drag_assets */, ArrayList *drag_clips /* mwindow->session->drag_clips */); void remove_assets_from_disk(); @@ -467,16 +584,17 @@ public: void set_automation_mode(int mode); void set_keyframe_type(int mode); - void set_auto_keyframes(int value, int lock_mwindow, int lock_cwindow); + void set_auto_keyframes(int value); + void set_span_keyframes(int value); void set_auto_visibility(Autos *autos, int value); void set_labels_follow_edits(int value); // Update the editing mode - int set_editing_mode(int new_editing_mode, int lock_mwindow, int lock_cwindow); + int set_editing_mode(int new_editing_mode); void toggle_editing_mode(); - void set_inpoint(int is_mwindow); - void set_outpoint(int is_mwindow); - void unset_inoutpoint(int is_mwindow); + void set_inpoint(); + void set_outpoint(); + void unset_inoutpoint(); void toggle_loop_playback(); void trim_selection(); // Synchronize EDL settings with all playback engines depending on current @@ -484,11 +602,12 @@ public: void sync_parameters(int change_type = CHANGE_PARAMS); void save_clip(EDL *new_edl, const char *txt); void to_clip(EDL *edl, const char *txt, int all); - int toggle_label(int is_mwindow); + int toggle_label(); void undo_entry(BC_WindowBase *calling_window_gui); void redo_entry(BC_WindowBase *calling_window_gui); void save_undo_data(); void load_undo_data(); + void remove_undo_data(); int copy_target(const char *path, const char *target); int link_target(const char *real_path, const char *link_path, int relative); void save_project(const char *dir, int save_mode, int overwrite, int reload); @@ -504,6 +623,7 @@ public: // in the clipboard. int paste_default_keyframe(); int clear_default_keyframe(); + void create_keyframes(int mask, int mode); FloatAuto* get_float_auto(PatchGUI *patch,int idx); IntAuto* get_int_auto(PatchGUI *patch,int idx); @@ -512,22 +632,23 @@ public: int modify_edithandles(); int modify_pluginhandles(); + int modify_transnhandles(); void finish_modify_handles(); void rescale_proxy(EDL *clip, int orig_scale, int new_scale); - void add_proxy(int use_scaler, - ArrayList *orig_assets, - ArrayList *proxy_assets); + void add_proxy(ArrayList *orig_assets, + ArrayList *proxy_assets); int render_proxy(ArrayList &new_idxbls); void beep(double freq, double secs, double gain); int enable_proxy(); int disable_proxy(); int to_proxy(Asset *asset, int new_scale, int new_use_scaler); - ProxyBeep *proxy_beep; + Beeper *beeper; void dump_plugins(FILE *fp=stdout); void dump_edl(FILE *fp=stdout); void dump_undo(FILE *fp=stdout); void dump_exe(FILE *fp=stdout); + void dump_caches(FILE *fp=stdout); static void trap_hook(FILE *fp, void *vp); void reset_android_remote(); @@ -535,6 +656,11 @@ public: // Send new EDL to caches void age_caches(); int optimize_assets(); // delete unused assets from the cache and assets +// render edl assets to specified format, then replace in edl + void start_convert(Asset *format_asset, const char *suffix, + float beep, int to_proxy, int remove_originals); + void finish_convert(int remove_originals); + ConvertRender *convert_render; void select_point(double position); int set_loop_boundaries(); // toggle loop playback and set boundaries for loop playback @@ -545,6 +671,10 @@ public: // Main undo stack MainUndo *undo; + int undo_command; +// session stack + Stack stack; + BC_Hash *defaults; Assets *assets; // CICaches for drawing timeline only @@ -573,7 +703,6 @@ public: ArrayList colormodels; ArrayList interlace_project_modes; ArrayList interlace_asset_modes; - ArrayList interlace_asset_fixmethods; int reset_meters(); void resync_guis(); @@ -591,7 +720,7 @@ public: static ArrayList *plugindb; // Currently visible plugins int64_t plugin_visibility; - ArrayList *plugin_guis; + PluginGUIs *plugin_guis; // GUI Plugins to delete ArrayList *dead_plugins; // Keyframe editors @@ -623,6 +752,8 @@ public: // Mixer Mutex *zwindows_lock; ArrayList zwindows; + MixersAlign *mixers_align; + // Asset manager AWindow *awindow; // Automation window @@ -687,13 +818,11 @@ public: 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, - FILE *fp, 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, FILE *fp, const char *plugin_dir); + static int load_plugin_index(MWindow *mwindow, FILE *fp, const char *plugin_dir, const char *index_id); static PluginServer *new_ffmpeg_server(MWindow *mwindow, const char *name); static int init_lv2_index(MWindow *mwindow, Preferences *preferences, FILE *fp); static PluginServer *new_lv2_server(MWindow *mwindow, const char *name); @@ -701,6 +830,9 @@ public: void init_preferences(); void init_signals(); + void init_shuttle(); + void init_wintv(); + void init_x10tv(); void init_theme(); void init_compositor(); void init_levelwindow(); @@ -716,15 +848,21 @@ public: static void add_plugins(ArrayList &plugins); static void delete_plugins(); void speed_before(); - int speed_after(int done); - int normalize_speed(EDL *old_edl, EDL *new_edl); + int speed_after(int done, int edit_speed); + int normalize_speed(EDL *old_edl, EDL *new_edl, int edit_speed); + int get_cpus(int out_w, int out_h); + int get_cpus(); // void clean_indexes(); + void clean_backups(); // TimeBomb timebomb; SigHandler *sighandler; int restart_status; int screens; int in_destructor; + Shuttle *shuttle; + WinTV *wintv; + X10TV *x10tv; }; #endif