}
}
-Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent): QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_winid(-1), m_framePosition(0), m_generateScenelist(false), m_isBlocked(true), m_blackClip(NULL), m_isSplitView(false) {
+Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent): QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_winid(winid), m_externalwinid(extid), m_framePosition(0), m_isBlocked(true), m_blackClip(NULL), m_isSplitView(false) {
kDebug() << "////////// USING PROFILE: " << (char*)KdenliveSettings::current_profile().toUtf8().data();
refreshTimer = new QTimer(this);
connect(refreshTimer, SIGNAL(timeout()), this, SLOT(refresh()));
m_osdProfile = KStandardDirs::locate("data", "kdenlive/profiles/metadata.properties");
buildConsumer();
- m_externalwinid = extid;
- m_winid = winid;
Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile , "colour", "black");
m_mltProducer = producer;
if (m_blackClip) delete m_blackClip;
/** Create the producer from the Westley QDomDocument */
void Render::setProducer(Mlt::Producer *producer, int position) {
if (m_winid == -1) return;
- m_generateScenelist = true;
if (m_mltConsumer) {
m_mltConsumer->stop();
} else return;
+ m_isBlocked = true;
if (m_mltProducer) {
m_mltProducer->set_speed(0);
delete m_mltProducer;
m_mltProducer->seek(position);
emit rendererPosition(position);
}
- m_generateScenelist = false;
+ m_isBlocked = false;
}
/** Create the producer from the Westley QDomDocument */
void Render::setSceneList(QString playlist, int position) {
if (m_winid == -1) return;
- m_generateScenelist = true;
+ m_isBlocked = true;
kWarning() << "////// RENDER, SET SCENE LIST: " << playlist;
-
- /*
- if (!clip.is_valid()) {
- kWarning()<<" ++++ WARNING, UNABLE TO CREATE MLT PRODUCER";
- m_generateScenelist = false;
- return;
- }*/
-
if (m_mltConsumer) {
m_mltConsumer->stop();
//m_mltConsumer->set("refresh", 0);
kDebug() << "// NEW SCENE LIST DURATION SET TO: " << m_mltProducer->get_playtime();
connectPlaylist();
if (position != 0) {
- m_mltProducer->seek(position);
- emit rendererPosition(position);
+ //TODO: seek to correct place after opening project.
+ // Needs to be done from another place since it crashes here.
+ //m_mltProducer->seek(position);
+ //emit rendererPosition(position);
}
- m_generateScenelist = false;
+ m_isBlocked = false;
}
return;
}
- if (m_mltConsumer->is_stopped()) {
+ if (m_mltConsumer && m_mltConsumer->is_stopped()) {
kDebug() << "----- MONITOR: " << m_name << " WAS STOPPED";
if (m_mltConsumer->start() == -1) {
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."));
kDebug() << "///////////// RENDER STOPPED: " << m_name;
m_isBlocked = true;
m_mltConsumer->set("refresh", 0);
- m_mltConsumer->stop();
+ m_mltConsumer->stop();
+ // delete m_mltConsumer;
+ // m_mltConsumer = NULL;
}
kDebug() << "///////////// RENDER STOP2-------";
m_isBlocked = true;
if (m_mltProducer) {
m_mltProducer->set_speed(0.0);
- m_mltProducer->set("out", m_mltProducer->get_length() - 1);
- kDebug() << m_mltProducer->get_length();
+ //m_mltProducer->set("out", m_mltProducer->get_length() - 1);
+ //kDebug() << m_mltProducer->get_length();
}
kDebug() << "///////////// RENDER STOP3-------";
}
}
void Render::switchPlay() {
- if (!m_mltProducer)
+ if (!m_mltProducer || !m_mltConsumer)
return;
if (m_mltProducer->get_speed() == 0.0) {
//m_isBlocked = false;
void Render::doRefresh() {
// Use a Timer so that we don't refresh too much
- m_mltConsumer->set("refresh", 1);
+ if (!m_isBlocked && m_mltConsumer) m_mltConsumer->set("refresh", 1);
}
void Render::refresh() {
void Render::emitFrameNumber(double position) {
- //if (m_generateScenelist) return;
m_framePosition = position;
emit rendererPosition((int) position);
//if (qApp->activeWindow()) QApplication::postEvent(qApp->activeWindow(), new PositionChangeEvent( GenTime((int) position, m_fps), m_monitorId));
void Render::emitConsumerStopped() {
// This is used to know when the playing stopped
- if (m_mltProducer && !m_generateScenelist) {
+ if (m_mltProducer) {
double pos = m_mltProducer->position();
emit rendererStopped((int) pos);
//if (qApp->activeWindow()) QApplication::postEvent(qApp->activeWindow(), new PositionChangeEvent(GenTime((int) pos, m_fps), m_monitorId + 100));