]> git.sesse.net Git - kdenlive/blobdiff - src/renderer.cpp
Optimize seek requests
[kdenlive] / src / renderer.cpp
index 6fbc63d76881de4745f5179e2ab6d5667483e610..6ba456ff1c4daa3048e00fa812cb384db3dbce4b 100644 (file)
@@ -53,8 +53,8 @@
 
 static void kdenlive_callback(void* /*ptr*/, int level, const char* fmt, va_list vl)
 {
-//     kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified();
     if (level > MLT_LOG_ERROR) return;
+    //kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified();
     QString error;
     QApplication::postEvent(qApp->activeWindow(), new MltErrorEvent(error.vsprintf(fmt, vl).simplified()));
     va_end(vl);
@@ -429,6 +429,7 @@ void Render::seek(int time)
        m_mltProducer->seek(time);
        if (m_paused && !externalConsumer) {
            m_mltConsumer->set("refresh", 1);
+           m_paused = false;
        }
        else if (m_mltProducer->get_speed() == 0) {
            // workaround specific bug in MLT's SDL consumer
@@ -1775,6 +1776,12 @@ void Render::emitFrameUpdated(Mlt::Frame& frame)
     emit frameUpdated(qimage.rgbSwapped());
 }
 
+int Render::getCurrentSeekPosition() const
+{
+    if (requestedSeekPosition != SEEK_INACTIVE) return requestedSeekPosition;
+    return (int) m_mltProducer->position();
+}
+
 void Render::emitFrameNumber()
 {
     int currentPos = m_mltConsumer->position();
@@ -1783,7 +1790,10 @@ void Render::emitFrameNumber()
     if (requestedSeekPosition != SEEK_INACTIVE) {
        m_mltConsumer->purge();
        m_mltProducer->seek(requestedSeekPosition);
-       if (m_mltProducer->get_speed() == 0) m_mltConsumer->set("refresh", 1);
+       if (m_mltProducer->get_speed() == 0 && m_paused) {
+           m_paused = false;
+           m_mltConsumer->set("refresh", 1);
+       }
        requestedSeekPosition = SEEK_INACTIVE;
     }
 }