void DocClipBase::setProducer(Mlt::Producer *producer, bool reset, bool readPropertiesFromProducer)
{
- if (producer == NULL || !producer->is_valid()) return;
+ if (producer == NULL) return;
if (reset) QMutexLocker locker(&m_producerMutex);
- if (m_placeHolder) {
+ if (m_placeHolder || !producer->is_valid()) {
char *tmp = qstrdup(i18n("Missing clip").toUtf8().constData());
producer->set("markup", tmp);
producer->set("bgcolour", "0xff0000ff");
}
}
+ if (version <= 0.86) {
+ // Make sure we don't have avformat-novalidate producers, since it caused crashes
+ QDomNodeList producers = m_doc.elementsByTagName("producer");
+ int max = producers.count();
+ for (int i = 0; i < max; i++) {
+ QDomElement prod = producers.at(i).toElement();
+ if (EffectsList::property(prod, "mlt_service") == "avformat-novalidate")
+ EffectsList::setProperty(prod, "mlt_service", "avformat");
+ }
+ }
// The document has been converted: mark it as modified
infoXml.setAttribute("version", currentVersion);
#include <mlt++/Mlt.h>
-const double DOCUMENTVERSION = 0.86;
+const double DOCUMENTVERSION = 0.87;
KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap <QString, QString> properties, const QPoint tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) :
QObject(parent),
void Render::closeMlt()
-{
+{
//delete m_osdTimer;
- if (m_mltProducer) {
+ if (m_mltConsumer) delete m_mltConsumer;
+ if (m_mltProducer) delete m_mltProducer;
+ /*if (m_mltProducer) {
Mlt::Service service(m_mltProducer->parent().get_service());
mlt_service_lock(service.get_service());
resource = mlt_properties_get(properties, "mlt_service");
}
- for (int trackNb = tractor.count() - 1; trackNb >= 0; --trackNb) {
- Mlt::Producer trackProducer(tractor.track(trackNb));
- Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
- if (trackPlaylist.type() == playlist_type) trackPlaylist.clear();
- }
delete field;
field = NULL;
}
mlt_service_unlock(service.get_service());
- }
+ }*/
kDebug() << "// // // CLOSE RENDERER " << m_name;
- delete m_mltConsumer;
- delete m_mltProducer;
- delete m_blackClip;
+ if (m_blackClip) delete m_blackClip;
//delete m_osdInfo;
}
m_isBlocked = true;
int error = 0;
- //kDebug() << "////// RENDER, SET SCENE LIST: " << playlist;
+ //kDebug() << "////// RENDER, SET SCENE LIST:\n" << playlist <<"\n..........:::.";
// Remove previous profile info
QDomDocument doc;
m_mltProducer->set_speed(0);
//if (KdenliveSettings::osdtimecode() && m_osdInfo) m_mltProducer->detach(*m_osdInfo);
- Mlt::Service service(m_mltProducer->parent().get_service());
+ /*Mlt::Service service(m_mltProducer->parent().get_service());
mlt_service_lock(service.get_service());
if (service.type() == tractor_type) {
}
delete field;
}
- mlt_service_unlock(service.get_service());
+ mlt_service_unlock(service.get_service());*/
qDeleteAll(m_slowmotionProducers.values());
m_slowmotionProducers.clear();
}
blockSignals(true);
- // TODO: Better way to do this
- if (KdenliveSettings::projectloading_avformatnovalidate())
+ // WARNING: disabled because it caused crashes (see Kdenlive bug #2205 and #2206) - jbm
+ /*if (KdenliveSettings::projectloading_avformatnovalidate())
playlist.replace(">avformat</property>", ">avformat-novalidate</property>");
else
- playlist.replace(">avformat-novalidate</property>", ">avformat</property>");
+ playlist.replace(">avformat-novalidate</property>", ">avformat</property>");*/
m_mltProducer = new Mlt::Producer(*m_mltProfile, "xml-string", playlist.toUtf8().constData());
if (!m_mltProducer || !m_mltProducer->is_valid()) {
kDebug() << " WARNING - - - - -INVALID PLAYLIST: " << playlist.toUtf8().constData();
if (nprod) {
QString prodId = nprod->get("id");
if (!prodId.startsWith("slowmotion") && !prodId.isEmpty() && !nprod->is_blank() && !ids.contains(prodId)) {
- ids.append(nprod->get("id"));
+ ids.append(prodId);
prods.append(nprod);
} else delete nprod;
}