stop_command->realtime = 1;
sent_command = new TransportCommand();
sent_command->command = -1;
stop_command->realtime = 1;
sent_command = new TransportCommand();
sent_command->command = -1;
tracking_lock = new Mutex("PlaybackEngine::tracking_lock");
renderengine_lock = new Mutex("PlaybackEngine::renderengine_lock");
tracking_done = new Condition(1, "PlaybackEngine::tracking_done");
tracking_lock = new Mutex("PlaybackEngine::tracking_lock");
renderengine_lock = new Mutex("PlaybackEngine::renderengine_lock");
tracking_done = new Condition(1, "PlaybackEngine::tracking_done");
void PlaybackEngine::delete_render_engine()
{
renderengine_lock->lock("PlaybackEngine::delete_render_engine");
void PlaybackEngine::delete_render_engine()
{
renderengine_lock->lock("PlaybackEngine::delete_render_engine");
// Start tracking after arming so the tracking position doesn't change.
// The tracking for a single frame command occurs during PAUSE
init_tracking();
// Start tracking after arming so the tracking position doesn't change.
// The tracking for a single frame command occurs during PAUSE
init_tracking();
void PlaybackEngine::stop_playback(int wait_tracking)
{
transport_stop(wait_tracking);
renderengine_lock->lock("PlaybackEngine::stop_playback");
void PlaybackEngine::stop_playback(int wait_tracking)
{
transport_stop(wait_tracking);
renderengine_lock->lock("PlaybackEngine::stop_playback");
{
//printf("PlaybackEngine::send_command 1 %d\n", command);
// Stop requires transferring the output buffer to a refresh buffer.
{
//printf("PlaybackEngine::send_command 1 %d\n", command);
// Stop requires transferring the output buffer to a refresh buffer.
int curr_single_frame = TransportCommand::single_frame(curr_command);
int curr_audio = this->command->toggle_audio ?
!curr_single_frame : curr_single_frame;
int single_frame = TransportCommand::single_frame(command);
int next_audio = next_command->toggle_audio ? !single_frame : single_frame;
int curr_single_frame = TransportCommand::single_frame(curr_command);
int curr_audio = this->command->toggle_audio ?
!curr_single_frame : curr_single_frame;
int single_frame = TransportCommand::single_frame(command);
int next_audio = next_command->toggle_audio ? !single_frame : single_frame;
// Same direction pressed twice, not shuttle, and no change in audio state, Stop
// Same direction pressed twice, not shuttle, and no change in audio state, Stop
// Start from scratch
transport_command(command, CHANGE_NONE, edl, use_inout);
break;
// Start from scratch
transport_command(command, CHANGE_NONE, edl, use_inout);
break;
// Just change the EDL if the change requires it because renderengine
// structures won't point to the new EDL otherwise and because copying the
// EDL for every cursor movement is slow.
// Just change the EDL if the change requires it because renderengine
// structures won't point to the new EDL otherwise and because copying the
// EDL for every cursor movement is slow.
next_command->set_playback_range(new_edl, use_inout,
preferences->forward_render_displacement);
}
next_command->set_playback_range(new_edl, use_inout,
preferences->forward_render_displacement);
}