m_mltConsumer(NULL),
m_mltProducer(NULL),
m_mltProfile(NULL),
+ m_showFrameEvent(NULL),
+ m_pauseEvent(NULL),
m_externalConsumer(false),
m_isZoneMode(false),
m_isLoopMode(false),
m_mltProducer = m_blackClip->cut(0, 1);
m_mltConsumer->connect(*m_mltProducer);
m_mltProducer->set_speed(0.0);
+ m_refreshTimer.setSingleShot(true);
+ m_refreshTimer.setInterval(50);
+ connect(&m_refreshTimer, SIGNAL(timeout()), this, SLOT(refresh()));
}
Render::~Render()
//delete m_osdTimer;
m_requestList.clear();
m_infoThread.waitForFinished();
+ if (m_showFrameEvent) delete m_showFrameEvent;
+ if (m_pauseEvent) delete m_pauseEvent;
if (m_mltConsumer) delete m_mltConsumer;
if (m_mltProducer) delete m_mltProducer;
/*if (m_mltProducer) {
delete[] tmp;
if (m_mltConsumer->is_valid()) {
m_externalConsumer = true;
- m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show);
+ m_showFrameEvent = m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show);
m_mltConsumer->set("terminate_on_pause", 0);
m_mltConsumer->set("deinterlace_method", "onefield");
m_mltConsumer->set("real_time", KdenliveSettings::mltthreads());
m_mltConsumer = new Mlt::Consumer(*m_mltProfile, "sdl_audio");
m_mltConsumer->set("preview_off", 1);
m_mltConsumer->set("preview_format", mlt_image_rgb24a);
- m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_gl_frame_show);
+ m_showFrameEvent = m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_gl_frame_show);
} else {
m_mltConsumer = new Mlt::Consumer(*m_mltProfile, "sdl_preview");
- // FIXME: the event object returned by the listen gets leaked...
- m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show);
- m_mltConsumer->listen("consumer-sdl-paused", this, (mlt_listener) consumer_paused);
+ m_showFrameEvent = m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show);
+ m_pauseEvent = m_mltConsumer->listen("consumer-sdl-paused", this, (mlt_listener) consumer_paused);
m_mltConsumer->set("window_id", m_winid);
}
m_mltConsumer->set("resize", 1);
int Render::resetProfile(const QString &profileName, bool dropSceneList)
{
+ m_refreshTimer.stop();
if (m_mltConsumer) {
if (m_externalConsumer == KdenliveSettings::external_display()) {
if (KdenliveSettings::external_display() && m_activeProfile == profileName) return 1;
if (m_isSplitView) slotSplitView(false);
if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
m_mltConsumer->purge();
+ if (m_showFrameEvent) delete m_showFrameEvent;
+ m_showFrameEvent = NULL;
+ if (m_pauseEvent) delete m_pauseEvent;
+ m_pauseEvent = NULL;
delete m_mltConsumer;
m_mltConsumer = NULL;
}
int Render::setProducer(Mlt::Producer *producer, int position)
{
+ m_refreshTimer.stop();
QMutexLocker locker(&m_mutex);
QString currentId;
int consumerPosition = 0;
int Render::setSceneList(QString playlist, int position)
{
+ m_refreshTimer.stop();
QMutexLocker locker(&m_mutex);
if (m_winid == -1) return -1;
int error = 0;
if (m_mltConsumer->start() == -1) {
// ARGH CONSUMER BROKEN!!!!
KMessageBox::error(qApp->activeWindow(), i18n("Could not create the video preview window.\nThere is something wrong with your Kdenlive install or your driver settings, please fix it."));
+ if (m_showFrameEvent) delete m_showFrameEvent;
+ m_showFrameEvent = NULL;
+ if (m_pauseEvent) delete m_pauseEvent;
+ m_pauseEvent = NULL;
delete m_mltConsumer;
m_mltConsumer = NULL;
return -1;
if (m_mltConsumer->is_stopped()) {
m_mltConsumer->start();
}
- m_mltConsumer->set("refresh", "1");
m_mltProducer->set_speed(1.0);
+ m_mltConsumer->set("refresh", "1");
} else if (!play) {
m_mltProducer->set_speed(0.0);
m_mltConsumer->set("refresh", 0);
void Render::doRefresh()
{
- // Use a Timer so that we don't refresh too much
- QMutexLocker locker(&m_mutex);
+ m_refreshTimer.start();
+ /*QMutexLocker locker(&m_mutex);
if (m_mltConsumer) {
- if (m_mltConsumer->is_stopped()) m_mltConsumer->start();
+ if (m_mltConsumer->is_stopped()) {
+ kDebug()<<"pppppppppppppppp\n\nSTARTING CONSUMER: "<<m_name<<m_mltConsumer->start();
+ }
+ //m_mltProducer->set_speed(1);
m_mltConsumer->set("refresh", 1);
- }
+ //m_mltProducer->set_speed(0);
+ }*/
}
void Render::refresh()
}
}
-double Render::playSpeed()
+double Render::playSpeed() const
{
if (m_mltProducer) return m_mltProducer->get_speed();
return 0.0;