From: Jean-Baptiste Mardelle Date: Sat, 22 Oct 2011 17:39:33 +0000 (+0000) Subject: Fix regression introduced in previous commit (broken color clips) X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=d0835d9b0cb148d5d87c1e9037ecb8ae15c93f6f;p=kdenlive Fix regression introduced in previous commit (broken color clips) svn path=/trunk/kdenlive/; revision=5978 --- diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index 68ab9056..b7fa0d20 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -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) diff --git a/src/docclipbase.h b/src/docclipbase.h index 9d8a59b4..97a68693 100644 --- a/src/docclipbase.h +++ b/src/docclipbase.h @@ -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 */ diff --git a/src/renderer.cpp b/src/renderer.cpp index 183fa2f1..c9c23e29 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -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";