00001 #ifndef RENDER_H
00002 #define RENDER_H
00003
00004
00005 #include "asset.inc"
00006 #include "batchrender.inc"
00007 #include "bitspopup.h"
00008 #include "browsebutton.h"
00009 #include "cache.inc"
00010 #include "compresspopup.h"
00011 #include "condition.inc"
00012 #include "bchash.inc"
00013 #include "edit.inc"
00014 #include "errorbox.inc"
00015 #include "file.inc"
00016 #include "formatpopup.inc"
00017 #include "formattools.inc"
00018 #include "guicast.h"
00019 #include "loadmode.inc"
00020 #include "mainprogress.inc"
00021 #include "maxchannels.h"
00022 #include "mutex.inc"
00023 #include "mwindow.inc"
00024 #include "packagedispatcher.inc"
00025 #include "packagerenderer.h"
00026 #include "playabletracks.inc"
00027 #include "preferences.inc"
00028 #include "bcprogressbox.inc"
00029 #include "render.inc"
00030 #include "track.inc"
00031 #include "transportque.inc"
00032 #include "vframe.inc"
00033 #include "renderprofiles.inc"
00034
00035
00036 class RenderItem : public BC_MenuItem
00037 {
00038 public:
00039 RenderItem(MWindow *mwindow);
00040 int handle_event();
00041 MWindow *mwindow;
00042 };
00043
00044 class RenderProgress : public Thread
00045 {
00046 public:
00047 RenderProgress(MWindow *mwindow, Render *render);
00048 ~RenderProgress();
00049
00050 void run();
00051
00052
00053 MWindow *mwindow;
00054 Render *render;
00055
00056 int64_t last_value;
00057 };
00058
00059
00060
00061 class MainPackageRenderer : public PackageRenderer
00062 {
00063 public:
00064 MainPackageRenderer(Render *render);
00065 ~MainPackageRenderer();
00066
00067
00068 int get_master();
00069 int get_result();
00070 void set_result(int value);
00071 void set_progress(int64_t value);
00072 int progress_cancelled();
00073
00074 Render *render;
00075 };
00076
00077 class RenderWindow;
00078
00079
00080 class Render : public Thread
00081 {
00082 public:
00083 Render(MWindow *mwindow);
00084 ~Render();
00085
00086
00087 void start_interactive();
00088
00089
00090 void start_batches(ArrayList<BatchRenderJob*> *jobs);
00091
00092 void start_batches(ArrayList<BatchRenderJob*> *jobs,
00093 BC_Hash *boot_defaults,
00094 Preferences *preferences,
00095 ArrayList<PluginServer*> *plugindb);
00096
00097 void stop_operation();
00098 void run();
00099
00100
00101
00102 int render(int test_overwrite,
00103 Asset *asset,
00104 EDL *edl,
00105 int strategy,
00106 int range_type);
00107
00108 int load_defaults(Asset *asset);
00109 int save_defaults(Asset *asset);
00110 int load_profile(int profile_slot, Asset *asset);
00111
00112
00113 static int check_asset(EDL *edl, Asset &asset);
00114
00115 static int fix_strategy(int strategy, int use_renderfarm);
00116
00117 int check_numbering(Asset &asset);
00118 static void create_filename(char *path,
00119 char *default_path,
00120 int current_number,
00121 int total_digits,
00122 int number_start);
00123 static void get_starting_number(char *path,
00124 int ¤t_number,
00125 int &number_start,
00126 int &total_digits,
00127 int min_digits = 3);
00128 int direct_frame_copy(EDL *edl, int64_t &render_video_position, File *file);
00129 int direct_copy_possible(EDL *edl,
00130 int64_t current_position,
00131 Track* playable_track,
00132 Edit* &playable_edit,
00133 File *file);
00134
00135 void start_progress();
00136 void stop_progress();
00137
00138
00139 int mode;
00140 enum
00141 {
00142 INTERACTIVE,
00143 BATCH
00144 };
00145
00146 int batch_cancelled;
00147
00148
00149 int load_mode;
00150 int in_progress;
00151
00152 int direct_frame_copying;
00153
00154 CICache *audio_cache, *video_cache;
00155 VFrame *compressed_output;
00156 MainProgressBar *progress;
00157 RenderProgress *render_progress;
00158 MWindow *mwindow;
00159 PlayableTracks *playable_tracks;
00160 PackageDispatcher *packages;
00161 Mutex *package_lock, *counter_lock;
00162
00163 Preferences *preferences;
00164
00165 ArrayList<PluginServer*> *plugindb;
00166 int strategy;
00167 int range_type;
00168
00169 double total_start, total_end;
00170
00171 int result;
00172 Asset *default_asset;
00173 TransportCommand *command;
00174
00175 ArrayList<BatchRenderJob*> *jobs;
00176
00177 Condition *completion;
00178
00179
00180
00181
00182
00183 int64_t total_rendered;
00184
00185 double frames_per_second;
00186
00187 double elapsed_time;
00188
00189
00190 RenderWindow *render_window;
00191
00192
00193 int64_t progress_max;
00194 Timer *progress_timer;
00195 int64_t last_eta;
00196 };
00197
00198 class RenderToTracks;
00199
00200
00201 class RenderRangeProject : public BC_Radial
00202 {
00203 public:
00204 RenderRangeProject(RenderWindow *rwindow, int value, int x, int y);
00205 int handle_event();
00206 RenderWindow *rwindow;
00207 };
00208
00209 class RenderRangeSelection : public BC_Radial
00210 {
00211 public:
00212 RenderRangeSelection(RenderWindow *rwindow, int value, int x, int y);
00213 int handle_event();
00214 RenderWindow *rwindow;
00215 };
00216
00217
00218 class RenderRangeInOut : public BC_Radial
00219 {
00220 public:
00221 RenderRangeInOut(RenderWindow *rwindow, int value, int x, int y);
00222 int handle_event();
00223 RenderWindow *rwindow;
00224 };
00225
00226
00227
00228 class RenderWindow : public BC_Window
00229 {
00230 public:
00231 RenderWindow(MWindow *mwindow, Render *render, Asset *asset);
00232 ~RenderWindow();
00233
00234 int create_objects();
00235 void update_range_type(int range_type);
00236 int load_profile(int profile_slot);
00237
00238 RenderRangeProject *rangeproject;
00239 RenderRangeSelection *rangeselection;
00240 RenderRangeInOut *rangeinout;
00241
00242 RenderProfile *renderprofile;
00243
00244 LoadMode *loadmode;
00245 FormatTools *format_tools;
00246
00247 MWindow *mwindow;
00248 Render *render;
00249 Asset *asset;
00250 };
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264 #endif