rework set default transtion, nested proxy edl fixes, doubleclick proxy media fix...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / proxy.h
1 #ifndef __PROXY_H__
2 #define __PROXY_H__
3
4 /*
5  * CINELERRA
6  * Copyright (C) 2015 Adam Williams <broadcast at earthling dot net>
7  * 
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  * 
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  * 
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  * 
22  */
23
24 // functions for handling proxies
25
26 #include "arraylist.h"
27 #include "asset.h"
28 #include "bcdialog.h"
29 #include "cache.inc"
30 #include "file.inc"
31 #include "formattools.inc"
32 #include "loadbalance.h"
33 #include "mutex.inc"
34 #include "mwindow.inc"
35 #include "renderengine.inc"
36
37 class ProxyDialog;
38 class ProxyWindow;
39
40 #define MAX_SIZES 16
41
42 class ProxyMenuItem : public BC_MenuItem
43 {
44 public:
45         ProxyMenuItem(MWindow *mwindow);
46         ~ProxyMenuItem();
47
48         int handle_event();
49         void create_objects();
50
51         MWindow *mwindow;
52         ProxyDialog *dialog;
53 };
54
55 class FromProxyMenuItem : public BC_MenuItem
56 {
57 public:
58         FromProxyMenuItem(MWindow *mwindow);
59
60         int handle_event();
61         MWindow *mwindow;
62 };
63
64
65 class ProxyRender
66 {
67 public:
68         ProxyRender(MWindow *mwindow, Asset *format_asset);
69         ~ProxyRender();
70         void to_proxy_path(char *new_path, Indexable *indexable, int scale);
71         static int from_proxy_path(char *new_path, Indexable *indexable, int scale);
72
73         ArrayList<Indexable *> orig_idxbls;   // originals which match the proxy assets
74         ArrayList<Indexable *> orig_proxies;  // proxy assets
75         Asset *add_original(Indexable *idxbl, int new_scale);
76         ArrayList<Indexable *> needed_idxbls; // originals which match the needed_assets
77         ArrayList<Asset *> needed_proxies;    // assets which must be created
78         void add_needed(Indexable *idxbl, Asset *proxy);
79
80         int create_needed_proxies(int new_scale);
81 // increment the frame count by 1
82         void update_progress();
83 // if user canceled progress bar
84         int is_canceled();
85
86         MWindow *mwindow;
87         Asset *format_asset;
88         MainProgressBar *progress;
89         Mutex *counter_lock;
90         int total_rendered;
91         int failed, canceled;
92 };
93
94 class ProxyDialog : public BC_DialogThread
95 {
96 public:
97         ProxyDialog(MWindow *mwindow);
98         ~ProxyDialog();
99         BC_Window* new_gui();
100         void handle_close_event(int result);
101
102         void from_proxy();
103         void to_proxy();
104 // calculate possible sizes based on the original size
105         void calculate_sizes();
106         void scale_to_text(char *string, int scale);
107
108         MWindow *mwindow;
109         ProxyWindow *gui;
110         Asset *asset;
111         ProxyRender *proxy_render;
112
113         int new_scale;
114         int orig_scale;
115         int use_scaler;
116         int auto_scale;
117         char *size_text[MAX_SIZES];
118         int size_factors[MAX_SIZES];
119         int total_sizes;
120 };
121
122 class ProxyUseScaler : public BC_CheckBox
123 {
124 public:
125         ProxyUseScaler(ProxyWindow *pwindow, int x, int y);
126         void update();
127         int handle_event();
128
129         ProxyWindow *pwindow;
130 };
131
132 class ProxyAutoScale : public BC_CheckBox
133 {
134 public:
135         ProxyAutoScale(ProxyWindow *pwindow, int x, int y);
136         void update();
137         int handle_event();
138
139         ProxyWindow *pwindow;
140 };
141
142 class ProxyFormatTools : public FormatTools
143 {
144 public:
145         ProxyFormatTools(MWindow *mwindow, ProxyWindow *window, Asset *asset);
146
147         void update_format();
148         ProxyWindow *pwindow;
149 };
150
151 class ProxyMenu : public BC_PopupMenu
152 {
153 public:
154         ProxyMenu(MWindow *mwindow, ProxyWindow *pwindow,
155                 int x, int y, int w, const char *text);
156         void update_sizes();
157         int handle_event();
158         MWindow *mwindow;
159         ProxyWindow *pwindow;
160 };
161
162
163 class ProxyTumbler : public BC_Tumbler
164 {
165 public:
166         ProxyTumbler(MWindow *mwindow, ProxyWindow *pwindow, int x, int y);
167
168         int handle_up_event();
169         int handle_down_event();
170         
171         ProxyWindow *pwindow;
172         MWindow *mwindow;
173 };
174
175
176 class ProxyWindow : public BC_Window
177 {
178 public:
179         ProxyWindow(MWindow *mwindow, ProxyDialog *dialog,
180                 int x, int y);
181         ~ProxyWindow();
182
183         void create_objects();
184         void update();
185
186         MWindow *mwindow;
187         ProxyDialog *dialog;
188         FormatTools *format_tools;
189         BC_Title *new_dimensions;
190         ProxyMenu *scale_factor;
191         ProxyUseScaler *use_scaler;
192         ProxyAutoScale *auto_scale;
193 };
194
195 class ProxyFarm;
196
197 class ProxyPackage : public LoadPackage
198 {
199 public:
200         ProxyPackage();
201         Indexable *orig_idxbl;
202         Asset *proxy_asset;
203 };
204
205 class ProxyClient : public LoadClient
206 {
207 public:
208         ProxyClient(MWindow *mwindow, ProxyRender *proxy_render, ProxyFarm *server);
209         ~ProxyClient();
210         void process_package(LoadPackage *package);
211
212         MWindow *mwindow;
213         ProxyRender *proxy_render;
214         RenderEngine *render_engine;
215         CICache *video_cache;
216         File *src_file;
217 };
218
219
220 class ProxyFarm : public LoadServer
221 {
222 public:
223         ProxyFarm(MWindow *mwindow, ProxyRender *proxy_render, 
224                 ArrayList<Indexable*> *orig_idxbls, ArrayList<Asset*> *proxy_assets);
225         
226         void init_packages();
227         LoadClient* new_client();
228         LoadPackage* new_package();
229         
230         MWindow *mwindow;
231         ProxyRender *proxy_render;
232         ArrayList<Indexable*> *orig_idxbls;
233         ArrayList<Asset*> *proxy_assets;
234 };
235
236 #endif