/*
* CINELERRA
* Copyright (C) 1997-2011 Adam Williams <broadcast at earthling dot net>
+ * Copyright (C) 2003-2016 Cinelerra CV contributors
*
* 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
Render::~Render()
{
+ stop_operation();
close_window();
delete package_lock;
delete counter_lock;
}
EDL *edl = mwindow->edl;
if( !result && use_labels && !edl->labels->first ) {
- eprintf(_("render file per label and no labels\n"));
+ eprintf(_("Create new file at labels checked, but no labels\n"));
result = 1;
}
if( !result && asset->video_data ) {
return 0;
}
-int Render::get_strategy(int use_renderfarm, int use_labels)
+int Render::get_strategy(int use_renderfarm, int use_labels, int range_type)
{
- return use_renderfarm ?
- (use_labels ? FILE_PER_LABEL_FARM : SINGLE_PASS_FARM) :
- (use_labels ? FILE_PER_LABEL : SINGLE_PASS ) ;
+ return range_type == RANGE_1FRAME ? SINGLE_PASS :
+ use_renderfarm ?
+ (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, use_labels);
+ return get_strategy(preferences->use_renderfarm, use_labels, range_type);
}
void Render::start_progress()
render->result = 0;
// Create rendering command
- TransportCommand *command = new TransportCommand;
+ TransportCommand *command = new TransportCommand(render->preferences);
command->command = NORMAL_FWD;
command->get_edl()->copy_all(edl);
command->change_type = CHANGE_ALL;
if( !render->result ) {
// Get total range to render
render->total_start = command->start_position;
+#if 0
+ render->default_asset->timecode = command->start_position;
+ printf("tc: %f \n", render->default_asset->timecode);
+ render->default_asset->timecode += edl->session->timecode_offset;
+#endif
render->total_end = command->end_position;
total_length = render->total_end - render->total_start;
render->result = 1;
}
}
-
- render_frames = render->default_asset->frame_rate * total_length;
+// prevent single frame truncation to zero frames
+ render_frames = render->default_asset->frame_rate * total_length + 1e-4;
// Generate packages
if( !render->result ) {
mwindow->restart_brender();
if( farm_server ) delete farm_server;
delete command;
- delete audio_cache;
- delete video_cache;
+ audio_cache->remove_user();
+ video_cache->remove_user();
// Must delete packages after server
delete render->packages;
render_frames, render_time, render_rate);
}
- if( render->mode == Render::INTERACTIVE && render->beep )
- mwindow->beep(3000., 1.5, 0.5);
+ float gain = render->beep;
+ if( render->mode == Render::INTERACTIVE && gain > 0 )
+ mwindow->beep(3000., 1.5, gain);
if( script ) {
if( !render->result )
}
-#define WIDTH 480
-#define HEIGHT 480
+#define WIDTH xS(480)
+#define HEIGHT yS(480)
RenderWindow::RenderWindow(MWindow *mwindow,
rangeselection = 0;
rangeinout = 0;
range1frame = 0;
+// *** CONTEXT_HELP ***
+ context_help_set_keyword("Single File Rendering");
}
RenderWindow::~RenderWindow()
void RenderWindow::create_objects()
{
- int x = 10, y = 10;
+ int xs10 = xS(10), xs20 = xS(20);
+ int ys10 = yS(10), ys20 = yS(20), ys25 = yS(25), ys30 = yS(30);
+ int x = xs10, y = ys10;
lock_window("RenderWindow::create_objects");
add_subwindow(file_format = new BC_Title(x, y,
(render->use_labels ?
_("Select the first file to render to:") :
_("Select a file to render to:"))));
- y += 25;
+ y += ys25;
render_format = new RenderFormat(mwindow, this, asset);
render_format->create_objects(x, y,
if( is_image )
render->range_type = RANGE_1FRAME;
- int x1 = x + title->get_w() + 20, y1 = y;
+ int x1 = x + title->get_w() + xs20, y1 = y;
add_subwindow(rangeproject = new RenderRangeProject(this,
render->range_type == RANGE_PROJECT, x1, y));
int x2 = x1 + rangeproject->get_w();
- y += 20;
+ y += ys20;
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;
+ y += ys20;
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;
+ y += ys20;
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;
+ y += ys30;
if( is_image )
enable_render_range(0);
- x1 = x2 + 20;
+ x1 = x2 + xs20;
render->beep = mwindow->edl->session->render_beep;
add_subwindow(beep_on_done = new RenderBeepOnDone(this, x1, y1));
+ y1 += beep_on_done->get_h();
+ add_subwindow(new BC_Title(x1, y1, _("Beep on done volume")));
renderprofile = new RenderProfile(mwindow, this, x, y, 1);
renderprofile->create_objects();
- y += 70;
+ y += yS(70);
loadmode = new LoadMode(mwindow, this, x, y, &render->load_mode);
loadmode->create_objects();
}
RenderBeepOnDone::RenderBeepOnDone(RenderWindow *rwindow, int x, int y)
- : BC_CheckBox(x, y, rwindow->render->beep, _("Beep on done"))
+ : BC_FPot(x, y, rwindow->render->beep*100.f, 0.f, 100.f)
{
this->rwindow = rwindow;
}
int RenderBeepOnDone::handle_event()
{
- rwindow->render->beep = get_value();
+ rwindow->render->beep = get_value()/100.f;
return 1;
}