]> git.sesse.net Git - kdenlive/commitdiff
Optimize seek requests
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 28 Dec 2012 14:01:52 +0000 (15:01 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 28 Dec 2012 14:01:52 +0000 (15:01 +0100)
src/customruler.cpp
src/customtrackview.cpp
src/renderer.cpp
src/renderer.h

index 824856653f1cca9e1a66c9e3e9f42840e67a41fd..0e5fb1048c9d306c53325f2adfbc1c4f834dfc39 100644 (file)
@@ -190,15 +190,17 @@ void CustomRuler::mouseMoveEvent(QMouseEvent * event)
         if (m_moveCursor == RULER_CURSOR) {
             QPoint diff = event->pos() - m_clickPoint;
             if (m_mouseMove == NO_MOVE) {
-                if (!KdenliveSettings::verticalzoom() || qAbs(diff.x()) >= QApplication::startDragDistance()) {
+                if (qAbs(diff.x()) >= QApplication::startDragDistance()) {
                     m_mouseMove = HORIZONTAL_MOVE;
-                } else if (qAbs(diff.y()) >= QApplication::startDragDistance()) {
+                } else if (KdenliveSettings::verticalzoom() && qAbs(diff.y()) >= QApplication::startDragDistance()) {
                     m_mouseMove = VERTICAL_MOVE;
                 } else return;
             }
             if (m_mouseMove == HORIZONTAL_MOVE) {
-                m_view->seekCursorPos(pos);
-                m_view->slotCheckPositionScrolling();
+               if (pos != m_lastSeekPosition && pos != m_view->cursorPos()) {
+                   m_view->seekCursorPos(pos);
+                   m_view->slotCheckPositionScrolling();
+               }
             } else {
                 int verticalDiff = m_startRate - (diff.y()) / 7;
                 if (verticalDiff != m_rate) emit adjustZoom(verticalDiff);
index 21488660b87c8ba4567638631781e1a1c9d191ac..84513036bad2dd0542abc085c0bd46a3147122e2 100644 (file)
@@ -731,8 +731,10 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event)
         if (event->buttons() != Qt::NoButton && event->modifiers() == Qt::NoModifier) {
             QGraphicsView::mouseMoveEvent(event);
             m_moveOpMode = SEEK;
-            seekCursorPos(mappedXPos);
-            slotCheckPositionScrolling();
+           if (mappedXPos != m_document->renderer()->getCurrentSeekPosition() && mappedXPos != cursorPos()) {
+               seekCursorPos(mappedXPos);
+               slotCheckPositionScrolling();
+           }
             return;
         } else m_moveOpMode = NONE;
     }
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;
     }
 }
index 0955b243d9deb1d2abc6b1f2d8b1727c977f6cf8..3d05de8e24eaa1b3627dea7a1090c7b852768606 100644 (file)
@@ -329,7 +329,10 @@ Q_OBJECT public:
     static bool getBlackMagicOutputDeviceList(KComboBox *devicelist, bool force = false);
     /** @brief Frame rendering is handeled by Kdenlive, don't show video through SDL display */
     void disablePreview(bool disable);
+    /** @brief Get current seek pos requested of SEEK_INACTIVE if we are not currently seeking */
     int requestedSeekPosition;
+    /** @brief Get current seek pos requested of current producer pos if not seeking */
+    int getCurrentSeekPosition() const;
     QSemaphore showFrameSemaphore;
     bool externalConsumer;