From: <j-...@us...> - 2011-07-05 14:55:33
|
Revision: 5764 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5764&view=rev Author: j-b-m Date: 2011-07-05 14:55:27 +0000 (Tue, 05 Jul 2011) Log Message: ----------- Fix broken producer incorrectly handled when using proxy, corrupting project: http://kdenlive.org/mantis/view.php?id=2214 Modified Paths: -------------- trunk/kdenlive/src/clipmanager.cpp trunk/kdenlive/src/trackview.cpp trunk/kdenlive/src/trackview.h Modified: trunk/kdenlive/src/clipmanager.cpp =================================================================== --- trunk/kdenlive/src/clipmanager.cpp 2011-07-04 21:06:32 UTC (rev 5763) +++ trunk/kdenlive/src/clipmanager.cpp 2011-07-05 14:55:27 UTC (rev 5764) @@ -225,10 +225,12 @@ { QList <DocClipBase *> list; QString clipResource; + QString proxyResource; for (int i = 0; i < m_clipList.count(); i++) { clipResource = m_clipList.at(i)->getProperty("resource"); + proxyResource = m_clipList.at(i)->getProperty("proxy"); if (clipResource.isEmpty()) clipResource = m_clipList.at(i)->getProperty("colour"); - if (clipResource == resource) { + if (clipResource == resource || proxyResource == resource) { list.append(m_clipList.at(i)); } } Modified: trunk/kdenlive/src/trackview.cpp =================================================================== --- trunk/kdenlive/src/trackview.cpp 2011-07-04 21:06:32 UTC (rev 5763) +++ trunk/kdenlive/src/trackview.cpp 2011-07-05 14:55:27 UTC (rev 5764) @@ -271,7 +271,7 @@ m_doc->switchTrackAudio(i - 1, true); } - trackduration = slotAddProjectTrack(pos, p, m_doc->isTrackLocked(i - 1)); + trackduration = slotAddProjectTrack(pos, p, m_doc->isTrackLocked(i - 1), producers); pos--; //kDebug() << " PRO DUR: " << trackduration << ", TRACK DUR: " << duration; if (trackduration > duration) duration = trackduration; @@ -591,7 +591,7 @@ } } -int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked) +int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked, QDomNodeList producers) { // parse track int position = 0; @@ -635,18 +635,37 @@ QDomDocument doc; QDomElement producerXml = doc.createElement("producer"); doc.appendChild(producerXml); - producerXml.setAttribute("colour", "0xff0000ff"); - producerXml.setAttribute("mlt_service", "colour"); - producerXml.setAttribute("length", "15000"); - producerXml.setAttribute("name", "INVALID"); - producerXml.setAttribute("type", COLOR); - producerXml.setAttribute("id", id); - clip = new DocClipBase(m_doc->clipManager(), doc.documentElement(), id); - xml.insertBefore(producerXml, QDomNode()); - nodeindex++; - m_doc->clipManager()->addClip(clip); + bool foundMltProd = false; + for (int i = 0; i < producers.count(); i++) { + QDomElement prod = producers.at(i).toElement(); + if (prod.attribute("id") == id) { + QString service = EffectsList::property(prod, "mlt_service"); + QString type = EffectsList::property(prod, "mlt_type"); + QString resource = EffectsList::property(prod, "resource"); + QString length = EffectsList::property(prod, "length"); + producerXml.setAttribute("mlt_service", service); + producerXml.setAttribute("mlt_type", type); + producerXml.setAttribute("resource", resource); + producerXml.setAttribute("duration", length); + if (service == "colour") producerXml.setAttribute("type", COLOR); + else if (service == "qimage" || service == "pixbuf") producerXml.setAttribute("type", IMAGE); + else if (service == "kdenlivetitle") producerXml.setAttribute("type", TEXT); + else producerXml.setAttribute("type", AV); + clip = new DocClipBase(m_doc->clipManager(), doc.documentElement(), id); + m_doc->clipManager()->addClip(clip); + m_documentErrors.append(i18n("Broken clip producer %1, recreated base clip: %2", id, resource) + '\n'); + foundMltProd = true; + break; + } + } + if (!foundMltProd) { + // Cannot recover, replace with blank + int duration = elem.attribute("out").toInt() - elem.attribute("in").toInt(); + elem.setAttribute("length", duration); + elem.setTagName("blank"); + m_documentErrors.append(i18n("Broken clip producer %1, removed from project", id) + '\n'); + } - m_documentErrors.append(i18n("Broken clip producer %1", id) + '\n'); } else { // Found correct producer m_documentErrors.append(i18n("Replaced wrong clip producer %1 with %2", id, clip->getId()) + '\n'); Modified: trunk/kdenlive/src/trackview.h =================================================================== --- trunk/kdenlive/src/trackview.h 2011-07-04 21:06:32 UTC (rev 5763) +++ trunk/kdenlive/src/trackview.h 2011-07-05 14:55:27 UTC (rev 5764) @@ -99,7 +99,7 @@ int m_verticalZoom; QString m_documentErrors; void parseDocument(QDomDocument doc); - int slotAddProjectTrack(int ix, QDomElement xml, bool locked); + int slotAddProjectTrack(int ix, QDomElement xml, bool locked, QDomNodeList producers); DocClipBase *getMissingProducer(const QString id) const; void adjustTrackHeaders(); void slotAddProjectEffects(QDomNodeList effects, QDomElement parentNode, ClipItem *clip, int trackIndex); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |