]> git.sesse.net Git - kdenlive/commitdiff
Hide the "avformat-novalidate" trick for faster loading, caused crash:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 4 Jul 2011 21:06:32 +0000 (21:06 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 4 Jul 2011 21:06:32 +0000 (21:06 +0000)
http://kdenlive.org/mantis/view.php?id=2205

svn path=/trunk/kdenlive/; revision=5763

src/docclipbase.cpp
src/documentvalidator.cpp
src/kdenlivedoc.cpp
src/kdenlivesettingsdialog.cpp
src/renderer.cpp

index 609f717485d78258bf1a0406662c2fc57fb70994..6004a1300d25e9d810501aeb785aac3c7880f473 100644 (file)
@@ -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");
index f7cbd056c1ec1817e88519599c7a168e08207f35..e34b0d0dfb6834702f38823899914506803232cd 100644 (file)
@@ -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);
index c4ca548dba24db61b5cc4ea1372e9c0296a7d2f7..db62a28bac1466d48c06466ba34100643402f2c1 100644 (file)
@@ -52,7 +52,7 @@
 
 #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),
index 35a00e9508d89832122b24ffa5dc858afeeed83c..3e8ee9bcf977bd77339a4267c244074b675101e0 100644 (file)
@@ -63,6 +63,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap<QString, QString>& 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);
index 77ce5be3b1fc54508c3477fdd4cab33d2afc3d0e..bc8e14c89ba0c6d494b0fccdc0b233c8dc9f541d 100644 (file)
@@ -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</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();
@@ -3859,7 +3854,7 @@ const QList <Mlt::Producer *> 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;
             }