]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
SVN_SILENT made messages (.desktop file)
[kdenlive] / src / docclipbase.cpp
index b7fa0d20860e15dd894591d295d87bb91ee9d72b..9e581942067f82e7311b64653ab5b4b0c5bda40e 100644 (file)
@@ -98,6 +98,8 @@ DocClipBase::~DocClipBase()
         m_audioTimer->stop();
         delete m_audioTimer;
     }
+    qDeleteAll(m_toDeleteProducers);
+    m_toDeleteProducers.clear();
     qDeleteAll(m_baseTrackProducers);
     m_baseTrackProducers.clear();
     qDeleteAll(m_audioTrackProducers);
@@ -163,11 +165,6 @@ const QString &DocClipBase::getId() const
     return m_id;
 }
 
-void DocClipBase::setId(const QString &newId)
-{
-    m_id = newId;
-}
-
 const CLIPTYPE & DocClipBase::clipType() const
 {
     return m_clipType;
@@ -416,9 +413,15 @@ void DocClipBase::clearThumbProducer()
     if (m_thumbProd) m_thumbProd->clearProducer();
 }
 
+void DocClipBase::reloadThumbProducer()
+{
+    if (m_thumbProd && !m_thumbProd->hasProducer())
+        m_thumbProd->setProducer(getProducer());
+}
+
 void DocClipBase::deleteProducers()
 {
-    m_thumbProd->clearProducer();
+    if (m_thumbProd) m_thumbProd->clearProducer();
     
     if (numReferences() > 0) {
         // Clip is used in timeline, delay producers deletion
@@ -653,7 +656,12 @@ Mlt::Producer *DocClipBase::getCloneProducer()
         prod = cloneProducer(source);
     }
     if (prod) {
-        adjustProducerProperties(prod, getId() + "_monitor", false, false);
+        adjustProducerProperties(prod, getId() + "_", false, false);
+        if (!m_properties.contains("proxy_out")) {
+            // Adjust length in case...
+            if (m_properties.contains("duration")) prod->set("length", m_properties.value("duration").toInt());
+            if (m_properties.contains("out"))prod->set("out", m_properties.value("out").toInt());
+        }
     }
     return prod;
 }
@@ -686,8 +694,9 @@ Mlt::Producer *DocClipBase::getProducer(int track)
             // Could not find a valid producer for that clip, check in 
             return NULL;
         }
-        m_baseTrackProducers[track] = cloneProducer(m_baseTrackProducers.at(i));
-        adjustProducerProperties(m_baseTrackProducers.at(track), QString(getId() + '_' + QString::number(track)), false, false);
+        Mlt::Producer *prod = cloneProducer(m_baseTrackProducers.at(i));
+        adjustProducerProperties(prod, QString(getId() + '_' + QString::number(track)), false, false);
+        m_baseTrackProducers[track] = prod;
     }
     return m_baseTrackProducers.at(track);
 }
@@ -696,6 +705,7 @@ Mlt::Producer *DocClipBase::getProducer(int track)
 Mlt::Producer *DocClipBase::cloneProducer(Mlt::Producer *source)
 {
     Mlt::Producer *result = NULL;
+    QString invalidClip = source->get("markup");
     QString url = QString::fromUtf8(source->get("resource"));
     if (KIO::NetAccess::exists(KUrl(url), KIO::NetAccess::SourceSide, 0)) {
         result = new Mlt::Producer(*(source->profile()), url.toUtf8().constData());
@@ -1206,10 +1216,10 @@ bool DocClipBase::hasAudioCodec(const QString &codec) const
 }
 
 
-void DocClipBase::slotExtractImage(int frame, int frame2)
+void DocClipBase::slotExtractImage(QList <int> frames)
 {
     if (m_thumbProd == NULL) return;
-    m_thumbProd->extractImage(frame, frame2);
+    m_thumbProd->extractImage(frames);
 }
 
 QPixmap DocClipBase::extractImage(int frame, int width, int height)