add prof sigusr1 feature, tweak amdgup tooltip, fix colorpicker handle_new_color...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / playbackengine.C
index 71126cf82810c6fce05b7c2a1aa9dae7ce4c273b..228f3890b2def426bf3d37f808c81fbeeaabb6ad 100644 (file)
@@ -130,7 +130,11 @@ int PlaybackEngine::create_render_engine()
 void PlaybackEngine::delete_render_engine()
 {
        renderengine_lock->lock("PlaybackEngine::delete_render_engine");
-       delete render_engine;  render_engine = 0;
+       if( render_engine ) {
+               render_engine->interrupt_playback();
+               render_engine->wait_done();
+               delete render_engine;  render_engine = 0;
+       }
        renderengine_lock->unlock();
 }
 
@@ -407,7 +411,8 @@ void PlaybackEngine::run()
 // Start tracking after arming so the tracking position doesn't change.
 // The tracking for a single frame command occurs during PAUSE
                        init_tracking();
-                       clear_output();
+                       if( !command->single_frame() )
+                               clear_output();
 // Dispatch the command
                        start_render_engine();
                        break;
@@ -534,9 +539,9 @@ int PlaybackEngine::transport_command(int command, int change_type, EDL *new_edl
 // 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.
-               if( change_type & CHANGE_EDL )
+               if( change_type == CHANGE_EDL || change_type == CHANGE_ALL )
                        next_command->get_edl()->copy_all(new_edl);
-               else if( change_type & CHANGE_PARAMS )
+               else if( change_type == CHANGE_PARAMS )
                        next_command->get_edl()->synchronize_params(new_edl);
                next_command->set_playback_range(new_edl, use_inout,
                                preferences->forward_render_displacement);