From: Jean-Baptiste Mardelle Date: Mon, 4 Jul 2011 21:06:32 +0000 (+0000) Subject: Hide the "avformat-novalidate" trick for faster loading, caused crash: X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=a5e5f318042f320df07c8a0001b769ae1ae79fa1;p=kdenlive Hide the "avformat-novalidate" trick for faster loading, caused crash: http://kdenlive.org/mantis/view.php?id=2205 svn path=/trunk/kdenlive/; revision=5763 --- diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index 609f7174..6004a130 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -431,9 +431,9 @@ void DocClipBase::setValid() 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"); diff --git a/src/documentvalidator.cpp b/src/documentvalidator.cpp index f7cbd056..e34b0d0d 100644 --- a/src/documentvalidator.cpp +++ b/src/documentvalidator.cpp @@ -838,6 +838,16 @@ bool DocumentValidator::upgrade(double version, const double currentVersion) } } + 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); diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index c4ca548d..db62a28b 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -52,7 +52,7 @@ #include -const double DOCUMENTVERSION = 0.86; +const double DOCUMENTVERSION = 0.87; KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap properties, const QPoint tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) : QObject(parent), diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 35a00e95..3e8ee9bc 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -63,6 +63,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map // Hide multi tab option until Kdenlive really supports it m_configMisc.kcfg_activatetabs->setVisible(false); + // Hide avformat-novalidate trick, causes crash (bug #2205 and #2206) + m_configMisc.kcfg_projectloading_avformatnovalidate->setVisible(false); QWidget *p8 = new QWidget; m_configProject.setupUi(p8); diff --git a/src/renderer.cpp b/src/renderer.cpp index 77ce5be3..bc8e14c8 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -133,9 +133,11 @@ Render::~Render() 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()); @@ -158,21 +160,14 @@ void Render::closeMlt() 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; } @@ -989,7 +984,7 @@ int Render::setSceneList(QString playlist, int position) 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; @@ -1012,7 +1007,7 @@ int Render::setSceneList(QString playlist, int position) 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) { @@ -1042,7 +1037,7 @@ int Render::setSceneList(QString playlist, int position) } delete field; } - mlt_service_unlock(service.get_service()); + mlt_service_unlock(service.get_service());*/ qDeleteAll(m_slowmotionProducers.values()); m_slowmotionProducers.clear(); @@ -1053,11 +1048,11 @@ int Render::setSceneList(QString playlist, int position) } 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", ">avformat-novalidate"); else - playlist.replace(">avformat-novalidate", ">avformat"); + playlist.replace(">avformat-novalidate", ">avformat");*/ 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(); @@ -3859,7 +3854,7 @@ const QList Render::producersList() 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; }