X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frender.h;fp=cinelerra-5.1%2Fcinelerra%2Frender.h;h=638aaabbd88f933bf6ba1254037c92bc4a15dace;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=0000000000000000000000000000000000000000;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/render.h b/cinelerra-5.1/cinelerra/render.h new file mode 100644 index 00000000..638aaabb --- /dev/null +++ b/cinelerra-5.1/cinelerra/render.h @@ -0,0 +1,300 @@ + +/* + * CINELERRA + * Copyright (C) 2008 Adam Williams + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef RENDER_H +#define RENDER_H + + +#include "asset.inc" +#include "batchrender.inc" +#include "bcdialog.h" +#include "bitspopup.h" +#include "browsebutton.h" +#include "cache.inc" +#include "compresspopup.h" +#include "condition.inc" +#include "bchash.inc" +#include "edit.inc" +#include "errorbox.inc" +#include "file.inc" +#include "formatpopup.inc" +#include "formattools.inc" +#include "guicast.h" +#include "loadmode.inc" +#include "mainprogress.inc" +#include "maxchannels.h" +#include "mutex.inc" +#include "mwindow.inc" +#include "packagedispatcher.inc" +#include "packagerenderer.h" +#include "playabletracks.inc" +#include "preferences.inc" +#include "bcprogressbox.inc" +#include "render.inc" +#include "track.inc" +#include "transportque.inc" +#include "vframe.inc" +#include "renderprofiles.inc" + + +class RenderItem : public BC_MenuItem +{ +public: + RenderItem(MWindow *mwindow); + int handle_event(); + MWindow *mwindow; +}; + +class RenderProgress : public Thread +{ +public: + RenderProgress(MWindow *mwindow, Render *render); + ~RenderProgress(); + + void run(); + + + MWindow *mwindow; + Render *render; + + int64_t last_value; +}; + + + +class MainPackageRenderer : public PackageRenderer +{ +public: + MainPackageRenderer(Render *render); + ~MainPackageRenderer(); + + + int get_master(); + int get_result(); + void set_result(int value); + void set_progress(int64_t value); + int progress_cancelled(); + + Render *render; +}; + +class RenderWindow; + + +class Render : public BC_DialogThread +{ +public: + Render(MWindow *mwindow); + ~Render(); + +// Start dialogue box and render interactively. + void start_interactive(); +// Start batch rendering jobs. +// A new thread is created and the rendering is interactive. + void start_batches(ArrayList *jobs); +// The batches are processed in the foreground in non interactive mode. + void start_batches(ArrayList *jobs, + BC_Hash *boot_defaults, + Preferences *preferences); +// Called by BatchRender to stop the operation. + void stop_operation(); + BC_Window* new_gui(); + + void handle_close_event(int result); + void start_render(); + + int load_defaults(Asset *asset); + int save_defaults(Asset *asset); + int load_profile(int profile_slot, Asset *asset); +// force asset parameters regardless of window +// This should be integrated into the Asset Class. + static int check_asset(EDL *edl, Asset &asset); +// Fix strategy to conform with using renderfarm. + static int fix_strategy(int strategy, int use_renderfarm); +// Force filename to have a 0 padded number if rendering to a list. + int check_numbering(Asset &asset); + static void create_filename(char *path, + char *default_path, + int current_number, + int total_digits, + int number_start); + static void get_starting_number(char *path, + int ¤t_number, + int &number_start, + int &total_digits, + int min_digits = 3); + int direct_frame_copy(EDL *edl, int64_t &render_video_position, File *file); + int direct_copy_possible(EDL *edl, + int64_t current_position, + Track* playable_track, // The one track which is playable + Edit* &playable_edit, // The edit which is playing + File *file); // Output file + + void start_progress(); + void stop_progress(); + +// Procedure the run function should use. + int mode; + enum + { + INTERACTIVE, + BATCH + }; +// When batch rendering is cancelled from the batch dialog + int batch_cancelled; + + + int load_mode; + int in_progress; +// Background compression must be disabled when direct frame copying and reenabled afterwards + int direct_frame_copying; + +// Copy of mwindow preferences or pointer to another preferences object + Preferences *preferences; + VFrame *compressed_output; + MainProgressBar *progress; + RenderProgress *render_progress; + RenderThread *thread; + MWindow *mwindow; + PlayableTracks *playable_tracks; + PackageDispatcher *packages; + Mutex *package_lock, *counter_lock; + int strategy; + int range_type; +// Total selection to render in seconds + double total_start, total_end; +// External Render farm checks this every frame. + int result; + int format_error; + Asset *default_asset; +// Asset containing the file format + Asset *asset; +// Jobs pointer passed to start_batches + ArrayList *jobs; +// Used by batch rendering to wait until rendering is finished + Condition *completion; + +// Total samples updated by the render farm and the local renderer. +// This avoids rounding errors and complies with the use of samples for +// timing. + int64_t total_rendered; +// Time used in last render + double elapsed_time; + +// Current open RenderWindow + RenderWindow *render_window; + +// For non interactive mode, maintain progress here. + int64_t progress_max; + Timer *progress_timer; + int64_t last_eta; +}; + + +class RenderThread : public Thread +{ +public: + RenderThread(MWindow *mwindow, Render *render); + ~RenderThread(); + + void run(); + + void render_single(int test_overwrite, + Asset *asset, + EDL *edl, + int strategy, + int range_type); + + MWindow *mwindow; + Render *render; +}; + +class RenderToTracks; + + +class RenderRangeProject : public BC_Radial +{ +public: + RenderRangeProject(RenderWindow *rwindow, int value, int x, int y); + int handle_event(); + RenderWindow *rwindow; +}; + +class RenderRangeSelection : public BC_Radial +{ +public: + RenderRangeSelection(RenderWindow *rwindow, int value, int x, int y); + int handle_event(); + RenderWindow *rwindow; +}; + + +class RenderRangeInOut : public BC_Radial +{ +public: + RenderRangeInOut(RenderWindow *rwindow, int value, int x, int y); + int handle_event(); + RenderWindow *rwindow; +}; + + + +class RenderWindow : public BC_Window +{ +public: + RenderWindow(MWindow *mwindow, + Render *render, + Asset *asset, + int x, + int y); + ~RenderWindow(); + + void create_objects(); + void update_range_type(int range_type); + void load_profile(int profile_slot); + + RenderRangeProject *rangeproject; + RenderRangeSelection *rangeselection; + RenderRangeInOut *rangeinout; + + RenderProfile *renderprofile; + + LoadMode *loadmode; + FormatTools *format_tools; + + MWindow *mwindow; + Render *render; + Asset *asset; +}; + + + + + + + + + + + + + +#endif