X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frenderengine.C;h=8ded04e44d2911a61ea53ada36f52412a49d8178;hp=abca0715be47135761d7ca78d67fc041cadf3e2b;hb=7b05ad287956f8bd00836d9b5fb39f899a5fb641;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd diff --git a/cinelerra-5.1/cinelerra/renderengine.C b/cinelerra-5.1/cinelerra/renderengine.C index abca0715..8ded04e4 100644 --- a/cinelerra-5.1/cinelerra/renderengine.C +++ b/cinelerra-5.1/cinelerra/renderengine.C @@ -24,7 +24,6 @@ #include "asset.h" #include "audiodevice.h" #include "bcsignals.h" -#include "channeldb.h" #include "condition.h" #include "edl.h" #include "edlsession.h" @@ -46,13 +45,11 @@ RenderEngine::RenderEngine(PlaybackEngine *playback_engine, Preferences *preferences, Canvas *output, - ChannelDB *channeldb, int is_nested) : Thread(1, 0, 0) { this->playback_engine = playback_engine; this->output = output; - this->channeldb = channeldb; this->is_nested = is_nested; audio = 0; video = 0; @@ -69,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"); } @@ -93,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; @@ -196,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__); @@ -248,26 +242,6 @@ int RenderEngine::brender_available(int position, int direction) return 0; } -Channel* RenderEngine::get_current_channel() -{ - if(channeldb) - { - switch(config->vconfig->driver) - { - case PLAYBACK_BUZ: - if(config->vconfig->buz_out_channel >= 0 && - config->vconfig->buz_out_channel < channeldb->size()) - { - return channeldb->get(config->vconfig->buz_out_channel); - } - break; - case VIDEO4LINUX2JPEG: - case VIDEO4LINUX2MPEG: - break; - } - } - return 0; -} CICache* RenderEngine::get_acache() { @@ -356,8 +330,6 @@ int RenderEngine::open_output() get_output_h(), output, command->single_frame()); - Channel *channel = get_current_channel(); - if(channel) video->set_channel(channel); video->set_quality(80); video->set_cpus(preferences->processors); } @@ -528,6 +500,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(); @@ -580,7 +553,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(); +}