]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
Fix freeze on reloading a missing clip, don't reload twice missing clips that were...
[kdenlive] / src / docclipbase.cpp
index d5fc2db969d1c1b53f61f53bbc286c5f1470ad6b..be5a321f3de53e93a981407e500068b3cd0a99d9 100644 (file)
@@ -99,6 +99,7 @@ DocClipBase::~DocClipBase()
 {
     m_audioTimer.stop();
     delete m_thumbProd;
+    m_thumbProd = NULL;
     qDeleteAll(m_toDeleteProducers);
     m_toDeleteProducers.clear();
     qDeleteAll(m_baseTrackProducers);
@@ -234,7 +235,7 @@ qulonglong DocClipBase::fileSize() const
 }
 
 // virtual
-QDomElement DocClipBase::toXML() const
+QDomElement DocClipBase::toXML(bool hideTemporaryProperties) const
 {
     QDomDocument doc;
     QDomElement clip = doc.createElement("producer");
@@ -242,6 +243,7 @@ QDomElement DocClipBase::toXML() const
     QMapIterator<QString, QString> i(m_properties);
     while (i.hasNext()) {
         i.next();
+        if (hideTemporaryProperties && i.key().startsWith("_")) continue;
         if (!i.value().isEmpty()) clip.setAttribute(i.key(), i.value());
     }
     doc.appendChild(clip);
@@ -403,7 +405,7 @@ void DocClipBase::deleteProducers()
 {
     if (m_thumbProd) m_thumbProd->clearProducer();
     
-    if (numReferences() > 0) {
+    if (numReferences() > 0 && (!m_baseTrackProducers.isEmpty() || m_videoOnlyProducer || !m_audioTrackProducers.isEmpty())) {
         // Clip is used in timeline, delay producers deletion
         if (m_videoOnlyProducer) m_toDeleteProducers.append(m_videoOnlyProducer);
         for (int i = 0; i < m_baseTrackProducers.count(); i++) {
@@ -440,9 +442,11 @@ void DocClipBase::cleanupProducers()
         }
     }*/
 
-    qDeleteAll(m_toDeleteProducers);
-    m_toDeleteProducers.clear();
-    m_replaceMutex.unlock();
+    if (!isClean()) {
+      qDeleteAll(m_toDeleteProducers);
+      m_toDeleteProducers.clear();
+      m_replaceMutex.unlock();
+    }
 }
 
 bool DocClipBase::isClean() const
@@ -647,6 +651,7 @@ Mlt::Producer *DocClipBase::getCloneProducer()
     return prod;
 }
 
+
 Mlt::Producer *DocClipBase::getProducer(int track)
 {
     QMutexLocker locker(&m_producerMutex);