From 7e5766e97e9b0db202d7d85a64b7d2567f35f282 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Mon, 17 Dec 2012 17:37:56 +0100 Subject: [PATCH] Fix play zone sometimes blocking seeking: http://kdenlive.org/mantis/view.php?id=2876 --- src/mainwindow.cpp | 1 - src/renderer.cpp | 6 +++--- src/renderer.h | 1 - 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 24933c2d..7c1aee5b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -925,7 +925,6 @@ void MainWindow::slotConnectMonitors() connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QString &, int, int)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QString &, int, int))); connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QImage &)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QImage &))); - kDebug()<<" - - - - - -\n CONNECTED REPLY"; connect(m_projectMonitor->render, SIGNAL(replyGetFileProperties(const QString &, Mlt::Producer*, const stringMap &, const stringMap &, bool)), m_projectList, SLOT(slotReplyGetFileProperties(const QString &, Mlt::Producer*, const stringMap &, const stringMap &, bool))); connect(m_projectMonitor->render, SIGNAL(removeInvalidClip(const QString &, bool)), m_projectList, SLOT(slotRemoveInvalidClip(const QString &, bool))); diff --git a/src/renderer.cpp b/src/renderer.cpp index 70cf139d..a1106196 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -1612,8 +1612,7 @@ void Render::playZone(const GenTime & startTime, const GenTime & stopTime) { requestedSeekPosition = SEEK_INACTIVE; if (!m_mltProducer || !m_mltConsumer) - return; - if (!m_isZoneMode) m_originalOut = m_mltProducer->get_playtime() - 1; + return; m_mltProducer->set("out", (int)(stopTime.frames(m_fps))); m_mltProducer->seek((int)(startTime.frames(m_fps))); m_paused = false; @@ -1626,7 +1625,7 @@ void Render::playZone(const GenTime & startTime, const GenTime & stopTime) void Render::resetZoneMode() { if (!m_isZoneMode && !m_isLoopMode) return; - m_mltProducer->set("out", m_originalOut); + m_mltProducer->set("out", m_mltProducer->get_length()); //m_mltProducer->set("eof", "pause"); m_isZoneMode = false; m_isLoopMode = false; @@ -1865,6 +1864,7 @@ void Render::mltCheckLength(Mlt::Tractor *tractor) int trackNb = tractor->count(); int duration = 0; int trackDuration; + if (m_isZoneMode) resetZoneMode(); if (trackNb == 1) { Mlt::Producer trackProducer(tractor->track(0)); duration = trackProducer.get_playtime() - 1; diff --git a/src/renderer.h b/src/renderer.h index 9c92f9d6..1534a4c5 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -351,7 +351,6 @@ private: bool m_isZoneMode; bool m_isLoopMode; GenTime m_loopStart; - int m_originalOut; /** @brief True when the monitor is in split view. */ bool m_isSplitView; -- 2.39.2