X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmixersalign.h;h=bee2c9018a5776a33b7f8d4a89e1d5832929d6e1;hp=86abbe6e8e76f3138d04dc67b05b62c12803addb;hb=78d1d3d26843ec91b048befb13569e6a1d54c065;hpb=4a6b59824b2db18e6cc49b43a971923d5e5903ae diff --git a/cinelerra-5.1/cinelerra/mixersalign.h b/cinelerra-5.1/cinelerra/mixersalign.h index 86abbe6e..bee2c901 100644 --- a/cinelerra-5.1/cinelerra/mixersalign.h +++ b/cinelerra-5.1/cinelerra/mixersalign.h @@ -21,7 +21,8 @@ #ifndef __MIXERSALIGN_H__ #define __MIXERSALIGN_H__ -#include "edl.inc" +#include "edl.h" +#include "edit.inc" #include "fourier.h" #include "guicast.h" #include "language.h" @@ -38,10 +39,12 @@ class MixersAlignMixer { public: MixersAlignMixer(Mixer *mix); + ~MixersAlignMixer(); Mixer *mixer; double nudge; double mx; int64_t mi; + double *br, *bi; int aidx; }; @@ -49,7 +52,8 @@ class MixersAlignMixers : public ArrayList { public: MixersAlignMixers() {} - ~MixersAlignMixers() { remove_all_objects(); } + ~MixersAlignMixers() { clear(); } + void clear() { remove_all_objects(); } }; class MixersAlignMixerList : public BC_ListBox @@ -96,7 +100,8 @@ class MixersAlignMTracks : public ArrayList { public: MixersAlignMTracks() {} - ~MixersAlignMTracks() { remove_all_objects(); } + ~MixersAlignMTracks() { clear(); } + void clear() { remove_all_objects(); } }; @@ -132,9 +137,12 @@ class MixersAlignATrack { public: MixersAlignATrack(Track *trk, int no); + ~MixersAlignATrack(); + Track *track; int no; double nudge; + double ss; double mx; int64_t mi; }; @@ -143,7 +151,8 @@ class MixersAlignATracks : public ArrayList { public: MixersAlignATracks() {} - ~MixersAlignATracks() { remove_all_objects(); } + ~MixersAlignATracks() { clear(); } + void clear() { remove_all_objects(); } }; class MixersAlignATrackList : public BC_ListBox @@ -190,9 +199,11 @@ class MixersAlignThread : public Thread public: MixersAlignThread(MixersAlign *dialog); ~MixersAlignThread(); + void start(int fwd); void run(); MixersAlign *dialog; + int fwd; }; class MixersAlignMatch : public BC_GenericButton @@ -205,10 +216,20 @@ public: MixersAlignWindow *gui; }; -class MixersAlignApply : public BC_GenericButton +class MixersAlignMatchAll : public BC_GenericButton { public: - MixersAlignApply(MixersAlignWindow *gui, MixersAlign *dialog, int x, int y); + MixersAlignMatchAll(MixersAlignWindow *gui, MixersAlign *dialog, int x, int y); + int handle_event(); + + MixersAlign *dialog; + MixersAlignWindow *gui; +}; + +class MixersAlignNudgeTracks : public BC_GenericButton +{ +public: + MixersAlignNudgeTracks(MixersAlignWindow *gui, MixersAlign *dialog, int x, int y); int handle_event(); static int calculate_width(BC_WindowBase *gui); @@ -216,16 +237,60 @@ public: MixersAlignWindow *gui; }; -class MixersAlignUndo : public BC_GenericButton +class MixersAlignNudgeSelected : public BC_GenericButton { public: - MixersAlignUndo(MixersAlignWindow *gui, MixersAlign *dialog, int x, int y); + MixersAlignNudgeSelected(MixersAlignWindow *gui, MixersAlign *dialog, int x, int y); + int handle_event(); + static int calculate_width(BC_WindowBase *gui); + + MixersAlign *dialog; + MixersAlignWindow *gui; +}; + +class MixersAlignCheckPoint : public BC_GenericButton +{ +public: + MixersAlignCheckPoint(MixersAlignWindow *gui, MixersAlign *dialog, int x, int y); int handle_event(); MixersAlign *dialog; MixersAlignWindow *gui; }; +class MixersAlignUndoEDLs : public ArrayList +{ +public: + MixersAlignUndoEDLs() {} + ~MixersAlignUndoEDLs() { clear(); } + void clear() { + for( int i=size(); --i>=0; ) get(i)->remove_user(); + remove_all(); + } +}; + +class MixersAlignUndoItem : public BC_MenuItem +{ +public: + MixersAlignUndoItem(const char *text, int no); + ~MixersAlignUndoItem(); + int handle_event(); + + int no; +}; + +class MixersAlignUndo : public BC_PopupMenu +{ +public: + MixersAlignUndo(MixersAlignWindow *gui, MixersAlign *dialog, int x, int y); + ~MixersAlignUndo(); + void create_objects(); + void add_undo_item(int no); + + MixersAlign *dialog; + MixersAlignWindow *gui; +}; + class MixersAlignWindow : public BC_Window { @@ -246,8 +311,11 @@ public: MixersAlignMTrackList *mtrack_list; MixersAlignATrackList *atrack_list; MixersAlignMatch *match; + MixersAlignMatchAll *match_all; MixersAlignReset *reset; - MixersAlignApply *apply; + MixersAlignNudgeTracks *nudge_tracks; + MixersAlignNudgeSelected *nudge_selected; + MixersAlignCheckPoint *check_point; MixersAlignUndo *undo; }; @@ -261,36 +329,151 @@ public: int render(Samples **samples, int64_t len, int64_t pos); }; -class MixersAlignPackage : public LoadPackage + +class MixersAlignScanPackage : public LoadPackage { public: - MixersAlignPackage(); - ~MixersAlignPackage(); + MixersAlignScanPackage(MixersAlignScanFarm *farm); + ~MixersAlignScanPackage(); MixersAlignMixer *mixer; }; -class MixersAlignClient : public LoadClient +class MixersAlignScanClient : public LoadClient +{ +public: + MixersAlignScanClient(MixersAlignScanFarm *farm); + ~MixersAlignScanClient(); + void process_package(LoadPackage *package); + + MixersAlignScanFarm *farm; + MixersAlignScanPackage *pkg; + int64_t pos; + int len1; +}; + +class MixersAlignScanFarm : public LoadServer { public: - MixersAlignClient(MixersAlignFarm *farm); - ~MixersAlignClient(); + MixersAlignScanFarm(MixersAlign *dialog, int cpus, int n); + ~MixersAlignScanFarm(); + void init_packages(); + LoadClient *new_client(); + LoadPackage *new_package(); - void process_package(LoadPackage *pkg); + MixersAlign *dialog; + Samples *samples; + int len; }; -class MixersAlignFarm : public LoadServer + +class MixersAlignMatchFwdPackage : public LoadPackage { public: - MixersAlignFarm(MixersAlign *dialog, int n); - ~MixersAlignFarm(); + MixersAlignMatchFwdPackage(); + ~MixersAlignMatchFwdPackage(); + + MixersAlignMixer *mixer; +}; + +class MixersAlignMatchFwdClient : public LoadClient +{ +public: + MixersAlignMatchFwdClient(MixersAlignMatchFwdFarm *farm); + ~MixersAlignMatchFwdClient(); + + void process_package(LoadPackage *package); + MixersAlignMatchFwdPackage *pkg; +}; + +class MixersAlignMatchFwdFarm : public LoadServer +{ +public: + MixersAlignMatchFwdFarm(MixersAlign *dialog, int n); + ~MixersAlignMatchFwdFarm(); + void init_packages(); + LoadClient *new_client(); + LoadPackage *new_package(); + + MixersAlign *dialog; +}; + + +class MixersAlignMatchRevPackage : public LoadPackage +{ +public: + MixersAlignMatchRevPackage(); + ~MixersAlignMatchRevPackage(); + + MixersAlignMixer *mix; +}; + +class MixersAlignMatchRevClient : public LoadClient +{ +public: + MixersAlignMatchRevClient(MixersAlignMatchRevFarm *farm); + ~MixersAlignMatchRevClient(); + + void process_package(LoadPackage *package); + MixersAlignMatchRevPackage *pkg; + double *re, *im; +}; + +class MixersAlignMatchRevFarm : public LoadServer +{ +public: + MixersAlignMatchRevFarm(int n, int cpus, + MixersAlign *dialog, double *ar, double *ai, int len); + ~MixersAlignMatchRevFarm(); void init_packages(); LoadClient *new_client(); LoadPackage *new_package(); MixersAlign *dialog; + Mutex *mixer_lock; + double *ar, *ai; + int len; + int64_t pos; }; + +class MixersAlignTargetPackage : public LoadPackage +{ +public: + MixersAlignTargetPackage(MixersAlignTarget *pfft); + ~MixersAlignTargetPackage(); + + double ss, sd2; + int64_t pos; + double *best; +}; + +class MixersAlignTargetClient : public LoadClient +{ +public: + MixersAlignTargetClient(); + ~MixersAlignTargetClient(); + + void process_package(LoadPackage *package); + MixersAlignTargetPackage *pkg; +}; + +class MixersAlignTarget : public LoadServer +{ +public: + MixersAlignTarget(int n, int cpus, + MixersAlignScanClient *scan, Samples **samples, int len); + ~MixersAlignTarget(); + void init_packages(); + LoadClient *new_client(); + LoadPackage *new_package(); + + MixersAlignScanClient *scan; + Samples **samples; + int len; +}; + + class MixersAlign : public BC_DialogThread, public FFT { public: @@ -305,6 +488,7 @@ public: void handle_done_event(int result); void handle_close_event(int result); + int atrack_of(MixersAlignMixer *mix, int ch); int mixer_of(Track *track, int &midx); int mixer_of(Track *track) { int midx = -1; return mixer_of(track, midx); } int mmixer_of(int mi) { @@ -316,14 +500,25 @@ public: EDL *mixer_audio_clip(Mixer *mixer); EDL *mixer_master_clip(Track *track); - int64_t mixer_tracks_total(); + int64_t mixer_tracks_total(int midx); void load_master_audio(Track *track); void scan_mixer_audio(); + void start_progress(int64_t total_len); + void stop_progress(const char *msg); void update_progress(int64_t len); - void update_match(); + void match_fwd(); + void match_rev(); + void update_fwd(); + void update_rev(); void update(); - void process_package(MixersAlignFarm *farm, MixersAlignPackage *package); - void apply(); + void apply_undo(int no); + void nudge_tracks(); + void nudge_selected(); + void clear_mixer_nudge(); + void check_point(); + void reset_targets(); + void scan_targets(); + void scan_master(Track *track); MixersAlignWindow *ma_gui; int wx, wy; @@ -332,14 +527,14 @@ public: MixersAlignATracks atracks; MWindow *mwindow; - EDL *undo_edl; + MixersAlignUndoEDLs undo_edls; Mutex *farming; MainProgressBar *progress; MixersAlignThread *thread; Mutex *total_lock; int64_t total_rendered; int failed; - int64_t master_len; + int64_t master_len, sample_len; double *master_r, *master_i; double master_start, master_end, master_ss; double audio_start, audio_end;