X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frenderengine.C;h=4e8bc7de26d189ca8fc36ebf8c3fd5969b2feee5;hb=515b84f2ec94c9ba4808ef83710e7965c13b5c4f;hp=970a91b0571f9afff27e1ca68c57f71b819db584;hpb=49f85559268fc040fe7ba5611cc0520793cf728b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/renderengine.C b/cinelerra-5.1/cinelerra/renderengine.C index 970a91b0..4e8bc7de 100644 --- a/cinelerra-5.1/cinelerra/renderengine.C +++ b/cinelerra-5.1/cinelerra/renderengine.C @@ -66,16 +66,12 @@ 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"); output_lock = new Condition(1, "RenderEngine::output_lock"); + render_active = new Condition(1,"RenderEngine::render_active"); interrupt_lock = new Mutex("RenderEngine::interrupt_lock"); first_frame_lock = new Condition(1, "RenderEngine::first_frame_lock"); } @@ -193,11 +189,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__); @@ -503,6 +499,7 @@ void RenderEngine::get_module_levels(ArrayList *module_levels, int64_t p void RenderEngine::run() { + render_active->lock("RenderEngine::run"); start_render_threads(); start_lock->unlock(); interrupt_lock->unlock(); @@ -555,7 +552,13 @@ void RenderEngine::run() input_lock->unlock(); interrupt_lock->unlock(); + render_active->unlock(); } +void RenderEngine::wait_done() +{ + render_active->lock("RenderEngine::wait_done"); + render_active->unlock(); +}