- if (proxyProducer && xml.hasAttribute("proxy_out")) {
- producer->set("out", xml.attribute("proxy_out").toInt());
- if (producer->get_out() != xml.attribute("proxy_out").toInt()) {
- // Proxy file length is different than original clip length, this will corrupt project so disable this proxy clip
- emit removeInvalidProxy(clipId, true);
+void Render::processFileProperties()
+{
+ requestClipInfo info;
+ QLocale locale;
+ while (!m_requestList.isEmpty()) {
+ m_infoMutex.lock();
+ info = m_requestList.takeFirst();
+ m_processingClipId = info.clipId;
+ m_infoMutex.unlock();
+
+ QString path;
+ bool proxyProducer;
+ if (info.xml.hasAttribute("proxy") && info.xml.attribute("proxy") != "-") {
+ path = info.xml.attribute("proxy");
+ // Check for missing proxies
+ if (QFileInfo(path).size() <= 0) {
+ // proxy is missing, re-create it
+ emit requestProxy(info.clipId);
+ proxyProducer = false;
+ path = info.xml.attribute("resource");
+ }
+ else proxyProducer = true;
+ }
+ else {
+ path = info.xml.attribute("resource");
+ proxyProducer = false;
+ }
+ KUrl url(path);
+ Mlt::Producer *producer = NULL;
+ CLIPTYPE type = (CLIPTYPE)info.xml.attribute("type").toInt();
+
+ if (type == COLOR) {
+ producer = new Mlt::Producer(*m_mltProfile, 0, ("colour:" + info.xml.attribute("colour")).toUtf8().constData());
+ } else if (type == TEXT) {
+ producer = new Mlt::Producer(*m_mltProfile, 0, ("kdenlivetitle:" + info.xml.attribute("resource")).toUtf8().constData());
+ if (producer && producer->is_valid() && info.xml.hasAttribute("xmldata"))
+ producer->set("xmldata", info.xml.attribute("xmldata").toUtf8().constData());
+ } else if (url.isEmpty()) {
+ QDomDocument doc;
+ QDomElement mlt = doc.createElement("mlt");
+ QDomElement play = doc.createElement("playlist");
+ doc.appendChild(mlt);
+ mlt.appendChild(play);
+ play.appendChild(doc.importNode(info.xml, true));
+ producer = new Mlt::Producer(*m_mltProfile, "xml-string", doc.toString().toUtf8().constData());
+ } else {
+ producer = new Mlt::Producer(*m_mltProfile, path.toUtf8().constData());
+ }
+
+ if (producer == NULL || producer->is_blank() || !producer->is_valid()) {
+ kDebug() << " / / / / / / / / ERROR / / / / // CANNOT LOAD PRODUCER: "<<path;
+ m_processingClipId.clear();
+ if (proxyProducer) {
+ // Proxy file is corrupted
+ emit removeInvalidProxy(info.clipId, false);
+ }
+ else emit removeInvalidClip(info.clipId, info.replaceProducer);