#include <QTimer>
#include <QDir>
+#include <QString>
#include <QApplication>
-#include <stdlib.h>
+#include <cstdlib>
+#include <cstdarg>
if (level > MLT_LOG_ERROR) return;
QString error;
QApplication::postEvent(qApp->activeWindow() , new MltErrorEvent(error.vsprintf(fmt, vl).simplified()));
+ va_end(vl);
}
#ifdef Q_WS_MAC
self->showFrame(frame);
#endif
+
+ self->emitFrameNumber(mlt_frame_get_position(frame_ptr));
if (frame.get_double("_speed") == 0.0) {
self->emitConsumerStopped();
- } else {
- self->emitFrameNumber(mlt_frame_get_position(frame_ptr));
+ } else if (frame.get_double("_speed") < 0.0 && mlt_frame_get_position(frame_ptr) <= 0) {
+ self->pause();
+ self->emitConsumerStopped();
}
}
+
Render::Render(const QString & rendererName, int winid, int /* extid */, QString profile, QWidget *parent) :
QObject(parent),
m_isBlocked(0),
int Render::resetProfile(const QString profileName)
{
- if (!m_mltConsumer) return 0;
- if (m_activeProfile == profileName) {
- kDebug() << "reset to same profile, nothing to do";
- return 1;
+ if (m_mltConsumer) {
+ QString videoDriver = KdenliveSettings::videodrivername();
+ QString currentDriver = m_mltConsumer->get("video_driver");
+ if (getenv("SDL_VIDEO_YUV_HWACCEL") != NULL && currentDriver == "x11") currentDriver = "x11_noaccel";
+ if (m_activeProfile == profileName && currentDriver == videoDriver) {
+ kDebug() << "reset to same profile, nothing to do";
+ return 1;
+ }
+
+ if (m_isSplitView) slotSplitView(false);
+ if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
+ m_mltConsumer->purge();
+ delete m_mltConsumer;
+ m_mltConsumer = NULL;
}
- kDebug() << "// RESETTING PROFILE FROM: " << m_activeProfile << " TO: " << profileName; //KdenliveSettings::current_profile();
- if (m_isSplitView) slotSplitView(false);
- if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
- m_mltConsumer->purge();
- delete m_mltConsumer;
- m_mltConsumer = NULL;
QString scene = sceneList();
int pos = 0;
double current_fps = m_mltProfile->fps();
if (name.endsWith("markup") && !value.isEmpty())
metadataPropertyMap[ name.section('.', 0, -2)] = value;
}
-
+ producer->seek(0);
emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap, replaceProducer);
kDebug() << "REquested fuile info for: " << url.path();
delete frame;
m_fps = m_mltProducer->get_fps();
int error = connectPlaylist();
+
if (position != -1) {
m_mltProducer->seek(position);
emit rendererPosition(position);
{
if (m_winid == -1) return -1;
m_isBlocked = true;
- int error;
+ int error = 0;
kDebug() << "////// RENDER, SET SCENE LIST: " << playlist;
- if (m_mltConsumer == NULL) {
+ if (m_mltConsumer) {
+ if (!m_mltConsumer->is_stopped()) {
+ m_mltConsumer->stop();
+ }
+ m_mltConsumer->set("refresh", 0);
+ } else {
kWarning() << "/////// ERROR, TRYING TO USE NULL MLT CONSUMER";
- m_isBlocked = false;
- return -1;
+ error = -1;
}
- if (!m_mltConsumer->is_stopped()) {
- m_mltConsumer->stop();
- }
- m_mltConsumer->set("refresh", 0);
-
if (m_mltProducer) {
m_mltProducer->set_speed(0);
//if (KdenliveSettings::osdtimecode() && m_osdInfo) m_mltProducer->detach(*m_osdInfo);
if (!m_mltProducer || !m_mltProducer->is_valid()) {
kDebug() << " WARNING - - - - -INVALID PLAYLIST: " << tmp;
m_mltProducer = m_blackClip->cut(0, 50);
+ error = -1;
}
delete[] tmp;
}
kDebug() << "// NEW SCENE LIST DURATION SET TO: " << m_mltProducer->get_playtime();
- error = connectPlaylist();
+ if (error == 0) error = connectPlaylist();
+ else connectPlaylist();
fillSlowMotionProducers();
m_isBlocked = false;
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."));
- emit blockMonitors();
- delete m_mltProducer;
- m_mltProducer = NULL;
+ delete m_mltConsumer;
+ m_mltConsumer = NULL;
return -1;
}
emit durationChanged(m_mltProducer->get_playtime());
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."));
- emit blockMonitors();
- delete m_mltProducer;
- m_mltProducer = NULL;
+ //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."));
+ kdWarning() << "/ / / / CANNOT START MONITOR";
} else {
kDebug() << "----- MONITOR: " << m_name << " REFRESH";
m_isBlocked = false;
m_isBlocked = true;
m_mltConsumer->set("refresh", 0);
m_mltProducer->set_speed(0.0);
+ /*
+ The 2 lines below create a flicker loop
emit rendererPosition(m_framePosition);
- m_mltProducer->seek(m_framePosition);
+ m_mltProducer->seek(m_framePosition);*/
m_mltConsumer->purge();
}
m_isBlocked = true;
m_mltConsumer->set("refresh", 0);
m_mltProducer->set_speed(0.0);
- emit rendererPosition(m_framePosition);
+ //emit rendererPosition(m_framePosition);
m_mltProducer->seek(m_framePosition);
m_mltConsumer->purge();
//kDebug()<<" ********* RENDER PAUSE: "<<m_mltProducer->get_speed();
m_mltConsumer->set("play.real_time", dropFrames);
#endif
if (m_mltConsumer->start() == -1) {
- emit blockMonitors();
- delete m_mltProducer;
- m_mltProducer = NULL;
+ kdWarning() << "ERROR, Cannot start monitor";
}
}
if (blackclip == NULL || blackTrackPlaylist.count() != 1) {
blackTrackPlaylist.clear();
- m_blackClip->set("length", duration);
- m_blackClip->set("out", duration - 1);
- blackclip = m_blackClip->cut(0, duration - 1);
+ m_blackClip->set("length", duration + 1);
+ m_blackClip->set("out", duration);
+ blackclip = m_blackClip->cut(0, duration);
blackTrackPlaylist.insert_at(0, blackclip, 1);
} else {
if (duration > blackclip->parent().get_length()) {
- blackclip->parent().set("length", duration);
- blackclip->parent().set("out", duration - 1);
- blackclip->set("length", duration);
+ blackclip->parent().set("length", duration + 1);
+ blackclip->parent().set("out", duration);
+ blackclip->set("length", duration + 1);
}
- blackTrackPlaylist.resize_clip(0, 0, duration - 1);
+ blackTrackPlaylist.resize_clip(0, 0, duration);
}
delete blackclip;