edl plugin names eng, fix segv for opengl brender, renderfarm rework strategy, perf...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / batchrender.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #ifndef BATCHRENDER_H
23 #define BATCHRENDER_H
24
25 #include "arraylist.h"
26 #include "asset.inc"
27 #include "batchrender.inc"
28 #include "bcbutton.h"
29 #include "bcdialog.h"
30 #include "browsebutton.inc"
31 #include "filexml.inc"
32 #include "formattools.h"
33 #include "keyframe.inc"
34 #include "mwindow.inc"
35 #include "preferences.inc"
36 #include "render.inc"
37 #include "timeentry.h"
38
39 #define BATCHRENDER_COLUMNS 4
40
41
42
43
44 class BatchRenderMenuItem : public BC_MenuItem
45 {
46 public:
47         BatchRenderMenuItem(MWindow *mwindow);
48         int handle_event();
49         MWindow *mwindow;
50 };
51
52
53
54 class BatchRenderJob
55 {
56 public:
57         BatchRenderJob(Preferences *preferences, int strategy=-1);
58         ~BatchRenderJob();
59
60         void copy_from(BatchRenderJob *src);
61         void load(FileXML *file);
62         void save(FileXML *file);
63         int get_strategy();
64
65 // Source EDL to render
66         char edl_path[BCTEXTLEN];
67 // Destination file for output
68         Asset *asset;
69         int strategy;
70         int file_per_label;
71         int enabled;
72 // Amount of time elapsed in last render operation
73         double elapsed;
74         Preferences *preferences;
75 };
76
77
78
79
80
81
82
83
84 class BatchRenderThread : public BC_DialogThread
85 {
86 public:
87         BatchRenderThread(MWindow *mwindow);
88         BatchRenderThread();
89         ~BatchRenderThread();
90         void handle_close_event(int result);
91         BC_Window* new_gui();
92
93         int test_edl_files();
94         void calculate_dest_paths(ArrayList<char*> *paths,
95                 Preferences *preferences);
96         void reset(const char *path=0);
97 // Load batch rendering jobs
98         void load_jobs(char *path, Preferences *preferences);
99 // Not applicable to western civilizations
100         void save_jobs(char *path=0);
101         void load_defaults(BC_Hash *defaults);
102         void save_defaults(BC_Hash *defaults);
103 // Create path for persistent storage functions
104         char* create_path(char *string);
105         void new_job();
106         void delete_job();
107         void update_selected_edl();
108         void use_current_edl();
109 // Conditionally returns the job or the default job based on current_job
110         BatchRenderJob* get_current_job();
111         Asset* get_current_asset();
112         char* get_current_edl();
113 // For command line usage
114         void start_rendering(char *config_path, char *batch_path);
115 // For GUI usage
116         void start_rendering();
117         void stop_rendering();
118 // Highlight the currently rendering job.
119         void update_active(int number);
120         void update_done(int number, int create_list, double elapsed_time);
121         void move_batch(int src, int dst);
122         static void trap_hook(FILE *fp, void *vp);
123
124         MWindow *mwindow;
125         char batch_path[BCTEXTLEN];
126         double current_start;
127         double current_end;
128         BatchRenderJob *default_job;
129         ArrayList<BatchRenderJob*> jobs;
130         BC_Hash *boot_defaults;
131         Preferences *preferences;
132         Render *render;
133         BatchRenderGUI *gui;
134         int column_width[BATCHRENDER_COLUMNS];
135 // job being edited
136         int current_job;
137 // job being rendered
138         int rendering_job;
139         int is_rendering;
140         int warn;
141 };
142
143
144
145 class BatchRenderEDLPath : public BC_TextBox
146 {
147 public:
148         BatchRenderEDLPath(BatchRenderThread *thread, int x, int y, int w,
149                 char *text);
150         int handle_event();
151         BatchRenderThread *thread;
152 };
153
154
155 class BatchRenderCurrentEDL : public BC_GenericButton
156 {
157 public:
158         BatchRenderCurrentEDL(BatchRenderThread *thread, int x, int y);
159         int handle_event();
160         BatchRenderThread *thread;
161 };
162
163
164 class BatchRenderUpdateEDL : public BC_GenericButton
165 {
166 public:
167         BatchRenderUpdateEDL(BatchRenderThread *thread, int x, int y);
168         int handle_event();
169         BatchRenderThread *thread;
170 };
171
172
173 class BatchRenderNew : public BC_GenericButton
174 {
175 public:
176         BatchRenderNew(BatchRenderThread *thread, int x, int y);
177         int handle_event();
178         BatchRenderThread *thread;
179 };
180
181 class BatchRenderDelete : public BC_GenericButton
182 {
183 public:
184         BatchRenderDelete(BatchRenderThread *thread, int x, int y);
185         int handle_event();
186         BatchRenderThread *thread;
187 };
188
189
190
191 class BatchRenderSaveList : public BC_GenericButton, public Thread
192 {
193 public:
194         BatchRenderSaveList(BatchRenderThread *thread, int x, int y);
195         ~BatchRenderSaveList();
196         int handle_event();
197         BatchRenderThread *thread;
198         BC_FileBox *gui;
199         void run();
200         virtual int keypress_event();
201         Mutex *startup_lock;
202 };
203
204 class BatchRenderLoadList : public BC_GenericButton, public Thread
205 {
206 public:
207         BatchRenderLoadList(BatchRenderThread *thread, int x, int y);
208         ~BatchRenderLoadList();
209         int handle_event();
210         BatchRenderThread *thread;
211         BC_FileBox *gui;
212         void run();
213         virtual int keypress_event();
214         Mutex *startup_lock;
215 };
216
217
218
219 class BatchRenderList : public BC_ListBox
220 {
221 public:
222         BatchRenderList(BatchRenderThread *thread, int x, int y, int w, int h);
223         int handle_event();
224         int selection_changed();
225         int column_resize_event();
226         int drag_start_event();
227         int drag_motion_event();
228         int drag_stop_event();
229         int dragging_item;
230         BatchRenderThread *thread;
231 };
232 class BatchRenderStart : public BC_GenericButton
233 {
234 public:
235         BatchRenderStart(BatchRenderThread *thread, int x, int y);
236         int handle_event();
237         BatchRenderThread *thread;
238 };
239
240 class BatchRenderStop : public BC_GenericButton
241 {
242 public:
243         BatchRenderStop(BatchRenderThread *thread, int x, int y);
244         int handle_event();
245         BatchRenderThread *thread;
246 };
247
248 class BatchRenderWarning : public BC_CheckBox
249 {
250 public:
251         BatchRenderWarning(BatchRenderThread *thread, int x, int y);
252         int handle_event();
253         BatchRenderThread *thread;
254 };
255
256 class BatchRenderCancel : public BC_GenericButton
257 {
258 public:
259         BatchRenderCancel(BatchRenderThread *thread, int x, int y);
260         int handle_event();
261         int keypress_event();
262         BatchRenderThread *thread;
263 };
264
265
266 class BatchFormat : public FormatTools
267 {
268 public:
269         BatchFormat(MWindow *mwindow, BatchRenderGUI *gui, Asset *asset);
270         ~BatchFormat();
271
272         int handle_event();
273
274         BatchRenderGUI *gui;
275         MWindow *mwindow;
276 };
277
278
279 class BatchRenderGUI : public BC_Window
280 {
281 public:
282         BatchRenderGUI(MWindow *mwindow,
283                 BatchRenderThread *thread,
284                 int x,
285                 int y,
286                 int w,
287                 int h);
288         ~BatchRenderGUI();
289
290         void create_objects();
291         int resize_event(int w, int h);
292         int translation_event();
293         int close_event();
294         void create_list(int update_widget);
295         void change_job();
296         void button_enable();
297         void button_disable();
298
299         ArrayList<BC_ListBoxItem*> list_columns[BATCHRENDER_COLUMNS];
300
301         MWindow *mwindow;
302         BatchRenderThread *thread;
303         BC_Title *output_path_title;
304         BatchFormat *format_tools;
305         BrowseButton *edl_path_browse;
306         BatchRenderEDLPath *edl_path_text;
307         BC_Title *edl_path_title;
308 //      BC_Title *status_title;
309 //      BC_Title *status_text;
310 //      BC_ProgressBar *progress_bar;
311         BC_Title *list_title;
312         BC_Title *batch_path;
313         BatchRenderNew *new_batch;
314         BatchRenderDelete *delete_batch;
315         BatchRenderSaveList *savelist_batch;
316         BatchRenderLoadList *loadlist_batch;
317         BatchRenderWarning *warning;
318         BatchRenderList *batch_list;
319         BatchRenderStart *start_button;
320         BatchRenderStop *stop_button;
321         BatchRenderCancel *cancel_button;
322         BatchRenderCurrentEDL *use_current_edl;
323         BatchRenderUpdateEDL *update_selected_edl;
324 };
325
326
327 #endif