__LINE__, nested_edl, current_edit->nested_edl);
// Convert requested direction to command
- if(renderengine->command->command == CURRENT_FRAME)
+ if( renderengine->command->command == CURRENT_FRAME ||
+ renderengine->command->command == LAST_FRAME )
{
- command = CURRENT_FRAME;
+ command = renderengine->command->command;
}
else
if(direction == PLAY_REVERSE)
}
if(debug) printf("VModule::import_frame %d\n", __LINE__);
- if(!output) printf("VModule::import_frame %d output=%p\n", __LINE__, output);
+ if( output ) {
+ if( use_opengl )
+ x11_device->clear_input(output);
+ else
+ output->clear_frame();
+ }
+ else
+ printf("VModule::import_frame %d output=%p\n", __LINE__, output);
if(current_edit &&
(current_edit->asset ||
{
File *file = 0;
- if(debug) printf("VModule::import_frame %d cache=%p\n",
- __LINE__,
- get_cache());
- if(current_edit->asset)
- {
+//printf("VModule::import_frame %d cache=%p\n", __LINE__, get_cache());
+ if( current_edit->asset ) {
get_cache()->age();
file = get_cache()->check_out(current_edit->asset,
get_edl());
{
// integrate position from start of edit.
double speed_position = edit_startsource;
- FloatAuto *previous = 0;
- FloatAuto *next = 0;
FloatAutos *speed_autos = (FloatAutos*)track->automation->autos[AUTOMATION_SPEED];
- for(int64_t i = edit_startproject; i < direction_position; i++)
- {
- double speed = speed_autos->get_value(i,
- PLAY_FORWARD,
- previous,
- next);
- speed_position += speed;
- }
+ speed_position += speed_autos->automation_integral(edit_startproject,
+ direction_position-edit_startproject, PLAY_FORWARD);
//printf("VModule::import_frame %d %lld %lld\n", __LINE__, position, (int64_t)speed_position);
position = (int64_t)speed_position;
}
}
else
{
- max_position = Units::to_int64(nested_edl->tracks->total_playable_length() *
+ max_position = Units::to_int64(nested_edl->tracks->total_length() *
frame_rate - 1);
}
int use_cache = renderengine &&
renderengine->command->single_frame();
- int use_asynchronous = !use_cache && renderengine &&
+// int use_asynchronous = !use_cache &&
+// renderengine &&
// Try to make rendering go faster.
// But converts some formats to YUV420, which may degrade input format.
-// renderengine->command->realtime &&
- renderengine->get_edl()->session->video_asynchronous;
+//// renderengine->command->realtime &&
+// renderengine->get_edl()->session->video_asynchronous;
if(file)
{
if(debug) printf("VModule::import_frame %d\n", __LINE__);
- if(use_asynchronous)
- file->start_video_decode_thread();
- else
+// if(use_asynchronous)
+// file->start_video_decode_thread();
+// else
file->stop_video_thread();
int64_t normalized_position = Units::to_int64(position *
!EQUIV(in_w, asset_w) ||
!EQUIV(in_h, asset_h))
{
- if(debug) printf("VModule::import_frame %d file -> temp -> output\n", __LINE__);
+//printf("VModule::import_frame %d file -> temp -> output\n", __LINE__);
if(!(*input))
{
- (*input) = new VFrame(0,
- -1,
- asset_w,
- asset_h,
- get_edl()->session->color_model,
- -1);
+ (*input) =
+ new VFrame(asset_w, asset_h,
+ get_edl()->session->color_model);
}
get_edl()->session->interpolation_type);
}
result = 1;
+
output->copy_stacks((*input));
+
+
+//printf("VModule::import_frame %d\n", __LINE__);
+//(*input)->dump_params();
+//output->dump_params();
}
else
// file -> output
else
// Source not found
{
- if(debug) printf("VModule::import_frame %d\n", __LINE__);
- if(use_opengl)
- {
- x11_device->clear_input(output);
- }
- else
- {
- output->clear_frame();
- }
result = 1;
}
+
+// printf("VModule::import_frame %d cache=%p\n",
+// __LINE__,
+// get_cache());
+
}
else
// Source is silence
// Load incoming frame
if(!(*transition_input))
{
- (*transition_input) = new VFrame(0,
- -1,
- track->track_w,
- track->track_h,
- get_edl()->session->color_model,
- -1);
+ (*transition_input) =
+ new VFrame(track->track_w, track->track_h,
+ get_edl()->session->color_model);
}
(*transition_input)->copy_stacks(output);