X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fplaybackengine.C;h=3b2b9ed4313f2ac01699179015e7fd61a85c9bf4;hp=571afe2a83a174a3eaeeab536182258131839d2b;hb=0b751b07a28e84a721b2bb76083db6629aa26d73;hpb=166867a58d74619aa11aeb562a994cc364d62231 diff --git a/cinelerra-5.1/cinelerra/playbackengine.C b/cinelerra-5.1/cinelerra/playbackengine.C index 571afe2a..3b2b9ed4 100644 --- a/cinelerra-5.1/cinelerra/playbackengine.C +++ b/cinelerra-5.1/cinelerra/playbackengine.C @@ -84,8 +84,8 @@ PlaybackEngine::~PlaybackEngine() done = 1; output_lock->unlock(); Thread::join(); - delete preferences; delete_render_engine(); + delete preferences; if( audio_cache ) audio_cache->remove_user(); if( video_cache ) @@ -147,14 +147,18 @@ void PlaybackEngine::delete_render_engine() void PlaybackEngine::arm_render_engine() { + renderengine_lock->lock("PlaybackEngine::arm_render_engine"); if( render_engine ) render_engine->arm_command(command); + renderengine_lock->unlock(); } void PlaybackEngine::start_render_engine() { + renderengine_lock->lock("PlaybackEngine::start_render_engine"); if( render_engine ) render_engine->start_command(); + renderengine_lock->unlock(); } void PlaybackEngine::wait_render_engine() @@ -180,14 +184,21 @@ void PlaybackEngine::create_cache() void PlaybackEngine::perform_change() { switch( command->change_type ) { - case CHANGE_ALL: - create_cache(); - case CHANGE_EDL: - create_render_engine(); - break; - case CHANGE_PARAMS: - render_engine->get_edl()->synchronize_params(command->get_edl()); - case CHANGE_NONE: + case CHANGE_ALL: + create_cache(); + case CHANGE_EDL: + create_render_engine(); + break; + case CHANGE_PARAMS: { + renderengine_lock->lock("PlaybackEngine::perform_change"); + EDL *edl = render_engine ? render_engine->get_edl() : 0; + if( edl ) edl->add_user(); + renderengine_lock->unlock(); + if( !edl ) break; + edl->synchronize_params(command->get_edl()); + edl->remove_user(); + } + case CHANGE_NONE: break; } }