#include "definitions.h"
#include "slideshowclip.h"
#include "profilesdialog.h"
+
+#ifdef USE_BLACKMAGIC
#include "blackmagic/devices.h"
+#endif
#include <mlt++/Mlt.h>
m_blackClip->set("mlt_type", "producer");
if (KdenliveSettings::external_display() && m_name != "clip") {
+#ifdef USE_BLACKMAGIC
// Use blackmagic card for video output
QMap< QString, QString > profileProperties = ProfilesDialog::getSettingsFromFile(profileName);
int device = KdenliveSettings::blackmagic_output_device();
if (m_mltConsumer && m_mltConsumer->is_valid()) return;
} else KMessageBox::informationList(qApp->activeWindow(), i18n("Your project's profile %1 is not compatible with the blackmagic output card. Please see supported profiles below. Switching to normal video display.", m_mltProfile->description()), BMInterface::supportedModes(KdenliveSettings::blackmagic_output_device()));
}
+#endif
}
m_externalConsumer = false;
QString videoDriver = KdenliveSettings::videodrivername();
bool proxyProducer;
if (info.xml.hasAttribute("proxy") && info.xml.attribute("proxy") != "-") {
path = info.xml.attribute("proxy");
- proxyProducer = true;
+ // 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");
QString playlist;
Mlt::Profile profile((mlt_profile) 0);
Mlt::Consumer xmlConsumer(profile, "xml:kdenlive_playlist");
+ if (!xmlConsumer.is_valid()) return QString();
m_mltProducer->optimise();
xmlConsumer.set("terminate_on_pause", 1);
Mlt::Producer prod(m_mltProducer->get_producer());
+ if (!prod.is_valid()) return QString();
bool split = m_isSplitView;
if (split) slotSplitView(false);
xmlConsumer.connect(prod);
- xmlConsumer.start();
- while (!xmlConsumer.is_stopped()) {}
+ xmlConsumer.run();
playlist = QString::fromUtf8(xmlConsumer.get("kdenlive_playlist"));
if (split) slotSplitView(true);
return playlist;
QFile file(path);
QDomDocument doc;
doc.setContent(sceneList(), false);
- if (!kdenliveData.isNull()) {
+ if (doc.isNull()) return false;
+ QDomElement root = doc.documentElement();
+ if (!kdenliveData.isNull() && !root.isNull()) {
// add Kdenlive specific tags
- QDomNode mlt = doc.elementsByTagName("mlt").at(0);
- mlt.appendChild(doc.importNode(kdenliveData, true));
+ root.appendChild(doc.importNode(kdenliveData, true));
}
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
kWarning() << "////// ERROR writing to file: " << path;
m_mltConsumer->start();
}
m_mltProducer->set_speed(1.0);
- m_mltConsumer->set("refresh", "1");
+ m_mltConsumer->set("refresh", 1);
} else if (!play) {
m_mltProducer->set_speed(0.0);
m_mltConsumer->set("refresh", 0);
}
}
}
- QDomElement tractor = doc.elementsByTagName("tractor").at(0).toElement();
- int out = tractor.attribute("out").toInt();
- out = factor * out + 0.5;
- tractor.setAttribute("out", out);
- emit durationChanged(out);
+ QDomElement root = doc.documentElement();
+ if (!root.isNull()) {
+ QDomElement tractor = root.firstChildElement("tractor");
+ int out = tractor.attribute("out").toInt();
+ out = factor * out + 0.5;
+ tractor.setAttribute("out", out);
+ emit durationChanged(out);
+ }
//kDebug() << "///////////////////////////// " << out << " \n" << doc.toString() << "\n-------------------------";
return doc.toString();