]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
* Fix crash when deleting clip and audio thumb was being created
[kdenlive] / src / docclipbase.cpp
index 2b36b8bbc861071919bbd11a59646f4b02d28143..d5fc2db969d1c1b53f61f53bbc286c5f1470ad6b 100644 (file)
@@ -87,11 +87,17 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QStrin
     if (!m_properties.contains("name")) m_properties.insert("name", url.fileName());
 
     m_thumbProd = new KThumb(clipManager, url, m_id, m_properties.value("file_hash"));
-    if (m_clipType & (AV | AUDIO | PLAYLIST)) getAudioThumbs();
+    
+    // Setup timer to trigger audio thumbs creation
+    m_audioTimer.setSingleShot(true);
+    m_audioTimer.setInterval(800);
+    connect(&m_audioTimer, SIGNAL(timeout()), m_thumbProd, SLOT(slotCreateAudioThumbs()));
+    
 }
 
 DocClipBase::~DocClipBase()
 {
+    m_audioTimer.stop();
     delete m_thumbProd;
     qDeleteAll(m_toDeleteProducers);
     m_toDeleteProducers.clear();
@@ -116,6 +122,12 @@ QPoint DocClipBase::zone() const
 }
 
 
+bool DocClipBase::hasAudioThumb() const
+{
+    if (m_clipType == AUDIO || m_clipType == AV || m_clipType == PLAYLIST) return true;
+    return false;
+}
+
 void DocClipBase::slotClearAudioCache()
 {
     m_audioFrameCache.clear();
@@ -251,17 +263,6 @@ void DocClipBase::setAudioThumbCreated(bool isDone)
     m_audioThumbCreated = isDone;
 }
 
-
-void DocClipBase::setThumbnail(const QPixmap & pixmap)
-{
-    m_thumbnail = pixmap;
-}
-
-const QPixmap & DocClipBase::thumbnail() const
-{
-    return m_thumbnail;
-}
-
 void DocClipBase::updateAudioThumbnail(const audioByteArray& data)
 {
     //kDebug() << "CLIPBASE RECIEDVED AUDIO DATA*********************************************";
@@ -476,6 +477,7 @@ void DocClipBase::setProducer(Mlt::Producer *producer, bool reset, bool readProp
                 m_thumbProd->setProducer(producer);
         }
         else m_thumbProd->setProducer(producer);
+        getAudioThumbs();
     }
     bool updated = false;
     if (id.contains('_')) {
@@ -1086,13 +1088,24 @@ QMap <QString, QString> DocClipBase::properties() const
     return m_properties;
 }
 
+QMap <QString, QString> DocClipBase::currentProperties(QMap <QString, QString> props)
+{
+    QMap <QString, QString> currentProps;
+    QMap<QString, QString>::const_iterator i = props.constBegin();
+    while (i != props.constEnd()) {
+        currentProps.insert(i.key(), m_properties.value(i.key()));
+        ++i;
+    }
+    return currentProps;
+}
+
 bool DocClipBase::getAudioThumbs()
 {
     if (m_thumbProd == NULL || isPlaceHolder() || !KdenliveSettings::audiothumbnails()) return false;
     if (m_audioThumbCreated) {
         return false;
     }
-    QTimer::singleShot(800, m_thumbProd, SLOT(slotCreateAudioThumbs()));
+    m_audioTimer.start();
     return true;
 }
 
@@ -1193,12 +1206,11 @@ void DocClipBase::slotExtractImage(QList <int> frames)
     m_thumbProd->extractImage(frames);
 }
 
-QPixmap DocClipBase::extractImage(int frame, int width, int height)
+QImage DocClipBase::extractImage(int frame, int width, int height)
 {
-    if (m_thumbProd == NULL) return QPixmap(width, height);
+    if (m_thumbProd == NULL) return QImage();
     QMutexLocker locker(&m_producerMutex);
-    QPixmap p = m_thumbProd->extractImage(frame, width, height);
-    return p;
+    return m_thumbProd->extractImage(frame, width, height);
 }