search fixes, preset fixes, ladspa icon logging, igor pref theme, drag btn rollover
[goodguy/history.git] / cinelerra-5.1 / cinelerra / renderengine.C
index 6ad6629c00719f9bce155cff2a680e768ee3d34d..628255b56a814c5a44996ed8cfb84e4fc21e7566 100644 (file)
@@ -66,12 +66,7 @@ RenderEngine::RenderEngine(PlaybackEngine *playback_engine,
 
        audio_cache = 0;
        video_cache = 0;
-       if(playback_engine && playback_engine->mwindow)
-               mwindow = playback_engine->mwindow;
-       else
-               mwindow = 0;
-       show_tc = 0;
-
+       mwindow = !playback_engine ? 0 : playback_engine->mwindow;
 
        input_lock = new Condition(1, "RenderEngine::input_lock");
        start_lock = new Condition(1, "RenderEngine::start_lock");
@@ -91,6 +86,7 @@ RenderEngine::~RenderEngine()
        delete input_lock;
        delete start_lock;
        delete output_lock;
+       delete render_active;
        delete interrupt_lock;
        delete first_frame_lock;
        delete config;
@@ -194,11 +190,11 @@ void RenderEngine::get_duty()
        do_video = 0;
 
 //printf("RenderEngine::get_duty %d\n", __LINE__);
-       if(!command->single_frame() &&
-               get_edl()->tracks->playable_audio_tracks() &&
-               get_edl()->session->audio_channels)
+       if( get_edl()->tracks->playable_audio_tracks() &&
+           get_edl()->session->audio_channels )
        {
-               do_audio = 1;
+               do_audio = !command->single_frame() ? 1 : 0;
+               if( command->audio_toggle ) do_audio = !do_audio;
        }
 
 //printf("RenderEngine::get_duty %d\n", __LINE__);
@@ -548,6 +544,12 @@ void RenderEngine::run()
                                }
                        }
 
+                       if( playback_engine->is_playing_back && command->displacement ) {
+                               double position = playback_engine->tracking_position -
+                                       1./command->get_edl()->session->frame_rate;
+                               playback_engine->tracking_position = position >= 0 ? position : 0;
+                       }
+
                        if(!interrupted) playback_engine->command->command = STOP;
                        playback_engine->stop_tracking();