4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
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.
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.
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
27 #include "batchrender.inc"
29 #include "bitspopup.h"
30 #include "browsebutton.h"
32 #include "compresspopup.h"
33 #include "condition.inc"
36 #include "errorbox.inc"
38 #include "formatpopup.inc"
39 #include "formattools.inc"
41 #include "loadmode.inc"
42 #include "mainprogress.inc"
43 #include "maxchannels.h"
45 #include "mwindow.inc"
46 #include "packagedispatcher.inc"
47 #include "packagerenderer.h"
48 #include "playabletracks.inc"
49 #include "preferences.inc"
50 #include "bcprogressbox.inc"
53 #include "transportque.inc"
56 class RenderItem : public BC_MenuItem
59 RenderItem(MWindow *mwindow);
64 class RenderProgress : public Thread
67 RenderProgress(MWindow *mwindow, Render *render);
81 class MainPackageRenderer : public PackageRenderer
84 MainPackageRenderer(Render *render);
85 ~MainPackageRenderer();
90 void set_result(int value);
91 void set_progress(int64_t value);
92 int progress_cancelled();
100 class Render : public BC_DialogThread
103 Render(MWindow *mwindow);
106 // Start dialogue box and render interactively.
107 void start_interactive();
108 // Start batch rendering jobs.
109 // A new thread is created and the rendering is interactive.
110 void start_batches(ArrayList<BatchRenderJob*> *jobs);
111 // The batches are processed in the foreground in non interactive mode.
112 void start_batches(ArrayList<BatchRenderJob*> *jobs,
113 BC_Hash *boot_defaults,
114 Preferences *preferences);
115 // Called by BatchRender to stop the operation.
116 void stop_operation();
117 BC_Window* new_gui();
119 void handle_close_event(int result);
122 int load_defaults(Asset *asset);
123 int save_defaults(Asset *asset);
124 // force asset parameters regardless of window
125 // This should be integrated into the Asset Class.
126 static int check_asset(EDL *edl, Asset &asset);
127 // Fix strategy to conform with using renderfarm.
128 static int fix_strategy(int strategy, int use_renderfarm);
129 // Force filename to have a 0 padded number if rendering to a list.
130 int check_numbering(Asset &asset);
131 static void create_filename(char *path,
136 static void get_starting_number(char *path,
141 int direct_frame_copy(EDL *edl, int64_t &render_video_position, File *file);
142 int direct_copy_possible(EDL *edl,
143 int64_t current_position,
144 Track* playable_track, // The one track which is playable
145 Edit* &playable_edit, // The edit which is playing
146 File *file); // Output file
148 void start_progress();
149 void stop_progress();
151 // Procedure the run function should use.
158 // When batch rendering is cancelled from the batch dialog
164 // Background compression must be disabled when direct frame copying and reenabled afterwards
165 int direct_frame_copying;
167 // Copy of mwindow preferences or pointer to another preferences object
168 Preferences *preferences;
169 VFrame *compressed_output;
170 MainProgressBar *progress;
171 RenderProgress *render_progress;
172 RenderThread *thread;
174 PlayableTracks *playable_tracks;
175 PackageDispatcher *packages;
176 Mutex *package_lock, *counter_lock;
178 // Total selection to render in seconds
179 double total_start, total_end;
180 // External Render farm checks this every frame.
183 Asset *default_asset;
184 // Asset containing the file format
186 // Jobs pointer passed to start_batches
187 ArrayList<BatchRenderJob*> *jobs;
188 // Used by batch rendering to wait until rendering is finished
189 Condition *completion;
191 // Total samples updated by the render farm and the local renderer.
192 // This avoids rounding errors and complies with the use of samples for
194 int64_t total_rendered;
195 // Time used in last render
198 // For non interactive mode, maintain progress here.
199 int64_t progress_max;
200 Timer *progress_timer;
205 class RenderThread : public Thread
208 RenderThread(MWindow *mwindow, Render *render);
213 void render_single(int test_overwrite,
222 class RenderToTracks;
224 class RenderWindow : public BC_Window
227 RenderWindow(MWindow *mwindow,
234 void create_objects();
238 FormatTools *format_tools;