#include "asset.h"
#include "audiodevice.h"
#include "bcsignals.h"
-#include "channeldb.h"
#include "condition.h"
#include "edl.h"
#include "edlsession.h"
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;
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");
}
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()
{
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);
}
void RenderEngine::run()
{
+ render_active->lock("RenderEngine::run");
start_render_threads();
start_lock->unlock();
interrupt_lock->unlock();
input_lock->unlock();
interrupt_lock->unlock();
+ render_active->unlock();
}
+void RenderEngine::wait_done()
+{
+ render_active->lock("RenderEngine::wait_done");
+ render_active->unlock();
+}