From: <j-...@us...> - 2009-06-14 10:51:31
|
Revision: 3534 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3534&view=rev Author: j-b-m Date: 2009-06-14 10:51:30 +0000 (Sun, 14 Jun 2009) Log Message: ----------- Correctly replace a the producer when user does a "reload clip" action Modified Paths: -------------- trunk/kdenlive/src/docclipbase.cpp trunk/kdenlive/src/docclipbase.h trunk/kdenlive/src/projectlist.cpp Modified: trunk/kdenlive/src/docclipbase.cpp =================================================================== --- trunk/kdenlive/src/docclipbase.cpp 2009-06-14 10:15:29 UTC (rev 3533) +++ trunk/kdenlive/src/docclipbase.cpp 2009-06-14 10:51:30 UTC (rev 3534) @@ -416,9 +416,13 @@ m_videoOnlyProducer = NULL; } -void DocClipBase::setProducer(Mlt::Producer *producer) +void DocClipBase::setProducer(Mlt::Producer *producer, bool reset) { if (producer == NULL) return; + if (reset) { + // Clear all previous producers + deleteProducers(); + } QString id = producer->get("id"); if (id.contains('_')) { // this is a subtrack producer, insert it at correct place @@ -450,7 +454,7 @@ } //m_clipProducer = producer; //m_clipProducer->set("transparency", m_properties.value("transparency").toInt()); - if (m_thumbProd && !m_thumbProd->hasProducer()) m_thumbProd->setProducer(producer); + if (m_thumbProd && (reset || !m_thumbProd->hasProducer())) m_thumbProd->setProducer(producer); } Mlt::Producer *DocClipBase::audioProducer(int track) Modified: trunk/kdenlive/src/docclipbase.h =================================================================== --- trunk/kdenlive/src/docclipbase.h 2009-06-14 10:15:29 UTC (rev 3533) +++ trunk/kdenlive/src/docclipbase.h 2009-06-14 10:51:30 UTC (rev 3534) @@ -110,7 +110,7 @@ } /** Sets producers for the current clip (one for each track due to a limitation in MLT's track mixing */ - void setProducer(Mlt::Producer *producer); + void setProducer(Mlt::Producer *producer, bool reset = false); /** Retrieve a producer for a track */ Mlt::Producer *producer(int track = -1); /** Retrieve the producer that shows only video */ Modified: trunk/kdenlive/src/projectlist.cpp =================================================================== --- trunk/kdenlive/src/projectlist.cpp 2009-06-14 10:15:29 UTC (rev 3533) +++ trunk/kdenlive/src/projectlist.cpp 2009-06-14 10:51:30 UTC (rev 3534) @@ -210,7 +210,7 @@ if (item->clipType() == IMAGE) { item->referencedClip()->producer()->set("force_reload", 1); } - emit getFileProperties(item->toXml(), item->clipId(), false); + emit getFileProperties(item->toXml(), item->clipId(), true); } } @@ -520,7 +520,7 @@ const QDomElement dom = i.value(); const QString id = i.key(); m_infoQueue.remove(i.key()); - emit getFileProperties(dom, id, true); + emit getFileProperties(dom, id, false); } if (m_infoQueue.isEmpty()) m_listView->setEnabled(true); } @@ -833,12 +833,18 @@ m_listView->blockSignals(true); item->setProperties(properties, metadata); Q_ASSERT_X(item->referencedClip(), "void ProjectList::slotReplyGetFileProperties", QString("Item with groupName %1 does not have a clip associated").arg(item->groupName()).toLatin1()); - if (replace) item->referencedClip()->setProducer(producer); - else { + item->referencedClip()->setProducer(producer, replace); + emit receivedClipDuration(clipId); + if (replace) { + // update clip in clip monitor + emit clipSelected(NULL); + emit clipSelected(item->referencedClip()); + } + /*else { // Check if duration changed. emit receivedClipDuration(clipId); delete producer; - } + }*/ m_listView->blockSignals(false); } else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS..."; if (!m_infoQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue())); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |