X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fproxy.h;h=b11212546b930fd9b8f8448388d9631c8b4cd852;hb=976d56536456148f6d14a2c12630c20e367abbe1;hp=553ef481027bcd9ec9d5fd73f197322baad15587;hpb=ea0dfe3cd57bb60ef824cd0d3512fcd251020c76;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/proxy.h b/cinelerra-5.1/cinelerra/proxy.h index 553ef481..b1121254 100644 --- a/cinelerra-5.1/cinelerra/proxy.h +++ b/cinelerra-5.1/cinelerra/proxy.h @@ -24,15 +24,17 @@ // functions for handling proxies #include "arraylist.h" +#include "audiodevice.inc" #include "asset.h" #include "bcdialog.h" +#include "cache.inc" +#include "file.inc" #include "formattools.inc" #include "loadbalance.h" #include "mutex.inc" #include "mwindow.inc" - -class ProxyThread; -class ProxyWindow; +#include "proxy.inc" +#include "renderengine.inc" #define MAX_SIZES 16 @@ -40,12 +42,13 @@ class ProxyMenuItem : public BC_MenuItem { public: ProxyMenuItem(MWindow *mwindow); + ~ProxyMenuItem(); int handle_event(); void create_objects(); MWindow *mwindow; - ProxyThread *thread; + ProxyDialog *dialog; }; class FromProxyMenuItem : public BC_MenuItem @@ -57,35 +60,61 @@ public: MWindow *mwindow; }; -class ProxyThread : public BC_DialogThread + +class ProxyRender { public: - ProxyThread(MWindow *mwindow); - ~ProxyThread(); - BC_Window* new_gui(); - void handle_close_event(int result); - static void to_proxy_path(char *new_path, Asset *asset, int scale); - static void from_proxy_path(char *new_path, Asset *asset, int scale); - void from_proxy(); - void to_proxy(); + ProxyRender(MWindow *mwindow, Asset *format_asset); + ~ProxyRender(); + void to_proxy_path(char *new_path, Indexable *indexable, int scale); + static int from_proxy_path(char *new_path, Indexable *indexable, int scale); + + ArrayList orig_idxbls; // originals which match the proxy assets + ArrayList orig_proxies; // proxy assets + Asset *add_original(Indexable *idxbl, int new_scale); + ArrayList needed_idxbls; // originals which match the needed_assets + ArrayList needed_proxies; // assets which must be created + void add_needed(Indexable *idxbl, Asset *proxy); + + int create_needed_proxies(int new_scale); // increment the frame count by 1 void update_progress(); // if user canceled progress bar int is_canceled(); + + MWindow *mwindow; + Asset *format_asset; + MainProgressBar *progress; + Mutex *counter_lock; + int total_rendered; + int failed, canceled; +}; + +class ProxyDialog : public BC_DialogThread +{ +public: + ProxyDialog(MWindow *mwindow); + ~ProxyDialog(); + BC_Window* new_gui(); + void handle_close_event(int result); + + void from_proxy(); + int to_proxy(); // calculate possible sizes based on the original size void calculate_sizes(); void scale_to_text(char *string, int scale); MWindow *mwindow; ProxyWindow *gui; - MainProgressBar *progress; - Mutex *counter_lock; Asset *asset; + ProxyRender *proxy_render; + ProxyBeep *proxy_beep; + int new_scale; int orig_scale; - int total_rendered; - int failed; int use_scaler; + int auto_scale; + int beep; char *size_text[MAX_SIZES]; int size_factors[MAX_SIZES]; int total_sizes; @@ -94,11 +123,30 @@ public: class ProxyUseScaler : public BC_CheckBox { public: - ProxyUseScaler(MWindow *mwindow, ProxyWindow *pwindow, - int x, int y); + ProxyUseScaler(ProxyWindow *pwindow, int x, int y); void update(); int handle_event(); - MWindow *mwindow; + + ProxyWindow *pwindow; +}; + +class ProxyAutoScale : public BC_CheckBox +{ +public: + ProxyAutoScale(ProxyWindow *pwindow, int x, int y); + void update(); + int handle_event(); + + ProxyWindow *pwindow; +}; + +class ProxyBeepOnDone : public BC_CheckBox +{ +public: + ProxyBeepOnDone(ProxyWindow *pwindow, int x, int y); + void update(); + int handle_event(); + ProxyWindow *pwindow; }; @@ -139,7 +187,7 @@ public: class ProxyWindow : public BC_Window { public: - ProxyWindow(MWindow *mwindow, ProxyThread *thread, + ProxyWindow(MWindow *mwindow, ProxyDialog *dialog, int x, int y); ~ProxyWindow(); @@ -147,11 +195,13 @@ public: void update(); MWindow *mwindow; - ProxyThread *thread; + ProxyDialog *dialog; FormatTools *format_tools; BC_Title *new_dimensions; ProxyMenu *scale_factor; ProxyUseScaler *use_scaler; + ProxyAutoScale *auto_scale; + ProxyBeepOnDone *beep_on_done; }; class ProxyFarm; @@ -160,36 +210,59 @@ class ProxyPackage : public LoadPackage { public: ProxyPackage(); - Asset *orig_asset; + Indexable *orig_idxbl; Asset *proxy_asset; }; class ProxyClient : public LoadClient { public: - ProxyClient(MWindow *mwindow, ProxyThread *thread, - ProxyFarm *server); + ProxyClient(MWindow *mwindow, ProxyRender *proxy_render, ProxyFarm *server); + ~ProxyClient(); void process_package(LoadPackage *package); MWindow *mwindow; - ProxyThread *thread; + ProxyRender *proxy_render; + RenderEngine *render_engine; + CICache *video_cache; + File *src_file; }; class ProxyFarm : public LoadServer { public: - ProxyFarm(MWindow *mwindow, ProxyThread *thread, - ArrayList *proxy_assets, ArrayList *orig_assets); + ProxyFarm(MWindow *mwindow, ProxyRender *proxy_render, + ArrayList *orig_idxbls, ArrayList *proxy_assets); void init_packages(); LoadClient* new_client(); LoadPackage* new_package(); MWindow *mwindow; - ProxyThread *thread; + ProxyRender *proxy_render; + ArrayList *orig_idxbls; ArrayList *proxy_assets; - ArrayList *orig_assets; +}; + +class ProxyBeep : public Thread +{ +public: + enum { BEEP_SAMPLE_RATE=48000 }; + typedef int16_t audio_data_t; + ProxyBeep(MWindow *mwindow); + ~ProxyBeep(); + + 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; }; #endif