]> git.sesse.net Git - kdenlive/commitdiff
Prevent crash when deleting a clip while playing:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 6 Jul 2011 20:19:34 +0000 (20:19 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 6 Jul 2011 20:19:34 +0000 (20:19 +0000)
http://kdenlive.org/mantis/view.php?id=2200

svn path=/trunk/kdenlive/; revision=5770

src/clipitem.cpp
src/kthumb.cpp
src/projectlist.cpp

index 08c0371993fd572c9aacc4f3c47aa49f1ad6e7e8..2af20baf0aed36c8d4a0502b2549988a27826b35 100644 (file)
@@ -773,11 +773,13 @@ void ClipItem::paint(QPainter *painter,
             }
             else {
 #if KDE_IS_VERSION(4,5,0)
-                m_clip->thumbProducer()->queryIntraThumbs(left, right);
-                connect(m_clip->thumbProducer(), SIGNAL(thumbsCached()), this, SLOT(slotGotThumbsCache()));
-                QString path = m_clip->fileURL().path() + "%";
-                for (int i = left; i <= right; i++) {
-                    painter->drawImage(startPos + QPointF(twidth *(i - startOffset), 0), m_clip->thumbProducer()->findCachedThumb(path + QString::number(i)));
+                if (m_clip && m_clip->thumbProducer()) {
+                    m_clip->thumbProducer()->queryIntraThumbs(left, right);
+                    connect(m_clip->thumbProducer(), SIGNAL(thumbsCached()), this, SLOT(slotGotThumbsCache()));
+                    QString path = m_clip->fileURL().path() + "_";
+                    for (int i = left; i <= right; i++) {
+                        painter->drawImage(startPos + QPointF(twidth *(i - startOffset), 0), m_clip->thumbProducer()->findCachedThumb(path + QString::number(i)));
+                    }
                 }
 #endif
             }
@@ -1734,28 +1736,6 @@ void ClipItem::updateKeyframes(QDomElement effect)
     if (!m_keyframes.contains(m_selectedKeyframe)) m_selectedKeyframe = -1;
 }
 
-/*void ClipItem::slotGetIntraThumbs(CustomTrackView *view, int start, int end)
-{
-    const int theight = KdenliveSettings::trackheight();
-    const int twidth = FRAME_SIZE;
-    QString path = m_clip->fileURL().path() + "%";
-    QPixmap p;
-    for (int i = start; i <= end; i++) {
-#if KDE_IS_VERSION(4,5,0)
-        if (!view->m_pixmapCache->contains(path + QString::number(i))) {
-            p = m_clip->extractImage(i, twidth, theight);
-            view->m_pixmapCache->insertPixmap(path + QString::number(i), p);
-        }
-#else
-        if (!view->m_pixmapCache->find(path + QString::number(i), p)) {
-            p = m_clip->extractImage(i, twidth, theight);
-            view->m_pixmapCache->insert(path + QString::number(i), p);
-        }
-#endif
-    }
-    update();
-}*/
-
 Mlt::Producer *ClipItem::getProducer(int track, bool trackSpecific)
 {
     if (isAudioOnly())
index 09f8802a6ff0f0a07911b14957ca11b52fe89eee..6392f2b0d1045f0eea431ac873d48468086162aa 100644 (file)
@@ -462,7 +462,7 @@ void KThumb::slotGetIntraThumbs()
 {
     int theight = KdenliveSettings::trackheight();
     int twidth = FRAME_SIZE;
-    QString path = m_url.path() + "%";
+    QString path = m_url.path() + "_";
     QImage img;
 
     while (!m_intraFramesQueue.isEmpty()) {
index 03f05f84d7726282c07afe5787b428d950862ab5..31c7b1a36f353766508c15365daacdb4a7475013 100644 (file)
@@ -911,6 +911,8 @@ void ProjectList::slotDeleteClip(const QString &clipId)
     if (!newSelectedItem)
         newSelectedItem = m_listView->itemBelow(item);
     delete item;
+    // Pause playing to prevent crash while deleting clip
+    slotPauseMonitor();
     m_doc->clipManager()->deleteClip(clipId);
     m_listView->blockSignals(false);
     if (newSelectedItem) {