X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frender.C;h=4363cd9e0ebb5c0713779e6994fc685fadb11bcb;hb=723142d62d61cde588e961426440f839ca9dcda9;hp=6667cbbba30d1e6241fe2a6000d330285618c7e3;hpb=e5d1c3ec8b49e9e4cd31f30e991f52ab11de93b1;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/render.C b/cinelerra-5.1/cinelerra/render.C index 6667cbbb..4363cd9e 100644 --- a/cinelerra-5.1/cinelerra/render.C +++ b/cinelerra-5.1/cinelerra/render.C @@ -219,8 +219,8 @@ void MainPackageRenderer::set_progress(int64_t value) render->counter_lock->unlock(); -// This locks the preferences - if(mwindow) mwindow->preferences->copy_rates_from(preferences); + if( mwindow ) + mwindow->preferences->copy_rates_from(preferences); } int MainPackageRenderer::progress_cancelled() @@ -236,13 +236,13 @@ Render::Render(MWindow *mwindow) this->mwindow = mwindow; in_progress = 0; progress = 0; - preferences = 0; elapsed_time = 0.0; package_lock = new Mutex("Render::package_lock"); counter_lock = new Mutex("Render::counter_lock"); completion = new Condition(0, "Render::completion"); progress_timer = new Timer; range_type = RANGE_BACKCOMPAT; + preferences = new Preferences(); thread = new RenderThread(mwindow, this); render_window = 0; asset = 0; @@ -255,9 +255,7 @@ Render::~Render() delete package_lock; delete counter_lock; delete completion; -// May be owned by someone else. This is owned by mwindow, so we don't care -// about deletion. -// delete preferences; + delete preferences; delete progress_timer; if( asset ) asset->Garbage::remove_user(); delete thread; @@ -271,7 +269,7 @@ void Render::start_interactive() } else if( in_progress ) { int cx, cy; - mwindow->gui->get_abs_cursor_xy(cx, cy, 1); + mwindow->gui->get_abs_cursor(cx, cy, 1); ErrorBox error_box(_(PROGRAM_NAME ": Error"), cx, cy); error_box.create_objects(_("Already rendering")); error_box.raise_window(); @@ -295,7 +293,7 @@ void Render::start_batches(ArrayList *jobs) } else if( in_progress ) { int cx, cy; - mwindow->gui->get_abs_cursor_xy(cx, cy, 1); + mwindow->gui->get_abs_cursor(cx, cy, 1); ErrorBox error_box(_(PROGRAM_NAME ": Error"), cx, cy); error_box.create_objects("Already rendering"); error_box.raise_window(); @@ -308,19 +306,15 @@ void Render::start_batches(ArrayList *jobs) } void Render::start_batches(ArrayList *jobs, - BC_Hash *boot_defaults, - Preferences *preferences) + BC_Hash *boot_defaults, Preferences *batch_prefs) { mode = Render::BATCH; batch_cancelled = 0; + preferences->copy_from(batch_prefs); this->jobs = jobs; - this->preferences = preferences; completion->reset(); -PRINT_TRACE thread->run(); -PRINT_TRACE - this->preferences = 0; } @@ -394,7 +388,7 @@ void Render::handle_close_event(int result) } if( err_msg ) { int cx, cy; - mwindow->gui->get_abs_cursor_xy(cx, cy, 1); + mwindow->gui->get_abs_cursor(cx, cy, 1); ErrorBox error_box(_(PROGRAM_NAME ": Error"),cx, cy); error_box.create_objects(err_msg); error_box.raise_window(); @@ -477,25 +471,15 @@ int Render::check_asset(EDL *edl, Asset &asset) return 0; } -int Render::fix_strategy(int strategy, int use_renderfarm) +int Render::get_strategy(int use_renderfarm, int file_per_label) { - if(use_renderfarm) - { - if(strategy == FILE_PER_LABEL) - strategy = FILE_PER_LABEL_FARM; - else - if(strategy == SINGLE_PASS) - strategy = SINGLE_PASS_FARM; - } - else - { - if(strategy == FILE_PER_LABEL_FARM) - strategy = FILE_PER_LABEL; - else - if(strategy == SINGLE_PASS_FARM) - strategy = SINGLE_PASS; - } - return strategy; + return use_renderfarm ? + (file_per_label ? FILE_PER_LABEL_FARM : SINGLE_PASS_FARM) : + (file_per_label ? FILE_PER_LABEL : SINGLE_PASS ) ; +} +int Render::get_strategy() +{ + return get_strategy(preferences->use_renderfarm, file_per_label); } void Render::start_progress() @@ -632,7 +616,7 @@ void Render::get_starting_number(char *path, int Render::load_defaults(Asset *asset) { - strategy = mwindow->defaults->get("RENDER_STRATEGY", SINGLE_PASS); + file_per_label = mwindow->defaults->get("RENDER_FILE_PER_LABEL", 0); load_mode = mwindow->defaults->get("RENDER_LOADMODE", LOADMODE_NEW_TRACKS); range_type = mwindow->defaults->get("RENDER_RANGE_TYPE", RANGE_PROJECT); @@ -651,8 +635,8 @@ int Render::load_defaults(Asset *asset) int Render::load_profile(int profile_slot, Asset *asset) { char string_name[100]; - sprintf(string_name, "RENDER_%i_STRATEGY", profile_slot); - strategy = mwindow->defaults->get(string_name, SINGLE_PASS); + sprintf(string_name, "RENDER_%i_FILE_PER_LABEL", profile_slot); + file_per_label = mwindow->defaults->get(string_name, 0); // Load mode is not part of the profile // printf(string_name, "RENDER_%i_LOADMODE", profile_slot); // load_mode = mwindow->defaults->get(string_name, LOADMODE_NEW_TRACKS); @@ -668,7 +652,7 @@ int Render::load_profile(int profile_slot, Asset *asset) int Render::save_defaults(Asset *asset) { - mwindow->defaults->update("RENDER_STRATEGY", strategy); + mwindow->defaults->update("RENDER_FILE_PER_LABEL", file_per_label); mwindow->defaults->update("RENDER_LOADMODE", load_mode); mwindow->defaults->update("RENDER_RANGE_TYPE", range_type); @@ -715,15 +699,6 @@ void RenderThread::render_single(int test_overwrite, Asset *asset, EDL *edl, render->progress = 0; render->result = 0; - if(mwindow) - { - if(!render->preferences) - render->preferences = new Preferences; - - render->preferences->copy_from(mwindow->preferences); - } - - // Create rendering command TransportCommand *command = new TransportCommand; command->command = NORMAL_FWD; @@ -785,7 +760,6 @@ void RenderThread::render_single(int test_overwrite, Asset *asset, EDL *edl, if(mwindow) mwindow->stop_brender(); fs.complete_path(render->default_asset->path); - strategy = Render::fix_strategy(strategy, render->preferences->use_renderfarm); render->result = render->packages->create_packages(mwindow, command->get_edl(), @@ -930,7 +904,7 @@ if(debug) printf("Render::render %d\n", __LINE__); { if(debug) printf("Render::render %d\n", __LINE__); int cx, cy; - mwindow->gui->get_abs_cursor_xy(cx, cy, 1); + mwindow->gui->get_abs_cursor(cx, cy, 1); ErrorBox error_box(_(PROGRAM_NAME ": Error"), cx, cy); error_box.create_objects(_("Error rendering data.")); error_box.raise_window(); @@ -1036,10 +1010,13 @@ if(debug) printf("Render::render %d\n", __LINE__); void RenderThread::run() { + if( mwindow ) + render->preferences->copy_from(mwindow->preferences); + if(render->mode == Render::INTERACTIVE) { render_single(1, render->asset, mwindow->edl, - render->strategy, render->range_type); + render->get_strategy(), render->range_type); } else if(render->mode == Render::BATCH) @@ -1077,9 +1054,8 @@ void RenderThread::run() edl->create_objects(); file->read_from_file(job->edl_path); edl->load_xml(file, LOAD_ALL); - //PRINT_TRACE - render_single(0, job->asset, edl, job->strategy, RANGE_BACKCOMPAT); + render_single(0, job->asset, edl, job->get_strategy(), RANGE_BACKCOMPAT); //PRINT_TRACE edl->Garbage::remove_user(); @@ -1121,7 +1097,7 @@ void RenderThread::run() #define WIDTH 480 -#define HEIGHT 455 +#define HEIGHT 480 RenderWindow::RenderWindow(MWindow *mwindow, @@ -1135,6 +1111,9 @@ RenderWindow::RenderWindow(MWindow *mwindow, this->mwindow = mwindow; this->render = render; this->asset = asset; + render_format = 0; + loadmode = 0; + renderprofile = 0; rangeproject = 0; rangeselection = 0; rangeinout = 0; @@ -1143,15 +1122,11 @@ RenderWindow::RenderWindow(MWindow *mwindow, RenderWindow::~RenderWindow() { -SET_TRACE lock_window("RenderWindow::~RenderWindow"); -SET_TRACE delete render_format; -SET_TRACE delete loadmode; -SET_TRACE + delete renderprofile; unlock_window(); -SET_TRACE } @@ -1159,7 +1134,7 @@ void RenderWindow::load_profile(int profile_slot) { render->load_profile(profile_slot, asset); update_range_type(render->range_type); - render_format->update(asset, &render->strategy); + render_format->update(asset, &render->file_per_label); } @@ -1168,15 +1143,14 @@ void RenderWindow::create_objects() int x = 10, y = 10; lock_window("RenderWindow::create_objects"); add_subwindow(new BC_Title(x, y, - (char*)((render->strategy == FILE_PER_LABEL || - render->strategy == FILE_PER_LABEL_FARM) ? + (char*)(render->file_per_label ? _("Select the first file to render to:") : _("Select a file to render to:")))); y += 25; render_format = new RenderFormat(mwindow, this, asset); render_format->create_objects(x, y, - 1, 1, 1, 1, 0, 1, 0, 0, &render->strategy, 0); + 1, 1, 1, 1, 0, 1, 0, 0, &render->file_per_label, 0); BC_Title *title; add_subwindow(title = new BC_Title(x, y, _("Render range:"))); @@ -1185,16 +1159,18 @@ void RenderWindow::create_objects() if( is_image ) render->range_type = RANGE_1FRAME; - int x1 = x + title->get_w() + 20, x2 = x1 + 140; + int x1 = x + title->get_w() + 20; add_subwindow(rangeproject = new RenderRangeProject(this, render->range_type == RANGE_PROJECT, x1, y)); - add_subwindow(range1frame = new RenderRange1Frame(this, - render->range_type == RANGE_1FRAME, x2, y)); y += 20; add_subwindow(rangeselection = new RenderRangeSelection(this, render->range_type == RANGE_SELECTION, x1, y)); + y += 20; add_subwindow(rangeinout = new RenderRangeInOut(this, - render->range_type == RANGE_INOUT, x2, y)); + render->range_type == RANGE_INOUT, x1, y)); + y += 20; + add_subwindow(range1frame = new RenderRange1Frame(this, + render->range_type == RANGE_1FRAME, x1, y)); y += 30; if( is_image )