X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frender.C;h=e7b3e12d54b3dafc3ca942a31ab9b19ef8853a14;hb=26f3c4335351a3938db78303c57a2ba6551a2a10;hp=4363cd9e0ebb5c0713779e6994fc685fadb11bcb;hpb=723142d62d61cde588e961426440f839ca9dcda9;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/render.C b/cinelerra-5.1/cinelerra/render.C index 4363cd9e..e7b3e12d 100644 --- a/cinelerra-5.1/cinelerra/render.C +++ b/cinelerra-5.1/cinelerra/render.C @@ -187,35 +187,7 @@ void MainPackageRenderer::set_progress(int64_t value) // If non interactive, print progress out if(!render->progress) - { - int64_t current_eta = render->progress_timer->get_scaled_difference(1000); - if(current_eta - render->last_eta > 1000) - { - double eta = 0; - - - if(render->total_rendered) - { - eta = current_eta / - 1000 * - render->progress_max / - render->total_rendered - - current_eta / - 1000; - } - - char string[BCTEXTLEN]; - Units::totext(string, - eta, - TIME_HMS2); - - printf("\r%d%% %s: %s ", - (int)(100 * (float)render->total_rendered / render->progress_max), - _("ETA"), string); - fflush(stdout); - render->last_eta = current_eta; - } - } + render->show_progress(); render->counter_lock->unlock(); @@ -247,6 +219,7 @@ Render::Render(MWindow *mwindow) render_window = 0; asset = 0; result = 0; + beep = 0; } Render::~Render() @@ -342,9 +315,11 @@ BC_Window* Render::new_gui() void Render::handle_done_event(int result) { if(!result) { + mwindow->edl->session->render_beep = beep; // add to recentlist only on OK render_window->render_format->path_recent-> add_item(File::formattostr(asset->format), asset->path); + setenv("CIN_RENDER", asset->path, 1); } render_window = 0; } @@ -430,8 +405,6 @@ void Render::stop_operation() } } - - int Render::check_asset(EDL *edl, Asset &asset) { if(asset.video_data && @@ -471,15 +444,15 @@ int Render::check_asset(EDL *edl, Asset &asset) return 0; } -int Render::get_strategy(int use_renderfarm, int file_per_label) +int Render::get_strategy(int use_renderfarm, int use_labels) { return use_renderfarm ? - (file_per_label ? FILE_PER_LABEL_FARM : SINGLE_PASS_FARM) : - (file_per_label ? FILE_PER_LABEL : SINGLE_PASS ) ; + (use_labels ? FILE_PER_LABEL_FARM : SINGLE_PASS_FARM) : + (use_labels ? FILE_PER_LABEL : SINGLE_PASS ) ; } int Render::get_strategy() { - return get_strategy(preferences->use_renderfarm, file_per_label); + return get_strategy(preferences->use_renderfarm, use_labels); } void Render::start_progress() @@ -527,6 +500,19 @@ void Render::stop_progress() progress = 0; } +void Render::show_progress() +{ + int64_t current_eta = progress_timer->get_scaled_difference(1000); + if (current_eta - last_eta < 1000 ) return; + double eta = !total_rendered ? 0 : + current_eta / 1000. * (progress_max / (double)total_rendered - 1.); + char string[BCTEXTLEN]; Units::totext(string, eta, TIME_HMS2); + printf("\r%d%% %s: %s ", + (int)(100 * (float)total_rendered / progress_max), _("ETA"), string); + fflush(stdout); + last_eta = current_eta; +} + void Render::start_render() @@ -616,7 +602,7 @@ void Render::get_starting_number(char *path, int Render::load_defaults(Asset *asset) { - file_per_label = mwindow->defaults->get("RENDER_FILE_PER_LABEL", 0); + use_labels = 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); @@ -636,7 +622,7 @@ int Render::load_profile(int profile_slot, Asset *asset) { char string_name[100]; sprintf(string_name, "RENDER_%i_FILE_PER_LABEL", profile_slot); - file_per_label = mwindow->defaults->get(string_name, 0); + use_labels = 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); @@ -652,7 +638,7 @@ int Render::load_profile(int profile_slot, Asset *asset) int Render::save_defaults(Asset *asset) { - mwindow->defaults->update("RENDER_FILE_PER_LABEL", file_per_label); + mwindow->defaults->update("RENDER_FILE_PER_LABEL", use_labels); mwindow->defaults->update("RENDER_LOADMODE", load_mode); mwindow->defaults->update("RENDER_RANGE_TYPE", range_type); @@ -689,7 +675,6 @@ void RenderThread::render_single(int test_overwrite, Asset *asset, EDL *edl, double total_length; RenderFarmServer *farm_server = 0; FileSystem fs; - //int done = 0; const int debug = 0; render->in_progress = 1; @@ -771,7 +756,6 @@ void RenderThread::render_single(int test_overwrite, Asset *asset, EDL *edl, test_overwrite); } - //done = 0; render->total_rendered = 0; if(!render->result) @@ -863,15 +847,9 @@ void RenderThread::render_single(int test_overwrite, Asset *asset, EDL *edl, // Exit point if(!package) { - //done = 1; break; } - - - Timer timer; - timer.update(); - if(package_renderer.render_package(package)) render->result = 1; @@ -886,8 +864,14 @@ printf("Render::render_single: Session finished.\n"); - if(strategy == SINGLE_PASS_FARM || strategy == FILE_PER_LABEL_FARM) - { + if( strategy == SINGLE_PASS_FARM || + strategy == FILE_PER_LABEL_FARM ) { + if( !render->progress ) { + while( farm_server->active_clients() > 0 ) { + sleep(1); + render->show_progress(); + } + } farm_server->wait_clients(); render->result |= render->packages->packages_are_done(); } @@ -1093,6 +1077,9 @@ void RenderThread::run() } } render->completion->unlock(); + + if( render->mode == Render::INTERACTIVE && render->beep ) + mwindow->beep(3000., 1.5, 0.5); } @@ -1134,7 +1121,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->file_per_label); + render_format->update(asset, &render->use_labels); } @@ -1143,14 +1130,14 @@ void RenderWindow::create_objects() int x = 10, y = 10; lock_window("RenderWindow::create_objects"); add_subwindow(new BC_Title(x, y, - (char*)(render->file_per_label ? + (char*)(render->use_labels ? _("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->file_per_label, 0); + 1, 1, 1, 1, 0, 1, 0, 0, &render->use_labels, 0); BC_Title *title; add_subwindow(title = new BC_Title(x, y, _("Render range:"))); @@ -1159,23 +1146,33 @@ void RenderWindow::create_objects() if( is_image ) render->range_type = RANGE_1FRAME; - int x1 = x + title->get_w() + 20; + int x1 = x + title->get_w() + 20, y1 = y; add_subwindow(rangeproject = new RenderRangeProject(this, render->range_type == RANGE_PROJECT, x1, y)); + int x2 = x1 + rangeproject->get_w(); y += 20; add_subwindow(rangeselection = new RenderRangeSelection(this, render->range_type == RANGE_SELECTION, x1, y)); + int x3 = x1 + rangeselection->get_w(); + if( x2 < x3 ) x2 = x3; y += 20; add_subwindow(rangeinout = new RenderRangeInOut(this, render->range_type == RANGE_INOUT, x1, y)); + x3 = x1 + rangeinout->get_w(); + if( x2 < x3 ) x2 = x3; y += 20; add_subwindow(range1frame = new RenderRange1Frame(this, render->range_type == RANGE_1FRAME, x1, y)); + x3 = x1 + range1frame->get_w(); + if( x2 < x3 ) x2 = x3; y += 30; - if( is_image ) enable_render_range(0); + x1 = x2 + 20; + render->beep = mwindow->edl->session->render_beep; + add_subwindow(beep_on_done = new RenderBeepOnDone(this, x1, y1)); + renderprofile = new RenderProfile(mwindow, this, x, y, 1); renderprofile->create_objects(); y += 70; @@ -1321,3 +1318,16 @@ void RenderFormat::update_format() render_window->enable_render_range(1); } +RenderBeepOnDone::RenderBeepOnDone(RenderWindow *rwindow, int x, int y) + : BC_CheckBox(x, y, rwindow->render->beep, _("Beep on done")) +{ + this->rwindow = rwindow; +} + +int RenderBeepOnDone::handle_event() +{ + rwindow->render->beep = get_value(); + return 1; +} + +