]> git.sesse.net Git - kdenlive/commitdiff
Fix regression introduced in previous commit (broken color clips)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 22 Oct 2011 17:39:33 +0000 (17:39 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 22 Oct 2011 17:39:33 +0000 (17:39 +0000)
svn path=/trunk/kdenlive/; revision=5978

src/docclipbase.cpp
src/docclipbase.h
src/renderer.cpp

index 68ab905615a158ca3161aaaab618ad7166913b8e..b7fa0d20860e15dd894591d295d87bb91ee9d72b 100644 (file)
@@ -624,23 +624,38 @@ Mlt::Producer *DocClipBase::videoProducer()
     return m_videoOnlyProducer;
 }
 
-Mlt::Producer *DocClipBase::getCloneProducer(Mlt::Producer *source)
+Mlt::Producer *DocClipBase::getCloneProducer()
 {
-    QMutexLocker locker(&m_producerMutex);
-    if (source == NULL) {
-        for (int i = 0; i < m_baseTrackProducers.count(); i++) {
-            if (m_baseTrackProducers.at(i) != NULL) {
-                source = m_baseTrackProducers.at(i);
-                break;
+    Mlt::Producer *source = NULL;
+    Mlt::Producer *prod = NULL;
+    if (m_clipType != AUDIO && m_clipType != AV && m_clipType != PLAYLIST) {
+        source = getProducer();
+        if (!source) return NULL;
+    }
+    if (m_clipType == COLOR) {
+        prod = new Mlt::Producer(*(source->profile()), 0, QString("colour:" + QString(source->get("resource"))).toUtf8().constData());
+    } else if (m_clipType == TEXT) {
+        prod = new Mlt::Producer(*(source->profile()), 0, QString("kdenlivetitle:" + QString(source->get("resource"))).toUtf8().constData());
+        if (prod && prod->is_valid() && m_properties.contains("xmldata"))
+            prod->set("xmldata", m_properties.value("xmldata").toUtf8().constData());
+    }
+    if (!prod) {
+        if (!source) {
+            QMutexLocker locker(&m_producerMutex);
+            for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+                if (m_baseTrackProducers.at(i) != NULL) {
+                    source = m_baseTrackProducers.at(i);
+                    break;
+                }
             }
+            if (!source) return NULL;
         }
+        prod = cloneProducer(source);
     }
-    if (source) {
-        Mlt::Producer *prod = cloneProducer(source);
+    if (prod) {
         adjustProducerProperties(prod, getId() + "_monitor", false, false);
-        return prod;
     }
-    return NULL;
+    return prod;
 }
 
 Mlt::Producer *DocClipBase::getProducer(int track)
index 9d8a59b4e0e55a14b4b4e6a309ea8956ffe9a58a..97a68693bdaf078f659ee2a0d0cabb4dd575bc29 100644 (file)
@@ -121,7 +121,7 @@ Q_OBJECT public:
     /** Retrieve a producer for a track */
     Mlt::Producer *getProducer(int track = -1);
     /** Get a copy of the producer, for use in the clip monitor */
-    Mlt::Producer *getCloneProducer(Mlt::Producer *source = NULL);
+    Mlt::Producer *getCloneProducer();
     /** Retrieve the producer that shows only video */
     Mlt::Producer *videoProducer();
     /** Retrieve the producer that shows only audio */
index 183fa2f180080b857d62912208ee419aede252fa..c9c23e29c8688d7bd8a3fd76050bd82d7431f1bb 100644 (file)
@@ -1839,7 +1839,12 @@ void Render::mltCutClip(int track, GenTime position)
 
 Mlt::Tractor *Render::lockService()
 {
+    // we are going to replace some clips, purge consumer
     if (!m_mltProducer) return NULL;
+    if (m_mltConsumer) {
+        if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
+        m_mltConsumer->purge();
+    }
     Mlt::Service service(m_mltProducer->parent().get_service());
     if (service.type() != tractor_type) {
         kWarning() << "// TRACTOR PROBLEM";