]> git.sesse.net Git - kdenlive/commitdiff
Update to the new MLT structure (based on patch by Dan Dennedy)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 18 May 2009 21:52:54 +0000 (21:52 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 18 May 2009 21:52:54 +0000 (21:52 +0000)
svn path=/trunk/kdenlive/; revision=3393

23 files changed:
CMakeLists.txt
cmake/modules/FindLIBMLT.cmake
plugins/sampleplugin/sampleplugin.cpp
renderer/kdenlive_render.cpp
renderer/renderjob.cpp
src/CMakeLists.txt
src/documentchecker.cpp
src/documentconvert.cpp [new file with mode: 0644]
src/documentconvert.h [new file with mode: 0644]
src/dvdwizard.cpp
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/kthumb.cpp
src/mainwindow.cpp
src/markerdialog.cpp
src/monitor.cpp
src/renderer.cpp
src/renderwidget.cpp
src/trackview.cpp
src/widgets/configenv_ui.ui
src/wizard.cpp
thumbnailer/westleypreview.cpp
thumbnailer/westleypreview.h

index be801de7fb3adfaecc7557569d141fd30c47c6bd..3e99981eded5943e33916febdc7a27ffbffbd927 100644 (file)
@@ -16,7 +16,6 @@ set(catalogname kdenlive)
 add_definitions (${QT_DEFINITIONS})
 
 FIND_PACKAGE(LIBMLT REQUIRED)
-FIND_PACKAGE(LIBMLTPLUS REQUIRED)
 find_package(MSGFMT REQUIRED)
 
 find_program(EXTRACTRC_EXECUTABLE extractrc)
index 1fec029ed8fb8ce3b8b4539a9c86c4dac46c096c..d6cf747bc7bc60a3dd52584673e3860c68fa8f81 100644 (file)
@@ -3,7 +3,7 @@
 #
 
 FIND_PROGRAM(MLT_CONFIG_EXECUTABLE pkg-config)
-EXEC_PROGRAM(${MLT_CONFIG_EXECUTABLE} ARGS --variable=prefix mlt-framework OUTPUT_VARIABLE MLT_PATH )
+EXEC_PROGRAM(${MLT_CONFIG_EXECUTABLE} ARGS --variable=prefix mlt++ OUTPUT_VARIABLE MLT_PATH )
 MESSAGE(STATUS "Found MLT INSTALL PATH: ${MLT_PATH}")
 SET(CMAKE_CXX_FLAGS -DMLT_PREFIX=\\\"\"${MLT_PATH}\"\\\")
 
@@ -23,6 +23,22 @@ FIND_LIBRARY(LIBMLT_LIBRARY
 
 MESSAGE(STATUS "Found MLT LIBR: ${LIBMLT_LIBRARY}")
 
+FIND_PATH(LIBMLTPLUS_INCLUDE_DIR 
+  NAMES mlt++/Mlt.h
+  PATHS ${MLT_PATH}/include /usr/local/include /usr/include
+  NO_DEFAULT_PATH
+)
+
+MESSAGE(STATUS "Found MLT++ INCLUDES: ${LIBMLTPLUS_INCLUDE_DIR}")
+
+FIND_LIBRARY(LIBMLTPLUS_LIBRARY
+  NAMES mlt++
+  PATHS ${MLT_PATH}/lib /usr/lib /usr/local/lib
+  NO_DEFAULT_PATH
+)
+
+MESSAGE(STATUS "Found MLT++ LIBR: ${LIBMLTPLUS_LIBRARY}")
+
 IF (LIBMLT_LIBRARY AND LIBMLT_INCLUDE_DIR)
   SET( LIBMLT_FOUND 1 )
   SET( LIBMLT_LIBRARIES ${LIBMLT_LIBRARY} )
@@ -30,6 +46,14 @@ ELSE (LIBMLT_LIBRARY AND LIBMLT_INCLUDE_DIR)
   SET( LIBMLT_FOUND 0 )
 ENDIF (LIBMLT_LIBRARY AND LIBMLT_INCLUDE_DIR)
 
+
+IF (LIBMLTPLUS_LIBRARY AND LIBMLTPLUS_INCLUDE_DIR)
+  SET( LIBMLT_FOUND 1 )
+  SET( LIBMLTPLUS_LIBRARIES ${LIBMLTPLUS_LIBRARY} )
+ELSE (LIBMLTPLUS_LIBRARY AND LIBMLTPLUS_INCLUDE_DIR)
+  SET( LIBMLT_FOUND 0 )
+ENDIF (LIBMLTPLUS_LIBRARY AND LIBMLTPLUS_INCLUDE_DIR)
+
 IF (LIBMLT_FOUND)
   IF (NOT LIBMLT_FIND_QUIETLY)
     MESSAGE(STATUS "Found MLT library: ${LIBMLT_LIBRARY}")
index 347658b657ad765bda29d044ee8a4d1a28e7d899..0c9ec033acaa0ed0049e8e60543ff0901cb9ca28 100644 (file)
@@ -47,7 +47,7 @@ KUrl SamplePlugin::generatedClip(const QString &generator, const KUrl &projectFo
     } else prePath = projectFolder.path() + "/counter";
     int ct = 0;
     QString counter = QString::number(ct).rightJustified(5, '0', false);
-    while (QFile::exists(prePath + counter + ".westley")) {
+    while (QFile::exists(prePath + counter + ".mlt")) {
         ct++;
         counter = QString::number(ct).rightJustified(5, '0', false);
     }
@@ -63,11 +63,11 @@ KUrl SamplePlugin::generatedClip(const QString &generator, const KUrl &projectFo
         view.font->setValue(height);
     }
 
-    QString clipFile = prePath + counter + ".westley";
+    QString clipFile = prePath + counter + ".mlt";
     view.path->setPath(clipFile);
     if (d.exec() == QDialog::Accepted) {
         QDomDocument doc;
-        QDomElement westley = doc.createElement("westley");
+        QDomElement mlt = doc.createElement("mlt");
         QDomElement playlist = doc.createElement("playlist");
         if (generator == i18n("Noise")) {
             QDomElement prod = doc.createElement("producer");
@@ -83,15 +83,15 @@ KUrl SamplePlugin::generatedClip(const QString &generator, const KUrl &projectFo
                 prod.setAttribute("in", "0");
                 prod.setAttribute("out", QString::number((int) fps));
                 prod.setAttribute("text", QString::number(view.duration->value() - i));
-                //FIXME: the font and pad values are approximate, the pango producer seems unable
+                //FIXME: the font and pad values are approximate, the pango producer seems unable
                 // to produce a predictable frame size.
                 prod.setAttribute("font", QString::number(view.font->value()) + "px");
                 //prod.setAttribute("pad", 50);
                 playlist.appendChild(prod);
             }
         }
-        westley.appendChild(playlist);
-        doc.appendChild(westley);
+        mlt.appendChild(playlist);
+        doc.appendChild(mlt);
         QFile file(view.path->url().path());
         if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
             kWarning() << "//////  ERROR writing to file: " << view.path->url().path();
index ca352bdbc35997e3919611eb156f0f1657f3424d..d84f11b3922dfabb6b05f165e5b3d5ddbabc0499 100644 (file)
@@ -90,16 +90,16 @@ int main(int argc, char **argv)
         fprintf(stderr, "Kdenlive video renderer for MLT.\nUsage: "
                 "kdenlive_render [-erase] [-kuiserver] [in=pos] [out=pos] [render] [profile] [rendermodule] [player] [src] [dest] [[arg1] [arg2] ...]\n"
                 "  -erase: if that parameter is present, src file will be erased at the end\n"
-                "  -kuiserver: if that parameter is present, use KDE job tracker\n"
+                "  -kuiserver: if that parameter is present, use KDE job tracker\n"
                 "  in=pos: start rendering at frame pos\n"
                 "  out=pos: end rendering at frame pos\n"
-                "  render: path to inigo render\n"
+                "  render: path to MLT melt renderer\n"
                 "  profile: the MLT video profile\n"
                 "  rendermodule: the MLT consumer used for rendering, usually it is avformat\n"
                 "  player: path to video player to play when rendering is over, use '-' to disable playing\n"
-                "  src: source file (usually westley playlist)\n"
-                "  dest: destination file\n"
-                "  args: space separated libavformat arguments\n");
+                "  src: source file (usually MLT XML)\n"
+                "  dest: destination file\n"
+                "  args: space separated libavformat arguments\n");
     }
 }
 
index 3f7da99d111bed6b89798603c256a0f9b1d04de8..9d832e41727a749d5e5da893b9a6e15ea5bdf5d6 100644 (file)
@@ -104,7 +104,7 @@ void RenderJob::slotAbort(const QString& url)
 
 void RenderJob::slotAbort()
 {
-    qDebug() << "Kdenlive-render: JOB ABORTED BY USER...";
+    qDebug() << "Kdenlive-render: JOB ABORTED BY USER...";
     m_renderProcess->kill();
 
     if (m_kdenliveinterface) {
@@ -132,7 +132,7 @@ void RenderJob::receivedStderr()
     QString result = QString(m_renderProcess->readAllStandardError()).simplified();
     if (!result.startsWith("Current Frame")) m_errorMessage.append(result + "<br>");
     else {
-        // m_logstream << "ReceivedStderr from inigo: " << result << endl;
+        // m_logstream << "ReceivedStderr from melt: " << result << endl;
         result = result.section(' ', -1);
         int pro = result.toInt();
         if (pro < 0 || pro > 100) return;
@@ -142,14 +142,14 @@ void RenderJob::receivedStderr()
                 if (!m_kdenliveinterface->isValid()) {
                     delete m_kdenliveinterface;
                     m_kdenliveinterface = NULL;
-                    // qDebug() << "BROKEN COMMUNICATION WITH KDENLIVE";
+                    // qDebug() << "BROKEN COMMUNICATION WITH KDENLIVE";
                 } else {
                     m_dbusargs[1] = pro;
                     m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
                 }
             } else if (pro % 5 == 0) {
                 // Try to restart communication with Kdenlive every 5 percents
-                // qDebug() << "TRYING TO RESTART COMMUNICATION WITH KDENLIVE";
+                // qDebug() << "TRYING TO RESTART COMMUNICATION WITH KDENLIVE";
                 initKdenliveDbusInterface();
             }
 
index a0a2690f7040a1d8e4bf3b8337b4334115483a92..34a4e1cd7a2ea43877bc97b1d03055fe0dee0ce8 100644 (file)
@@ -159,6 +159,7 @@ set(kdenlive_SRCS
   changecliptypecommand.cpp
   documentchecker.cpp
   dvdwizardchapters.cpp
+  documentconvert.cpp
 )
 
 add_definitions( ${KDE4_DEFINITIONS} )
index e4cb7059a46b170ff04d0764ec0b391b0cfd5d86..7abadea0f4da9888a6b2372489eb64c984435038 100644 (file)
@@ -278,8 +278,8 @@ void DocumentChecker::slotDeleteSelected()
         QDomNodeList producers = m_doc.elementsByTagName("producer");
         QDomNodeList infoproducers = m_doc.elementsByTagName("kdenlive_producer");
 
-        QDomElement westley = m_doc.firstChildElement("westley");
-        QDomElement kdenlivedoc = westley.firstChildElement("kdenlivedoc");
+        QDomElement mlt = m_doc.firstChildElement("mlt");
+        QDomElement kdenlivedoc = mlt.firstChildElement("kdenlivedoc");
 
         for (int i = 0; i < infoproducers.count(); i++) {
             e = infoproducers.item(i).toElement();
@@ -294,7 +294,7 @@ void DocumentChecker::slotDeleteSelected()
             e = producers.item(i).toElement();
             if (deletedIds.contains(e.attribute("id"))) {
                 // Remove clip
-                westley.removeChild(e);
+                mlt.removeChild(e);
                 break;
             }
         }
diff --git a/src/documentconvert.cpp b/src/documentconvert.cpp
new file mode 100644 (file)
index 0000000..67cca68
--- /dev/null
@@ -0,0 +1,645 @@
+/***************************************************************************
+ *   Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
+ ***************************************************************************/
+
+
+#include "documentconvert.h"
+#include "definitions.h"
+
+#include <KDebug>
+#include <KMessageBox>
+#include <KApplication>
+#include <KLocale>
+
+#include <QColor>
+
+DocumentConvert::DocumentConvert(QDomDocument doc):
+        m_doc(doc),
+        m_modified(false)
+{}
+
+
+bool DocumentConvert::doConvert(double version, const double current_version)
+{
+    kDebug() << "Opening a document with version " << version;
+
+    if (version == current_version) return true;
+
+    if (version > current_version) {
+        kDebug() << "Unable to open document with version " << version;
+        KMessageBox::sorry(kapp->activeWindow(), i18n("This project type is unsupported (version %1) and can't be loaded.\nPlease consider upgrading you Kdenlive version.", version), i18n("Unable to open project"));
+        return false;
+    }
+
+    // Opening a old Kdenlive document
+    if (version == 0.5 || version == 0.7) {
+        KMessageBox::sorry(kapp->activeWindow(), i18n("This project type is unsupported (version %1) and can't be loaded.", version), i18n("Unable to open project"));
+        kDebug() << "Unable to open document with version " << version;
+        // TODO: convert 0.7 (0.5?) files to the new document format.
+        return false;
+    }
+
+    m_modified = true;
+
+    if (version == 0.82) {
+        convertToMelt();
+        return true;
+    }
+
+    if (version == 0.81) {
+        // Add correct tracks info
+        QDomNode kdenlivedoc = m_doc.elementsByTagName("kdenlivedoc").at(0);
+        QDomElement infoXml = kdenlivedoc.toElement();
+        infoXml.setAttribute("version", current_version);
+        QString currentTrackOrder = infoXml.attribute("tracks");
+        QDomElement tracksinfo = m_doc.createElement("tracksinfo");
+        for (int i = 0; i < currentTrackOrder.size(); i++) {
+            QDomElement trackinfo = m_doc.createElement("trackinfo");
+            if (currentTrackOrder.data()[i] == 'a') {
+                trackinfo.setAttribute("type", "audio");
+                trackinfo.setAttribute("blind", true);
+            } else trackinfo.setAttribute("blind", false);
+            trackinfo.setAttribute("mute", false);
+            trackinfo.setAttribute("locked", false);
+            tracksinfo.appendChild(trackinfo);
+        }
+        infoXml.appendChild(tracksinfo);
+        convertToMelt();
+        return true;
+    }
+
+    if (version == 0.8) {
+        // Add the tracks information
+        QDomNodeList tracks = m_doc.elementsByTagName("track");
+        int max = tracks.count();
+
+        QDomNode kdenlivedoc = m_doc.elementsByTagName("kdenlivedoc").at(0);
+        QDomElement infoXml = kdenlivedoc.toElement();
+        infoXml.setAttribute("version", current_version);
+        QDomElement tracksinfo = m_doc.createElement("tracksinfo");
+
+        for (int i = 0; i < max; i++) {
+            QDomElement trackinfo = m_doc.createElement("trackinfo");
+            QDomElement t = tracks.at(i).toElement();
+            if (t.attribute("hide") == "video") {
+                trackinfo.setAttribute("type", "audio");
+                trackinfo.setAttribute("blind", true);
+            } else trackinfo.setAttribute("blind", false);
+            trackinfo.setAttribute("mute", false);
+            trackinfo.setAttribute("locked", false);
+            if (t.attribute("producer") != "black_track") tracksinfo.appendChild(trackinfo);
+        }
+        infoXml.appendChild(tracksinfo);
+        convertToMelt();
+        return true;
+    }
+
+    QDomNode westley = m_doc.elementsByTagName("westley").at(1);
+    QDomNode tractor = m_doc.elementsByTagName("tractor").at(0);
+    QDomNode kdenlivedoc = m_doc.elementsByTagName("kdenlivedoc").at(0);
+    QDomElement kdenlivedoc_old = kdenlivedoc.cloneNode(true).toElement(); // Needed for folders
+    QDomElement infoXml = kdenlivedoc.toElement();
+    infoXml.setAttribute("version", current_version);
+    QDomNode multitrack = m_doc.elementsByTagName("multitrack").at(0);
+    QDomNodeList playlists = m_doc.elementsByTagName("playlist");
+
+    QDomNode props = m_doc.elementsByTagName("properties").at(0).toElement();
+    QString profile = props.toElement().attribute("videoprofile");
+    int startPos = props.toElement().attribute("timeline_position").toInt();
+    infoXml.setAttribute("position", startPos);
+    if (profile == "dv_wide") profile = "dv_pal_wide";
+
+    // move playlists outside of tractor and add the tracks instead
+    int max = playlists.count();
+    if (westley.isNull())
+        westley = m_doc.elementsByTagName("westley").at(1);
+    if (westley.isNull()) {
+        westley = m_doc.createElement("mlt");
+        m_doc.documentElement().appendChild(westley);
+    }
+    if (tractor.isNull()) {
+        kDebug() << "// NO MLT PLAYLIST, building empty one";
+        QDomElement blank_tractor = m_doc.createElement("tractor");
+        westley.appendChild(blank_tractor);
+        QDomElement blank_playlist = m_doc.createElement("playlist");
+        blank_playlist.setAttribute("id", "black_track");
+        westley.insertBefore(blank_playlist, QDomNode());
+        QDomElement blank_track = m_doc.createElement("track");
+        blank_track.setAttribute("producer", "black_track");
+        blank_tractor.appendChild(blank_track);
+
+        QDomNodeList kdenlivetracks = m_doc.elementsByTagName("kdenlivetrack");
+        for (int i = 0; i < kdenlivetracks.count(); i++) {
+            blank_playlist = m_doc.createElement("playlist");
+            blank_playlist.setAttribute("id", "playlist" + QString::number(i));
+            westley.insertBefore(blank_playlist, QDomNode());
+            blank_track = m_doc.createElement("track");
+            blank_track.setAttribute("producer", "playlist" + QString::number(i));
+            blank_tractor.appendChild(blank_track);
+            if (kdenlivetracks.at(i).toElement().attribute("cliptype") == "Sound") {
+                blank_playlist.setAttribute("hide", "video");
+                blank_track.setAttribute("hide", "video");
+            }
+        }
+    } else for (int i = 0; i < max; i++) {
+            QDomNode n = playlists.at(i);
+            westley.insertBefore(n, QDomNode());
+            QDomElement pl = n.toElement();
+            QDomElement track = m_doc.createElement("track");
+            QString trackType = pl.attribute("hide");
+            if (!trackType.isEmpty())
+                track.setAttribute("hide", trackType);
+            QString playlist_id =  pl.attribute("id");
+            if (playlist_id.isEmpty()) {
+                playlist_id = "black_track";
+                pl.setAttribute("id", playlist_id);
+            }
+            track.setAttribute("producer", playlist_id);
+            //tractor.appendChild(track);
+#define KEEP_TRACK_ORDER 1
+#ifdef KEEP_TRACK_ORDER
+            tractor.insertAfter(track, QDomNode());
+#else
+            // Insert the new track in an order that hopefully matches the 3 video, then 2 audio tracks of Kdenlive 0.7.0
+            // insertion sort - O( tracks*tracks )
+            // Note, this breaks _all_ transitions - but you can move them up and down afterwards.
+            QDomElement tractor_elem = tractor.toElement();
+            if (! tractor_elem.isNull()) {
+                QDomNodeList tracks = tractor_elem.elementsByTagName("track");
+                int size = tracks.size();
+                if (size == 0) {
+                    tractor.insertAfter(track, QDomNode());
+                } else {
+                    bool inserted = false;
+                    for (int i = 0; i < size; ++i) {
+                        QDomElement track_elem = tracks.at(i).toElement();
+                        if (track_elem.isNull()) {
+                            tractor.insertAfter(track, QDomNode());
+                            inserted = true;
+                            break;
+                        } else {
+                            kDebug() << "playlist_id: " << playlist_id << " producer:" << track_elem.attribute("producer");
+                            if (playlist_id < track_elem.attribute("producer")) {
+                                tractor.insertBefore(track, track_elem);
+                                inserted = true;
+                                break;
+                            }
+                        }
+                    }
+                    // Reach here, no insertion, insert last
+                    if (!inserted) {
+                        tractor.insertAfter(track, QDomNode());
+                    }
+                }
+            } else {
+                kWarning() << "tractor was not a QDomElement";
+                tractor.insertAfter(track, QDomNode());
+            }
+#endif
+        }
+    tractor.removeChild(multitrack);
+
+    // audio track mixing transitions should not be added to track view, so add required attribute
+    QDomNodeList transitions = m_doc.elementsByTagName("transition");
+    max = transitions.count();
+    for (int i = 0; i < max; i++) {
+        QDomElement tr = transitions.at(i).toElement();
+        if (tr.attribute("combine") == "1" && tr.attribute("mlt_service") == "mix") {
+            QDomElement property = m_doc.createElement("property");
+            property.setAttribute("name", "internal_added");
+            QDomText value = m_doc.createTextNode("237");
+            property.appendChild(value);
+            tr.appendChild(property);
+            property = m_doc.createElement("property");
+            property.setAttribute("name", "mlt_service");
+            value = m_doc.createTextNode("mix");
+            property.appendChild(value);
+            tr.appendChild(property);
+        } else {
+            // convert transition
+            QDomNamedNodeMap attrs = tr.attributes();
+            for (int j = 0; j < attrs.count(); j++) {
+                QString attrName = attrs.item(j).nodeName();
+                if (attrName != "in" && attrName != "out" && attrName != "id") {
+                    QDomElement property = m_doc.createElement("property");
+                    property.setAttribute("name", attrName);
+                    QDomText value = m_doc.createTextNode(attrs.item(j).nodeValue());
+                    property.appendChild(value);
+                    tr.appendChild(property);
+                }
+            }
+        }
+    }
+
+    // move transitions after tracks
+    for (int i = 0; i < max; i++) {
+        tractor.insertAfter(transitions.at(0), QDomNode());
+    }
+
+    // Fix filters format
+    QDomNodeList entries = m_doc.elementsByTagName("entry");
+    max = entries.count();
+    for (int i = 0; i < max; i++) {
+        QString last_id;
+        int effectix = 0;
+        QDomNode m = entries.at(i).firstChild();
+        while (!m.isNull()) {
+            if (m.toElement().tagName() == "filter") {
+                QDomElement filt = m.toElement();
+                QDomNamedNodeMap attrs = filt.attributes();
+                QString current_id = filt.attribute("kdenlive_id");
+                if (current_id != last_id) {
+                    effectix++;
+                    last_id = current_id;
+                }
+                QDomElement e = m_doc.createElement("property");
+                e.setAttribute("name", "kdenlive_ix");
+                QDomText value = m_doc.createTextNode(QString::number(effectix));
+                e.appendChild(value);
+                filt.appendChild(e);
+                for (int j = 0; j < attrs.count(); j++) {
+                    QDomAttr a = attrs.item(j).toAttr();
+                    if (!a.isNull()) {
+                        kDebug() << " FILTER; adding :" << a.name() << ":" << a.value();
+                        QDomElement e = m_doc.createElement("property");
+                        e.setAttribute("name", a.name());
+                        QDomText value = m_doc.createTextNode(a.value());
+                        e.appendChild(value);
+                        filt.appendChild(e);
+
+                    }
+                }
+            }
+            m = m.nextSibling();
+        }
+    }
+
+    /*
+        QDomNodeList filters = m_doc.elementsByTagName("filter");
+        max = filters.count();
+        QString last_id;
+        int effectix = 0;
+        for (int i = 0; i < max; i++) {
+            QDomElement filt = filters.at(i).toElement();
+            QDomNamedNodeMap attrs = filt.attributes();
+     QString current_id = filt.attribute("kdenlive_id");
+     if (current_id != last_id) {
+         effectix++;
+         last_id = current_id;
+     }
+     QDomElement e = m_doc.createElement("property");
+            e.setAttribute("name", "kdenlive_ix");
+            QDomText value = m_doc.createTextNode(QString::number(1));
+            e.appendChild(value);
+            filt.appendChild(e);
+            for (int j = 0; j < attrs.count(); j++) {
+                QDomAttr a = attrs.item(j).toAttr();
+                if (!a.isNull()) {
+                    kDebug() << " FILTER; adding :" << a.name() << ":" << a.value();
+                    QDomElement e = m_doc.createElement("property");
+                    e.setAttribute("name", a.name());
+                    QDomText value = m_doc.createTextNode(a.value());
+                    e.appendChild(value);
+                    filt.appendChild(e);
+                }
+            }
+        }*/
+
+    // fix slowmotion
+    QDomNodeList producers = westley.toElement().elementsByTagName("producer");
+    max = producers.count();
+    for (int i = 0; i < max; i++) {
+        QDomElement prod = producers.at(i).toElement();
+        if (prod.attribute("mlt_service") == "framebuffer") {
+            QString slowmotionprod = prod.attribute("resource");
+            slowmotionprod.replace(':', '?');
+            kDebug() << "// FOUND WRONG SLOWMO, new: " << slowmotionprod;
+            prod.setAttribute("resource", slowmotionprod);
+        }
+    }
+    // move producers to correct place, markers to a global list, fix clip descriptions
+    QDomElement markers = m_doc.createElement("markers");
+    // This will get the xml producers:
+    producers = m_doc.elementsByTagName("producer");
+    max = producers.count();
+    for (int i = 0; i < max; i++) {
+        QDomElement prod = producers.at(0).toElement();
+        // add resource also as a property (to allow path correction in setNewResource())
+        // TODO: will it work with slowmotion? needs testing
+        /*if (!prod.attribute("resource").isEmpty()) {
+            QDomElement prop_resource = m_doc.createElement("property");
+            prop_resource.setAttribute("name", "resource");
+            QDomText resource = m_doc.createTextNode(prod.attribute("resource"));
+            prop_resource.appendChild(resource);
+            prod.appendChild(prop_resource);
+        }*/
+        QDomNode m = prod.firstChild();
+        if (!m.isNull()) {
+            if (m.toElement().tagName() == "markers") {
+                QDomNodeList prodchilds = m.childNodes();
+                int maxchild = prodchilds.count();
+                for (int k = 0; k < maxchild; k++) {
+                    QDomElement mark = prodchilds.at(0).toElement();
+                    mark.setAttribute("id", prod.attribute("id"));
+                    markers.insertAfter(mark, QDomNode());
+                }
+                prod.removeChild(m);
+            } else if (prod.attribute("type").toInt() == TEXT) {
+                // convert title clip
+                if (m.toElement().tagName() == "textclip") {
+                    QDomDocument tdoc;
+                    QDomElement titleclip = m.toElement();
+                    QDomElement title = tdoc.createElement("kdenlivetitle");
+                    tdoc.appendChild(title);
+                    QDomNodeList objects = titleclip.childNodes();
+                    int maxchild = objects.count();
+                    for (int k = 0; k < maxchild; k++) {
+                        QString objectxml;
+                        QDomElement ob = objects.at(k).toElement();
+                        if (ob.attribute("type") == "3") {
+                            // text object - all of this goes into "xmldata"...
+                            QDomElement item = tdoc.createElement("item");
+                            item.setAttribute("z-index", ob.attribute("z"));
+                            item.setAttribute("type", "QGraphicsTextItem");
+                            QDomElement position = tdoc.createElement("position");
+                            position.setAttribute("x", ob.attribute("x"));
+                            position.setAttribute("y", ob.attribute("y"));
+                            QDomElement content = tdoc.createElement("content");
+                            content.setAttribute("font", ob.attribute("font_family"));
+                            content.setAttribute("font-size", ob.attribute("font_size"));
+                            content.setAttribute("font-bold", ob.attribute("bold"));
+                            content.setAttribute("font-italic", ob.attribute("italic"));
+                            content.setAttribute("font-underline", ob.attribute("underline"));
+                            QString col = ob.attribute("color");
+                            QColor c(col);
+                            content.setAttribute("font-color", colorToString(c));
+                            // todo: These fields are missing from the newly generated xmldata:
+                            // transform, startviewport, endviewport, background
+
+                            QDomText conttxt = tdoc.createTextNode(ob.attribute("text"));
+                            content.appendChild(conttxt);
+                            item.appendChild(position);
+                            item.appendChild(content);
+                            title.appendChild(item);
+                        } else if (ob.attribute("type") == "5") {
+                            // rectangle object
+                            QDomElement item = tdoc.createElement("item");
+                            item.setAttribute("z-index", ob.attribute("z"));
+                            item.setAttribute("type", "QGraphicsRectItem");
+                            QDomElement position = tdoc.createElement("position");
+                            position.setAttribute("x", ob.attribute("x"));
+                            position.setAttribute("y", ob.attribute("y"));
+                            QDomElement content = tdoc.createElement("content");
+                            QString col = ob.attribute("color");
+                            QColor c(col);
+                            content.setAttribute("brushcolor", colorToString(c));
+                            QString rect = "0,0,";
+                            rect.append(ob.attribute("width"));
+                            rect.append(",");
+                            rect.append(ob.attribute("height"));
+                            content.setAttribute("rect", rect);
+                            item.appendChild(position);
+                            item.appendChild(content);
+                            title.appendChild(item);
+                        }
+                    }
+                    prod.setAttribute("xmldata", tdoc.toString());
+                    // mbd todo: This clearly does not work, as every title gets the same name - trying to leave it empty
+                    // QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
+                    // prod.setAttribute("titlename", titleInfo.at(0));
+                    // prod.setAttribute("resource", titleInfo.at(1));
+                    //kDebug()<<"TITLE DATA:\n"<<tdoc.toString();
+                    prod.removeChild(m);
+                } // End conversion of title clips.
+
+            } else if (m.isText()) {
+                QString comment = m.nodeValue();
+                if (!comment.isEmpty()) {
+                    prod.setAttribute("description", comment);
+                }
+                prod.removeChild(m);
+            }
+        }
+        int duration = prod.attribute("duration").toInt();
+        if (duration > 0) prod.setAttribute("out", QString::number(duration));
+        // The clip goes back in, but text clips should not go back in, at least not modified
+        westley.insertBefore(prod, QDomNode());
+
+    }
+
+    QDomNode westley0 = m_doc.elementsByTagName("westley").at(0);
+    if (!markers.firstChild().isNull()) westley0.appendChild(markers);
+
+
+    // Convert as much of the kdenlivedoc as possible. Use the producer in westley
+    // First, remove the old stuff from westley, and add a new empty one
+    // Also, track the max id in order to use it for the adding of groups/folders
+    int max_kproducer_id = 0;
+    westley0.removeChild(kdenlivedoc);
+    QDomElement kdenlivedoc_new = m_doc.createElement("kdenlivedoc");
+    kdenlivedoc_new.setAttribute("profile", profile);
+
+    // Add tracks info
+    QDomNodeList tracks = m_doc.elementsByTagName("track");
+    max = tracks.count();
+    QDomElement tracksinfo = m_doc.createElement("tracksinfo");
+    for (int i = 0; i < max; i++) {
+        QDomElement trackinfo = m_doc.createElement("trackinfo");
+        QDomElement t = tracks.at(i).toElement();
+        if (t.attribute("hide") == "video") {
+            trackinfo.setAttribute("type", "audio");
+            trackinfo.setAttribute("blind", true);
+        } else trackinfo.setAttribute("blind", false);
+        trackinfo.setAttribute("mute", false);
+        trackinfo.setAttribute("locked", false);
+        if (t.attribute("producer") != "black_track") tracksinfo.appendChild(trackinfo);
+    }
+    kdenlivedoc_new.appendChild(tracksinfo);
+
+    // Add all the producers that has a resource in westley
+    QDomElement westley_element = westley0.toElement();
+    if (westley_element.isNull()) {
+        kWarning() << "westley0 element in document was not a QDomElement - unable to add producers to new kdenlivedoc";
+    } else {
+        QDomNodeList wproducers = westley_element.elementsByTagName("producer");
+        int kmax = wproducers.count();
+        for (int i = 0; i < kmax; i++) {
+            QDomElement wproducer = wproducers.at(i).toElement();
+            if (wproducer.isNull()) {
+                kWarning() << "Found producer in westley0, that was not a QDomElement";
+                continue;
+            }
+            if (wproducer.attribute("id") == "black") continue;
+            // We have to do slightly different things, depending on the type
+            kDebug() << "Converting producer element with type" << wproducer.attribute("type");
+            if (wproducer.attribute("type").toInt() == TEXT) {
+                kDebug() << "Found TEXT element in producer" << endl;
+                QDomElement kproducer = wproducer.cloneNode(true).toElement();
+                kproducer.setTagName("kdenlive_producer");
+                kdenlivedoc_new.appendChild(kproducer);
+                // TODO: Perhaps needs some more changes here to "frequency", aspect ratio as a float, frame_size, channels, and later, ressource and title name
+            } else {
+                QDomElement kproducer = m_doc.createElement("kdenlive_producer");
+                kproducer.setAttribute("id", wproducer.attribute("id"));
+                if (!wproducer.attribute("description").isEmpty())
+                    kproducer.setAttribute("description", wproducer.attribute("description"));
+                kproducer.setAttribute("resource", wproducer.attribute("resource"));
+                kproducer.setAttribute("type", wproducer.attribute("type"));
+                // Testing fix for 358
+                if (!wproducer.attribute("aspect_ratio").isEmpty()) {
+                    kproducer.setAttribute("aspect_ratio", wproducer.attribute("aspect_ratio"));
+                }
+                if (!wproducer.attribute("source_fps").isEmpty()) {
+                    kproducer.setAttribute("fps", wproducer.attribute("source_fps"));
+                }
+                if (!wproducer.attribute("length").isEmpty()) {
+                    kproducer.setAttribute("duration", wproducer.attribute("length"));
+                }
+                kdenlivedoc_new.appendChild(kproducer);
+            }
+            if (wproducer.attribute("id").toInt() > max_kproducer_id) {
+                max_kproducer_id = wproducer.attribute("id").toInt();
+            }
+        }
+    }
+#define LOOKUP_FOLDER 1
+#ifdef LOOKUP_FOLDER
+    // Look through all the folder elements of the old doc, for each folder, for each producer,
+    // get the id, look it up in the new doc, set the groupname and groupid
+    // Note, this does not work at the moment - at least one folders shows up missing, and clips with no folder
+    // does not show up.
+    //    QDomElement kdenlivedoc_old = kdenlivedoc.toElement();
+    if (!kdenlivedoc_old.isNull()) {
+        QDomNodeList folders = kdenlivedoc_old.elementsByTagName("folder");
+        int fsize = folders.size();
+        int groupId = max_kproducer_id + 1; // Start at +1 of max id of the kdenlive_producers
+        for (int i = 0; i < fsize; ++i) {
+            QDomElement folder = folders.at(i).toElement();
+            if (!folder.isNull()) {
+                QString groupName = folder.attribute("name");
+                kDebug() << "groupName: " << groupName << " with groupId: " << groupId;
+                QDomNodeList fproducers = folder.elementsByTagName("producer");
+                int psize = fproducers.size();
+                for (int j = 0; j < psize; ++j) {
+                    QDomElement fproducer = fproducers.at(j).toElement();
+                    if (!fproducer.isNull()) {
+                        QString id = fproducer.attribute("id");
+                        // This is not very effective, but compared to loading the clips, its a breeze
+                        QDomNodeList kdenlive_producers = kdenlivedoc_new.elementsByTagName("kdenlive_producer");
+                        int kpsize = kdenlive_producers.size();
+                        for (int k = 0; k < kpsize; ++k) {
+                            QDomElement kproducer = kdenlive_producers.at(k).toElement(); // Its an element for sure
+                            if (id == kproducer.attribute("id")) {
+                                // We do not check that it already is part of a folder
+                                kproducer.setAttribute("groupid", groupId);
+                                kproducer.setAttribute("groupname", groupName);
+                                break;
+                            }
+                        }
+                    }
+                }
+                ++groupId;
+            }
+        }
+    }
+#endif
+    westley0.appendChild(kdenlivedoc_new);
+
+    QDomNodeList elements = westley.childNodes();
+    max = elements.count();
+    for (int i = 0; i < max; i++) {
+        QDomElement prod = elements.at(0).toElement();
+        westley0.insertAfter(prod, QDomNode());
+    }
+
+    westley0.removeChild(westley);
+
+    // experimental and probably slow
+    // adds <avfile /> information to <kdenlive_producer />
+    QDomNodeList kproducers = m_doc.elementsByTagName("kdenlive_producer");
+    QDomNodeList avfiles = kdenlivedoc_old.elementsByTagName("avfile");
+    kDebug() << "found" << avfiles.count() << "<avfile />s and" << kproducers.count() << "<kdenlive_producer />s";
+    for (int i = 0; i < avfiles.count(); ++i) {
+        QDomElement avfile = avfiles.at(i).toElement();
+        QDomElement kproducer;
+        if (avfile.isNull())
+            kWarning() << "found an <avfile /> that is not a QDomElement";
+        else {
+            QString id = avfile.attribute("id");
+            // this is horrible, must be rewritten, it's just for test
+            for (int j = 0; j < kproducers.count(); ++j) {
+                //kDebug() << "checking <kdenlive_producer /> with id" << kproducers.at(j).toElement().attribute("id");
+                if (kproducers.at(j).toElement().attribute("id") == id) {
+                    kproducer = kproducers.at(j).toElement();
+                    break;
+                }
+            }
+            if (kproducer == QDomElement())
+                kWarning() << "no match for <avfile /> with id =" << id;
+            else {
+                //kDebug() << "ready to set additional <avfile />'s attributes (id =" << id << ")";
+                kproducer.setAttribute("channels", avfile.attribute("channels"));
+                kproducer.setAttribute("duration", avfile.attribute("duration"));
+                kproducer.setAttribute("frame_size", avfile.attribute("width") + 'x' + avfile.attribute("height"));
+                kproducer.setAttribute("frequency", avfile.attribute("frequency"));
+                if (kproducer.attribute("description").isEmpty() && !avfile.attribute("description").isEmpty())
+                    kproducer.setAttribute("description", avfile.attribute("description"));
+            }
+        }
+    }
+
+    /*kDebug() << "/////////////////  CONVERTED DOC:";
+    kDebug() << m_doc.toString();
+    kDebug() << "/////////////////  END CONVERTED DOC:";
+
+    QFile file("converted.kdenlive");
+    if (file.open(QIODevice::WriteOnly)) {
+        QTextStream stream(&file);
+        stream << m_doc.toString().toUtf8();
+        file.close();
+    } else {
+        kDebug() << "Unable to dump file to converted.kdenlive";
+    }*/
+
+    //kDebug() << "/////////////////  END CONVERTED DOC:";
+    convertToMelt();
+    return true;
+}
+
+QString DocumentConvert::colorToString(const QColor& c)
+{
+    QString ret = "%1,%2,%3,%4";
+    ret = ret.arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha());
+    return ret;
+}
+
+bool DocumentConvert::isModified() const
+{
+    return m_modified;
+}
+
+void DocumentConvert::convertToMelt()
+{
+    QDomNodeList list = m_doc.elementsByTagName("westley");
+    int max = list.count();
+    for (int i = 0; i < max; i++) {
+        QDomElement elem = list.at(i).toElement();
+        elem.setTagName("mlt");
+    }
+}
+
diff --git a/src/documentconvert.h b/src/documentconvert.h
new file mode 100644 (file)
index 0000000..a06d85b
--- /dev/null
@@ -0,0 +1,42 @@
+/***************************************************************************
+ *   Copyright (C) 2009 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
+ ***************************************************************************/
+
+
+#ifndef DOCUMENTCONVERT_H
+#define DOCUMENTCONVERT_H
+
+#include <QDomDocument>
+#include <QColor>
+
+class DocumentConvert
+{
+
+public:
+    DocumentConvert(QDomDocument doc);
+    bool doConvert(double version, const double current_version);
+    bool isModified() const;
+
+private:
+    bool m_modified;
+    QDomDocument m_doc;
+    QString colorToString(const QColor& c);
+    void convertToMelt();
+};
+
+#endif
index 2cfe9dccbe582e6fdd88de923918c32ca7d3e38e..7e370ddc9ad5f436e16e0fea59e0ba901da8cff5 100644 (file)
@@ -231,7 +231,7 @@ void DvdWizard::generateDvd()
             renderbg.start(KdenliveSettings::rendererpath(), args);
             if (renderbg.waitForFinished()) {
                 if (renderbg.exitStatus() == QProcess::CrashExit) {
-                    kDebug() << "/// RENDERING MENU vob crashed";
+                    kDebug() << "/// RENDERING MENU vob crashed";
                     QByteArray result = renderbg.readAllStandardError();
                     vobitem->setIcon(KIcon("dialog-close"));
                     m_status.error_log->setText(result);
@@ -239,7 +239,7 @@ void DvdWizard::generateDvd()
                     return;
                 }
             } else {
-                kDebug() << "/// RENDERING MENU vob timed out";
+                kDebug() << "/// RENDERING MENU vob timed out";
                 vobitem->setIcon(KIcon("dialog-close"));
                 m_status.error_log->setText(i18n("Rendering job timed out"));
                 m_status.error_box->setHidden(false);
@@ -282,7 +282,7 @@ void DvdWizard::generateDvd()
             else but.setAttribute("up", 'b' + QString::number(max));
             QRect r = it.value();
             //int target = it.key();
-            // TODO: solve play all button
+            // TODO: solve play all button
             //if (target == 0) target = 1;
             buttonsTarget.append(it.key());
             but.setAttribute("x0", QString::number(r.x()));
@@ -470,7 +470,7 @@ void DvdWizard::slotRenderFinished(int /*exitCode*/, QProcess::ExitStatus status
     delete m_dvdauthor;
     m_dvdauthor = NULL;
 
-    // Check if DVD structure has the necessary infos
+    // Check if DVD structure has the necessary infos
     if (!QFile::exists(m_iso.tmp_folder->url().path() + "/DVD/VIDEO_TS/VIDEO_TS.IFO")) {
         m_status.error_log->setText(m_creationLog + '\n' + i18n("DVD structure broken"));
         m_status.error_box->setHidden(false);
@@ -518,7 +518,7 @@ void DvdWizard::slotIsoFinished(int /*exitCode*/, QProcess::ExitStatus status)
     delete m_mkiso;
     m_mkiso = NULL;
 
-    // Check if DVD iso is ok
+    // Check if DVD iso is ok
     QFile iso(m_iso.iso_image->url().path());
     if (!iso.exists() || iso.size() == 0) {
         if (iso.exists()) {
index 7fc0333b82a6b2569c6424781f8e3b7b289986a5..13d1f4fa1c0638346746aa9b0b7d55a13dfd2f73 100644 (file)
@@ -27,6 +27,7 @@
 #include "titlewidget.h"
 #include "mainwindow.h"
 #include "documentchecker.h"
+#include "documentconvert.h"
 #include "kdenlive-config.h"
 
 #include <KDebug>
@@ -43,6 +44,8 @@
 
 #include <mlt++/Mlt.h>
 
+const double DOCUMENTVERSION = 0.83;
+
 KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QPoint tracks, Render *render, MainWindow *parent) :
         QObject(parent),
         m_autosave(NULL),
@@ -83,20 +86,22 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                 double version = infoXml.attribute("version").toDouble();
 
                 // Upgrade old Kdenlive documents to current version
-                if (!convertDocument(version)) {
+                DocumentConvert converter(m_document);
+                if (!converter.doConvert(version, DOCUMENTVERSION)) {
                     m_url.clear();
                     m_document = createEmptyDocument(tracks.x(), tracks.y());
                     setProfilePath(profileName);
                 } else {
                     /*
-                     * read again <kdenlivedoc> to get all the new stuff
-                     * (convertDocument() can now do anything without breaking
+                     * read again <kdenlivedoc> and <mlt> to get all the new
+                     * stuff (convertDocument() can now do anything without breaking
                      * document loading)
                      */
+                    setModified(converter.isModified());
                     infoXmlNode = m_document.elementsByTagName("kdenlivedoc").at(0);
                     infoXml = infoXmlNode.toElement();
                     version = infoXml.attribute("version").toDouble();
-                    QDomNode westley = m_document.elementsByTagName("westley").at(0);
+                    QDomNode mlt = m_document.elementsByTagName("mlt").at(0);
 
                     QString profilePath = infoXml.attribute("profile");
                     QString projectFolderPath = infoXml.attribute("projectfolder");
@@ -131,7 +136,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                 m_tracksList.append(projectTrack);
                             }
                         }
-                        westley.removeChild(tracksinfo);
+                        mlt.removeChild(tracksinfo);
                     }
                     QDomNodeList producers = m_document.elementsByTagName("producer");
                     QDomNodeList infoproducers = m_document.elementsByTagName("kdenlive_producer");
@@ -196,7 +201,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                     m_clipManager->getClipById(e.attribute("id"))->addSnapMarker(GenTime(e.attribute("time").toDouble()), e.attribute("comment"));
                                 }
                             }
-                            westley.removeChild(markers);
+                            mlt.removeChild(markers);
                         }
                         m_document.removeChild(infoXmlNode);
                         kDebug() << "Reading file: " << url.path() << ", found clips: " << producers.count();
@@ -259,8 +264,8 @@ QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int a
 {
     // Creating new document
     QDomDocument doc;
-    QDomElement westley = doc.createElement("westley");
-    doc.appendChild(westley);
+    QDomElement mlt = doc.createElement("mlt");
+    doc.appendChild(mlt);
 
 
     TrackInfo videoTrack;
@@ -280,7 +285,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int a
     QDomElement multitrack = doc.createElement("multitrack");
     QDomElement playlist = doc.createElement("playlist");
     playlist.setAttribute("id", "black_track");
-    westley.appendChild(playlist);
+    mlt.appendChild(playlist);
 
 
     // create playlists
@@ -289,7 +294,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int a
     for (int i = 1; i < total; i++) {
         QDomElement playlist = doc.createElement("playlist");
         playlist.setAttribute("id", "playlist" + QString::number(i));
-        westley.appendChild(playlist);
+        mlt.appendChild(playlist);
     }
 
     QDomElement track0 = doc.createElement("track");
@@ -348,7 +353,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int a
         transition.appendChild(property);
         tractor.appendChild(transition);
     }
-    westley.appendChild(tractor);
+    mlt.appendChild(tractor);
     return doc;
 }
 
@@ -404,591 +409,6 @@ int KdenliveDoc::zoom() const
     return m_zoom;
 }
 
-bool KdenliveDoc::convertDocument(double version)
-{
-    kDebug() << "Opening a document with version " << version;
-    const double current_version = 0.82;
-
-    if (version == current_version) return true;
-
-    if (version > current_version) {
-        kDebug() << "Unable to open document with version " << version;
-        KMessageBox::sorry(kapp->activeWindow(), i18n("This project type is unsupported (version %1) and can't be loaded.\nPlease consider upgrading you Kdenlive version.", version), i18n("Unable to open project"));
-        return false;
-    }
-
-    // Opening a old Kdenlive document
-    if (version == 0.5 || version == 0.7) {
-        KMessageBox::sorry(kapp->activeWindow(), i18n("This project type is unsupported (version %1) and can't be loaded.", version), i18n("Unable to open project"));
-        kDebug() << "Unable to open document with version " << version;
-        // TODO: convert 0.7 (0.5?) files to the new document format.
-        return false;
-    }
-
-    setModified(true);
-
-    if (version == 0.81) {
-        // Add correct tracks info
-        QDomNode kdenlivedoc = m_document.elementsByTagName("kdenlivedoc").at(0);
-        QDomElement infoXml = kdenlivedoc.toElement();
-        infoXml.setAttribute("version", current_version);
-        QString currentTrackOrder = infoXml.attribute("tracks");
-        QDomElement tracksinfo = m_document.createElement("tracksinfo");
-        for (int i = 0; i < currentTrackOrder.size(); i++) {
-            QDomElement trackinfo = m_document.createElement("trackinfo");
-            if (currentTrackOrder.data()[i] == 'a') {
-                trackinfo.setAttribute("type", "audio");
-                trackinfo.setAttribute("blind", true);
-            } else trackinfo.setAttribute("blind", false);
-            trackinfo.setAttribute("mute", false);
-            trackinfo.setAttribute("locked", false);
-            tracksinfo.appendChild(trackinfo);
-        }
-        infoXml.appendChild(tracksinfo);
-        return true;
-    }
-
-    if (version == 0.8) {
-        // Add the tracks information
-        QDomNodeList tracks = m_document.elementsByTagName("track");
-        int max = tracks.count();
-
-        QDomNode kdenlivedoc = m_document.elementsByTagName("kdenlivedoc").at(0);
-        QDomElement infoXml = kdenlivedoc.toElement();
-        infoXml.setAttribute("version", current_version);
-        QDomElement tracksinfo = m_document.createElement("tracksinfo");
-
-        for (int i = 0; i < max; i++) {
-            QDomElement trackinfo = m_document.createElement("trackinfo");
-            QDomElement t = tracks.at(i).toElement();
-            if (t.attribute("hide") == "video") {
-                trackinfo.setAttribute("type", "audio");
-                trackinfo.setAttribute("blind", true);
-            } else trackinfo.setAttribute("blind", false);
-            trackinfo.setAttribute("mute", false);
-            trackinfo.setAttribute("locked", false);
-            if (t.attribute("producer") != "black_track") tracksinfo.appendChild(trackinfo);
-        }
-        infoXml.appendChild(tracksinfo);
-        return true;
-    }
-
-    QDomNode westley = m_document.elementsByTagName("westley").at(1);
-    QDomNode tractor = m_document.elementsByTagName("tractor").at(0);
-    QDomNode kdenlivedoc = m_document.elementsByTagName("kdenlivedoc").at(0);
-    QDomElement kdenlivedoc_old = kdenlivedoc.cloneNode(true).toElement(); // Needed for folders
-    QDomElement infoXml = kdenlivedoc.toElement();
-    infoXml.setAttribute("version", current_version);
-    QDomNode multitrack = m_document.elementsByTagName("multitrack").at(0);
-    QDomNodeList playlists = m_document.elementsByTagName("playlist");
-
-    QDomNode props = m_document.elementsByTagName("properties").at(0).toElement();
-    QString profile = props.toElement().attribute("videoprofile");
-    m_startPos = props.toElement().attribute("timeline_position").toInt();
-    if (profile == "dv_wide") profile = "dv_pal_wide";
-
-    // move playlists outside of tractor and add the tracks instead
-    int max = playlists.count();
-    if (westley.isNull()) {
-        westley = m_document.createElement("westley");
-        m_document.documentElement().appendChild(westley);
-    }
-    if (tractor.isNull()) {
-        kDebug() << "// NO WESTLEY PLAYLIST, building empty one";
-        QDomElement blank_tractor = m_document.createElement("tractor");
-        westley.appendChild(blank_tractor);
-        QDomElement blank_playlist = m_document.createElement("playlist");
-        blank_playlist.setAttribute("id", "black_track");
-        westley.insertBefore(blank_playlist, QDomNode());
-        QDomElement blank_track = m_document.createElement("track");
-        blank_track.setAttribute("producer", "black_track");
-        blank_tractor.appendChild(blank_track);
-
-        QDomNodeList kdenlivetracks = m_document.elementsByTagName("kdenlivetrack");
-        for (int i = 0; i < kdenlivetracks.count(); i++) {
-            blank_playlist = m_document.createElement("playlist");
-            blank_playlist.setAttribute("id", "playlist" + QString::number(i));
-            westley.insertBefore(blank_playlist, QDomNode());
-            blank_track = m_document.createElement("track");
-            blank_track.setAttribute("producer", "playlist" + QString::number(i));
-            blank_tractor.appendChild(blank_track);
-            if (kdenlivetracks.at(i).toElement().attribute("cliptype") == "Sound") {
-                blank_playlist.setAttribute("hide", "video");
-                blank_track.setAttribute("hide", "video");
-            }
-        }
-    } else for (int i = 0; i < max; i++) {
-            QDomNode n = playlists.at(i);
-            westley.insertBefore(n, QDomNode());
-            QDomElement pl = n.toElement();
-            QDomElement track = m_document.createElement("track");
-            QString trackType = pl.attribute("hide");
-            if (!trackType.isEmpty())
-                track.setAttribute("hide", trackType);
-            QString playlist_id =  pl.attribute("id");
-            if (playlist_id.isEmpty()) {
-                playlist_id = "black_track";
-                pl.setAttribute("id", playlist_id);
-            }
-            track.setAttribute("producer", playlist_id);
-            //tractor.appendChild(track);
-#define KEEP_TRACK_ORDER 1
-#ifdef KEEP_TRACK_ORDER
-            tractor.insertAfter(track, QDomNode());
-#else
-            // Insert the new track in an order that hopefully matches the 3 video, then 2 audio tracks of Kdenlive 0.7.0
-            // insertion sort - O( tracks*tracks )
-            // Note, this breaks _all_ transitions - but you can move them up and down afterwards.
-            QDomElement tractor_elem = tractor.toElement();
-            if (! tractor_elem.isNull()) {
-                QDomNodeList tracks = tractor_elem.elementsByTagName("track");
-                int size = tracks.size();
-                if (size == 0) {
-                    tractor.insertAfter(track, QDomNode());
-                } else {
-                    bool inserted = false;
-                    for (int i = 0; i < size; ++i) {
-                        QDomElement track_elem = tracks.at(i).toElement();
-                        if (track_elem.isNull()) {
-                            tractor.insertAfter(track, QDomNode());
-                            inserted = true;
-                            break;
-                        } else {
-                            kDebug() << "playlist_id: " << playlist_id << " producer:" << track_elem.attribute("producer");
-                            if (playlist_id < track_elem.attribute("producer")) {
-                                tractor.insertBefore(track, track_elem);
-                                inserted = true;
-                                break;
-                            }
-                        }
-                    }
-                    // Reach here, no insertion, insert last
-                    if (!inserted) {
-                        tractor.insertAfter(track, QDomNode());
-                    }
-                }
-            } else {
-                kWarning() << "tractor was not a QDomElement";
-                tractor.insertAfter(track, QDomNode());
-            }
-#endif
-        }
-    tractor.removeChild(multitrack);
-
-    // audio track mixing transitions should not be added to track view, so add required attribute
-    QDomNodeList transitions = m_document.elementsByTagName("transition");
-    max = transitions.count();
-    for (int i = 0; i < max; i++) {
-        QDomElement tr = transitions.at(i).toElement();
-        if (tr.attribute("combine") == "1" && tr.attribute("mlt_service") == "mix") {
-            QDomElement property = m_document.createElement("property");
-            property.setAttribute("name", "internal_added");
-            QDomText value = m_document.createTextNode("237");
-            property.appendChild(value);
-            tr.appendChild(property);
-            property = m_document.createElement("property");
-            property.setAttribute("name", "mlt_service");
-            value = m_document.createTextNode("mix");
-            property.appendChild(value);
-            tr.appendChild(property);
-        } else {
-            // convert transition
-            QDomNamedNodeMap attrs = tr.attributes();
-            for (int j = 0; j < attrs.count(); j++) {
-                QString attrName = attrs.item(j).nodeName();
-                if (attrName != "in" && attrName != "out" && attrName != "id") {
-                    QDomElement property = m_document.createElement("property");
-                    property.setAttribute("name", attrName);
-                    QDomText value = m_document.createTextNode(attrs.item(j).nodeValue());
-                    property.appendChild(value);
-                    tr.appendChild(property);
-                }
-            }
-        }
-    }
-
-    // move transitions after tracks
-    for (int i = 0; i < max; i++) {
-        tractor.insertAfter(transitions.at(0), QDomNode());
-    }
-
-    // Fix filters format
-    QDomNodeList entries = m_document.elementsByTagName("entry");
-    max = entries.count();
-    for (int i = 0; i < max; i++) {
-        QString last_id;
-        int effectix = 0;
-        QDomNode m = entries.at(i).firstChild();
-        while (!m.isNull()) {
-            if (m.toElement().tagName() == "filter") {
-                QDomElement filt = m.toElement();
-                QDomNamedNodeMap attrs = filt.attributes();
-                QString current_id = filt.attribute("kdenlive_id");
-                if (current_id != last_id) {
-                    effectix++;
-                    last_id = current_id;
-                }
-                QDomElement e = m_document.createElement("property");
-                e.setAttribute("name", "kdenlive_ix");
-                QDomText value = m_document.createTextNode(QString::number(effectix));
-                e.appendChild(value);
-                filt.appendChild(e);
-                for (int j = 0; j < attrs.count(); j++) {
-                    QDomAttr a = attrs.item(j).toAttr();
-                    if (!a.isNull()) {
-                        kDebug() << " FILTER; adding :" << a.name() << ":" << a.value();
-                        QDomElement e = m_document.createElement("property");
-                        e.setAttribute("name", a.name());
-                        QDomText value = m_document.createTextNode(a.value());
-                        e.appendChild(value);
-                        filt.appendChild(e);
-
-                    }
-                }
-            }
-            m = m.nextSibling();
-        }
-    }
-
-    /*
-        QDomNodeList filters = m_document.elementsByTagName("filter");
-        max = filters.count();
-        QString last_id;
-        int effectix = 0;
-        for (int i = 0; i < max; i++) {
-            QDomElement filt = filters.at(i).toElement();
-            QDomNamedNodeMap attrs = filt.attributes();
-     QString current_id = filt.attribute("kdenlive_id");
-     if (current_id != last_id) {
-         effectix++;
-         last_id = current_id;
-     }
-     QDomElement e = m_document.createElement("property");
-            e.setAttribute("name", "kdenlive_ix");
-            QDomText value = m_document.createTextNode(QString::number(1));
-            e.appendChild(value);
-            filt.appendChild(e);
-            for (int j = 0; j < attrs.count(); j++) {
-                QDomAttr a = attrs.item(j).toAttr();
-                if (!a.isNull()) {
-                    kDebug() << " FILTER; adding :" << a.name() << ":" << a.value();
-                    QDomElement e = m_document.createElement("property");
-                    e.setAttribute("name", a.name());
-                    QDomText value = m_document.createTextNode(a.value());
-                    e.appendChild(value);
-                    filt.appendChild(e);
-                }
-            }
-        }*/
-
-    // fix slowmotion
-    QDomNodeList producers = westley.toElement().elementsByTagName("producer");
-    max = producers.count();
-    for (int i = 0; i < max; i++) {
-        QDomElement prod = producers.at(i).toElement();
-        if (prod.attribute("mlt_service") == "framebuffer") {
-            QString slowmotionprod = prod.attribute("resource");
-            slowmotionprod.replace(':', '?');
-            kDebug() << "// FOUND WRONG SLOWMO, new: " << slowmotionprod;
-            prod.setAttribute("resource", slowmotionprod);
-        }
-    }
-    // move producers to correct place, markers to a global list, fix clip descriptions
-    QDomElement markers = m_document.createElement("markers");
-    // This will get the westley producers:
-    producers = m_document.elementsByTagName("producer");
-    max = producers.count();
-    for (int i = 0; i < max; i++) {
-        QDomElement prod = producers.at(0).toElement();
-        // add resource also as a property (to allow path correction in setNewResource())
-        // TODO: will it work with slowmotion? needs testing
-        /*if (!prod.attribute("resource").isEmpty()) {
-            QDomElement prop_resource = m_document.createElement("property");
-            prop_resource.setAttribute("name", "resource");
-            QDomText resource = m_document.createTextNode(prod.attribute("resource"));
-            prop_resource.appendChild(resource);
-            prod.appendChild(prop_resource);
-        }*/
-        QDomNode m = prod.firstChild();
-        if (!m.isNull()) {
-            if (m.toElement().tagName() == "markers") {
-                QDomNodeList prodchilds = m.childNodes();
-                int maxchild = prodchilds.count();
-                for (int k = 0; k < maxchild; k++) {
-                    QDomElement mark = prodchilds.at(0).toElement();
-                    mark.setAttribute("id", prod.attribute("id"));
-                    markers.insertAfter(mark, QDomNode());
-                }
-                prod.removeChild(m);
-            } else if (prod.attribute("type").toInt() == TEXT) {
-                // convert title clip
-                if (m.toElement().tagName() == "textclip") {
-                    QDomDocument tdoc;
-                    QDomElement titleclip = m.toElement();
-                    QDomElement title = tdoc.createElement("kdenlivetitle");
-                    tdoc.appendChild(title);
-                    QDomNodeList objects = titleclip.childNodes();
-                    int maxchild = objects.count();
-                    for (int k = 0; k < maxchild; k++) {
-                        QString objectxml;
-                        QDomElement ob = objects.at(k).toElement();
-                        if (ob.attribute("type") == "3") {
-                            // text object - all of this goes into "xmldata"...
-                            QDomElement item = tdoc.createElement("item");
-                            item.setAttribute("z-index", ob.attribute("z"));
-                            item.setAttribute("type", "QGraphicsTextItem");
-                            QDomElement position = tdoc.createElement("position");
-                            position.setAttribute("x", ob.attribute("x"));
-                            position.setAttribute("y", ob.attribute("y"));
-                            QDomElement content = tdoc.createElement("content");
-                            content.setAttribute("font", ob.attribute("font_family"));
-                            content.setAttribute("font-size", ob.attribute("font_size"));
-                            content.setAttribute("font-bold", ob.attribute("bold"));
-                            content.setAttribute("font-italic", ob.attribute("italic"));
-                            content.setAttribute("font-underline", ob.attribute("underline"));
-                            QString col = ob.attribute("color");
-                            QColor c(col);
-                            content.setAttribute("font-color", colorToString(c));
-                            // todo: These fields are missing from the newly generated xmldata:
-                            // transform, startviewport, endviewport, background
-
-                            QDomText conttxt = tdoc.createTextNode(ob.attribute("text"));
-                            content.appendChild(conttxt);
-                            item.appendChild(position);
-                            item.appendChild(content);
-                            title.appendChild(item);
-                        } else if (ob.attribute("type") == "5") {
-                            // rectangle object
-                            QDomElement item = tdoc.createElement("item");
-                            item.setAttribute("z-index", ob.attribute("z"));
-                            item.setAttribute("type", "QGraphicsRectItem");
-                            QDomElement position = tdoc.createElement("position");
-                            position.setAttribute("x", ob.attribute("x"));
-                            position.setAttribute("y", ob.attribute("y"));
-                            QDomElement content = tdoc.createElement("content");
-                            QString col = ob.attribute("color");
-                            QColor c(col);
-                            content.setAttribute("brushcolor", colorToString(c));
-                            QString rect = "0,0,";
-                            rect.append(ob.attribute("width"));
-                            rect.append(",");
-                            rect.append(ob.attribute("height"));
-                            content.setAttribute("rect", rect);
-                            item.appendChild(position);
-                            item.appendChild(content);
-                            title.appendChild(item);
-                        }
-                    }
-                    prod.setAttribute("xmldata", tdoc.toString());
-                    // mbd todo: This clearly does not work, as every title gets the same name - trying to leave it empty
-                    // QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
-                    // prod.setAttribute("titlename", titleInfo.at(0));
-                    // prod.setAttribute("resource", titleInfo.at(1));
-                    //kDebug()<<"TITLE DATA:\n"<<tdoc.toString();
-                    prod.removeChild(m);
-                } // End conversion of title clips.
-
-            } else if (m.isText()) {
-                QString comment = m.nodeValue();
-                if (!comment.isEmpty()) {
-                    prod.setAttribute("description", comment);
-                }
-                prod.removeChild(m);
-            }
-        }
-        int duration = prod.attribute("duration").toInt();
-        if (duration > 0) prod.setAttribute("out", QString::number(duration));
-        // The clip goes back in, but text clips should not go back in, at least not modified
-        westley.insertBefore(prod, QDomNode());
-
-    }
-
-    QDomNode westley0 = m_document.elementsByTagName("westley").at(0);
-    if (!markers.firstChild().isNull()) westley0.appendChild(markers);
-
-
-    // Convert as much of the kdenlivedoc as possible. Use the producer in westley
-    // First, remove the old stuff from westley, and add a new empty one
-    // Also, track the max id in order to use it for the adding of groups/folders
-    int max_kproducer_id = 0;
-    westley0.removeChild(kdenlivedoc);
-    QDomElement kdenlivedoc_new = m_document.createElement("kdenlivedoc");
-    kdenlivedoc_new.setAttribute("profile", profile);
-
-    // Add tracks info
-    QDomNodeList tracks = m_document.elementsByTagName("track");
-    max = tracks.count();
-    QDomElement tracksinfo = m_document.createElement("tracksinfo");
-    for (int i = 0; i < max; i++) {
-        QDomElement trackinfo = m_document.createElement("trackinfo");
-        QDomElement t = tracks.at(i).toElement();
-        if (t.attribute("hide") == "video") {
-            trackinfo.setAttribute("type", "audio");
-            trackinfo.setAttribute("blind", true);
-        } else trackinfo.setAttribute("blind", false);
-        trackinfo.setAttribute("mute", false);
-        trackinfo.setAttribute("locked", false);
-        if (t.attribute("producer") != "black_track") tracksinfo.appendChild(trackinfo);
-    }
-    kdenlivedoc_new.appendChild(tracksinfo);
-
-    // Add all the producers that has a ressource in westley
-    QDomElement westley_element = westley0.toElement();
-    if (westley_element.isNull()) {
-        kWarning() << "westley0 element in document was not a QDomElement - unable to add producers to new kdenlivedoc";
-    } else {
-        QDomNodeList wproducers = westley_element.elementsByTagName("producer");
-        int kmax = wproducers.count();
-        for (int i = 0; i < kmax; i++) {
-            QDomElement wproducer = wproducers.at(i).toElement();
-            if (wproducer.isNull()) {
-                kWarning() << "Found producer in westley0, that was not a QDomElement";
-                continue;
-            }
-            if (wproducer.attribute("id") == "black") continue;
-            // We have to do slightly different things, depending on the type
-            kDebug() << "Converting producer element with type" << wproducer.attribute("type");
-            if (wproducer.attribute("type").toInt() == TEXT) {
-                kDebug() << "Found TEXT element in producer" << endl;
-                QDomElement kproducer = wproducer.cloneNode(true).toElement();
-                kproducer.setTagName("kdenlive_producer");
-                kdenlivedoc_new.appendChild(kproducer);
-                // TODO: Perhaps needs some more changes here to "frequency", aspect ratio as a float, frame_size, channels, and later, ressource and title name
-            } else {
-                QDomElement kproducer = m_document.createElement("kdenlive_producer");
-                kproducer.setAttribute("id", wproducer.attribute("id"));
-                if (!wproducer.attribute("description").isEmpty())
-                    kproducer.setAttribute("description", wproducer.attribute("description"));
-                kproducer.setAttribute("resource", wproducer.attribute("resource"));
-                kproducer.setAttribute("type", wproducer.attribute("type"));
-                // Testing fix for 358
-                if (!wproducer.attribute("aspect_ratio").isEmpty()) {
-                    kproducer.setAttribute("aspect_ratio", wproducer.attribute("aspect_ratio"));
-                }
-                if (!wproducer.attribute("source_fps").isEmpty()) {
-                    kproducer.setAttribute("fps", wproducer.attribute("source_fps"));
-                }
-                if (!wproducer.attribute("length").isEmpty()) {
-                    kproducer.setAttribute("duration", wproducer.attribute("length"));
-                }
-                kdenlivedoc_new.appendChild(kproducer);
-            }
-            if (wproducer.attribute("id").toInt() > max_kproducer_id) {
-                max_kproducer_id = wproducer.attribute("id").toInt();
-            }
-        }
-    }
-#define LOOKUP_FOLDER 1
-#ifdef LOOKUP_FOLDER
-    // Look through all the folder elements of the old doc, for each folder, for each producer,
-    // get the id, look it up in the new doc, set the groupname and groupid
-    // Note, this does not work at the moment - at least one folders shows up missing, and clips with no folder
-    // does not show up.
-    //    QDomElement kdenlivedoc_old = kdenlivedoc.toElement();
-    if (!kdenlivedoc_old.isNull()) {
-        QDomNodeList folders = kdenlivedoc_old.elementsByTagName("folder");
-        int fsize = folders.size();
-        int groupId = max_kproducer_id + 1; // Start at +1 of max id of the kdenlive_producers
-        for (int i = 0; i < fsize; ++i) {
-            QDomElement folder = folders.at(i).toElement();
-            if (!folder.isNull()) {
-                QString groupName = folder.attribute("name");
-                kDebug() << "groupName: " << groupName << " with groupId: " << groupId;
-                QDomNodeList fproducers = folder.elementsByTagName("producer");
-                int psize = fproducers.size();
-                for (int j = 0; j < psize; ++j) {
-                    QDomElement fproducer = fproducers.at(j).toElement();
-                    if (!fproducer.isNull()) {
-                        QString id = fproducer.attribute("id");
-                        // This is not very effective, but compared to loading the clips, its a breeze
-                        QDomNodeList kdenlive_producers = kdenlivedoc_new.elementsByTagName("kdenlive_producer");
-                        int kpsize = kdenlive_producers.size();
-                        for (int k = 0; k < kpsize; ++k) {
-                            QDomElement kproducer = kdenlive_producers.at(k).toElement(); // Its an element for sure
-                            if (id == kproducer.attribute("id")) {
-                                // We do not check that it already is part of a folder
-                                kproducer.setAttribute("groupid", groupId);
-                                kproducer.setAttribute("groupname", groupName);
-                                break;
-                            }
-                        }
-                    }
-                }
-                ++groupId;
-            }
-        }
-    }
-#endif
-    westley0.appendChild(kdenlivedoc_new);
-
-    QDomNodeList elements = westley.childNodes();
-    max = elements.count();
-    for (int i = 0; i < max; i++) {
-        QDomElement prod = elements.at(0).toElement();
-        westley0.insertAfter(prod, QDomNode());
-    }
-
-    westley0.removeChild(westley);
-
-    // experimental and probably slow
-    // adds <avfile /> information to <kdenlive_producer />
-    QDomNodeList kproducers = m_document.elementsByTagName("kdenlive_producer");
-    QDomNodeList avfiles = kdenlivedoc_old.elementsByTagName("avfile");
-    kDebug() << "found" << avfiles.count() << "<avfile />s and" << kproducers.count() << "<kdenlive_producer />s";
-    for (int i = 0; i < avfiles.count(); ++i) {
-        QDomElement avfile = avfiles.at(i).toElement();
-        QDomElement kproducer;
-        if (avfile.isNull())
-            kWarning() << "found an <avfile /> that is not a QDomElement";
-        else {
-            QString id = avfile.attribute("id");
-            // this is horrible, must be rewritten, it's just for test
-            for (int j = 0; j < kproducers.count(); ++j) {
-                //kDebug() << "checking <kdenlive_producer /> with id" << kproducers.at(j).toElement().attribute("id");
-                if (kproducers.at(j).toElement().attribute("id") == id) {
-                    kproducer = kproducers.at(j).toElement();
-                    break;
-                }
-            }
-            if (kproducer == QDomElement())
-                kWarning() << "no match for <avfile /> with id =" << id;
-            else {
-                //kDebug() << "ready to set additional <avfile />'s attributes (id =" << id << ")";
-                kproducer.setAttribute("channels", avfile.attribute("channels"));
-                kproducer.setAttribute("duration", avfile.attribute("duration"));
-                kproducer.setAttribute("frame_size", avfile.attribute("width") + 'x' + avfile.attribute("height"));
-                kproducer.setAttribute("frequency", avfile.attribute("frequency"));
-                if (kproducer.attribute("description").isEmpty() && !avfile.attribute("description").isEmpty())
-                    kproducer.setAttribute("description", avfile.attribute("description"));
-            }
-        }
-    }
-
-    /*kDebug() << "/////////////////  CONVERTED DOC:";
-    kDebug() << m_document.toString();
-    kDebug() << "/////////////////  END CONVERTED DOC:";
-
-    QFile file("converted.kdenlive");
-    if (file.open(QIODevice::WriteOnly)) {
-        QTextStream stream(&file);
-        stream << m_document.toString().toUtf8();
-        file.close();
-    } else {
-        kDebug() << "Unable to dump file to converted.kdenlive";
-    }*/
-
-    //kDebug() << "/////////////////  END CONVERTED DOC:";
-
-    return true;
-}
-
-QString KdenliveDoc::colorToString(const QColor& c)
-{
-    QString ret = "%1,%2,%3,%4";
-    ret = ret.arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha());
-    return ret;
-}
-
 void KdenliveDoc::setZone(int start, int end)
 {
     m_zoneStart = start;
@@ -1004,9 +424,9 @@ bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene)
 {
     QDomDocument sceneList;
     sceneList.setContent(scene, true);
-    QDomNode wes = sceneList.elementsByTagName("westley").at(0);
+    QDomNode mlt = sceneList.elementsByTagName("mlt").at(0);
     QDomElement addedXml = sceneList.createElement("kdenlivedoc");
-    wes.appendChild(addedXml);
+    mlt.appendChild(addedXml);
 
     QDomElement markers = sceneList.createElement("markers");
     addedXml.setAttribute("version", "0.82");
@@ -1390,7 +810,7 @@ void KdenliveDoc::addClip(QDomElement elem, QString clipId, bool createClipItem)
         }
 
         if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT && !elem.hasAttribute("placeholder")) {
-            kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt();
+            kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt();
             const QString size = elem.attribute("file_size");
             const QString hash = elem.attribute("file_hash");
             QString newpath;
index e92c0a816e943e187bea4cd0d0a9458ed0fe8d25..70f3180fe8828271c93b907cb542d894f8bd9ce3 100644 (file)
@@ -130,7 +130,7 @@ private:
     MltVideoProfile m_profile;
     QTimer *m_autoSaveTimer;
     QString m_searchFolder;
-    /** tells whether current doc has been changed since last save event */
+    /** tells whether current doc has been changed since last save event */
     bool m_modified;
     /** Project folder, used to store project files (titles, effects,...) */
     KUrl m_projectFolder;
@@ -142,9 +142,7 @@ private:
 
     QList <TrackInfo> m_tracksList;
 
-    bool convertDocument(double version);
     QDomDocument createEmptyDocument(const int videotracks, const int audiotracks);
-    QString colorToString(const QColor& c);
 
     void setNewClipResource(const QString &id, const QString &path);
     QString searchFileRecursively(const QDir &dir, const QString &matchSize, const QString &matchHash) const;
@@ -167,7 +165,7 @@ signals:
     void updateClipDisplay(const QString&);
     void deleteTimelineClip(const QString&);
     void progressInfo(const QString &, int);
-    /** emitted when the document state has been modified (= needs saving or not) */
+    /** emitted when the document state has been modified (= needs saving or not) */
     void docModified(bool);
     void selectLastAddedClip(const QString &);
     void guidesUpdated();
index 8f1cf8f247aba057aac43057c93ef27c40f493ca..a8ce5ca539419240f7c6a1dfc0009cbb76ec0155 100644 (file)
@@ -184,19 +184,21 @@ QPixmap KThumb::getImage(KUrl url, int width, int height)
 
 void KThumb::extractImage(int frame, int frame2)
 {
+    kDebug() << "//extract thumb: " << frame << ", " << frame2;
     if (m_url.isEmpty() || !KdenliveSettings::videothumbnails() || m_producer == NULL) return;
 
     const int twidth = (int)(KdenliveSettings::trackheight() * m_dar);
     const int theight = KdenliveSettings::trackheight();
 
-    mlt_image_format format = mlt_image_yuv422;
     if (m_producer->is_blank()) {
         QPixmap pix(twidth, theight);
         pix.fill(Qt::black);
-        emit thumbReady(frame, pix);
+        if (frame != -1) emit thumbReady(frame, pix);
+        if (frame2 != -1) emit thumbReady(frame2, pix);
         return;
     }
     Mlt::Frame *mltFrame;
+    mlt_image_format format = mlt_image_yuv422;
     if (frame != -1) {
         //videoThumbProducer.getThumb(frame);
         m_producer->seek(frame);
@@ -236,7 +238,7 @@ void KThumb::extractImage(int frame, int frame2)
             kDebug() << "///// BROKEN FRAME";
             QPixmap p(twidth, theight);
             p.fill(Qt::red);
-            emit thumbReady(frame, p);
+            emit thumbReady(frame2, p);
             return;
         } else {
             int frame_width = 0;
@@ -275,8 +277,8 @@ QPixmap KThumb::getImage(KUrl url, int frame, int width, int height)
     if (url.isEmpty()) return pix;
 
     char *tmp = Render::decodedString(url.path());
-    //"<westley><playlist><producer resource=\"" + url.path() + "\" /></playlist></westley>");
-    //Mlt::Producer producer(profile, "westley-xml", tmp);
+    //"<mlt><playlist><producer resource=\"" + url.path() + "\" /></playlist></mlt>");
+    //Mlt::Producer producer(profile, "xml-string", tmp);
     Mlt::Producer *producer = new Mlt::Producer(profile, tmp);
     delete[] tmp;
 
@@ -296,13 +298,13 @@ QPixmap KThumb::getImage(QDomElement xml, int frame, int width, int height) {
     Mlt::Profile profile((char*) KdenliveSettings::current_profile().data());
     QPixmap pix(width, height);
     QDomDocument doc;
-    QDomElement westley = doc.createElement("westley");
+    QDomElement mlt = doc.createElement("mlt");
     QDomElement play = doc.createElement("playlist");
-    doc.appendChild(westley);
-    westley.appendChild(play);
+    doc.appendChild(mlt);
+    mlt.appendChild(play);
     play.appendChild(doc.importNode(xml, true));
     char *tmp = Render::decodedString(doc.toString());
-    Mlt::Producer producer(profile, "westley-xml", tmp);
+    Mlt::Producer producer(profile, "xml-string", tmp);
     delete[] tmp;
 
     if (producer.is_blank()) {
index 7d6d493d1fe663c3879e65025964e9f3a0c1033d..19161222c4d8b2f86f18cf51aa2e6d072c6b0f09 100644 (file)
@@ -1163,7 +1163,7 @@ void MainWindow::readOptions()
             //Add new settings from 0.7.1
             if (KdenliveSettings::defaultprojectfolder().isEmpty()) {
                 QString path = QDir::homePath() + "/kdenlive";
-                if (KStandardDirs::makeDir(path)  == false) kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path;
+                if (KStandardDirs::makeDir(path)  == false) kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path;
                 KdenliveSettings::setDefaultprojectfolder(path);
             }
         }
@@ -1441,24 +1441,24 @@ void MainWindow::parseProfiles(const QString &mltPath)
     //KdenliveSettings::setDefaulttmpfolder();
     if (!mltPath.isEmpty()) {
         KdenliveSettings::setMltpath(mltPath + "/share/mlt/profiles/");
-        KdenliveSettings::setRendererpath(mltPath + "/bin/inigo");
+        KdenliveSettings::setRendererpath(mltPath + "/bin/melt");
     }
 
     if (KdenliveSettings::mltpath().isEmpty()) {
         KdenliveSettings::setMltpath(QString(MLT_PREFIX) + QString("/share/mlt/profiles/"));
     }
-    if (KdenliveSettings::rendererpath().isEmpty()) {
-        QString inigoPath = QString(MLT_PREFIX) + QString("/bin/inigo");
-        if (!QFile::exists(inigoPath))
-            inigoPath = KStandardDirs::findExe("inigo");
-        else KdenliveSettings::setRendererpath(inigoPath);
+    if (KdenliveSettings::rendererpath().isEmpty() || KdenliveSettings::rendererpath().endsWith("inigo")) {
+        QString meltPath = QString(MLT_PREFIX) + QString("/bin/melt");
+        if (!QFile::exists(meltPath))
+            meltPath = KStandardDirs::findExe("melt");
+        KdenliveSettings::setRendererpath(meltPath);
     }
     QStringList profilesFilter;
     profilesFilter << "*";
     QStringList profilesList = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
 
     if (profilesList.isEmpty()) {
-        // Cannot find MLT path, try finding inigo
+        // Cannot find MLT path, try finding melt
         QString profilePath = KdenliveSettings::rendererpath();
         if (!profilePath.isEmpty()) {
             profilePath = profilePath.section('/', 0, -3);
@@ -1482,8 +1482,8 @@ void MainWindow::parseProfiles(const QString &mltPath)
     }
 
     if (KdenliveSettings::rendererpath().isEmpty()) {
-        // Cannot find the MLT inigo renderer, ask for location
-        KUrlRequesterDialog *getUrl = new KUrlRequesterDialog(QString(), i18n("Cannot find the inigo program required for rendering (part of Mlt)"), this);
+        // Cannot find the MLT melt renderer, ask for location
+        KUrlRequesterDialog *getUrl = new KUrlRequesterDialog(QString(), i18n("Cannot find the melt program required for rendering (part of Mlt)"), this);
         if (getUrl->exec() == QDialog::Rejected) {
             ::exit(0);
         }
@@ -1580,17 +1580,17 @@ void MainWindow::slotDoRender(const QStringList args, const QStringList overlay_
 
     KTemporaryFile temp;
     temp.setAutoRemove(false);
-    temp.setSuffix(".westley");
+    temp.setSuffix(".mlt");
     if (!scriptExport.isEmpty() || temp.open()) {
         if (KdenliveSettings::dropbframes()) {
             KdenliveSettings::setDropbframes(false);
             m_activeDocument->clipManager()->updatePreviewSettings();
-            if (!scriptExport.isEmpty()) m_projectMonitor->saveSceneList(scriptExport + ".westley");
+            if (!scriptExport.isEmpty()) m_projectMonitor->saveSceneList(scriptExport + ".mlt");
             else m_projectMonitor->saveSceneList(temp.fileName());
             KdenliveSettings::setDropbframes(true);
             m_activeDocument->clipManager()->updatePreviewSettings();
         } else {
-            if (!scriptExport.isEmpty()) m_projectMonitor->saveSceneList(scriptExport + ".westley");
+            if (!scriptExport.isEmpty()) m_projectMonitor->saveSceneList(scriptExport + ".mlt");
             else m_projectMonitor->saveSceneList(temp.fileName());
         }
 
@@ -1608,7 +1608,7 @@ void MainWindow::slotDoRender(const QStringList args, const QStringList overlay_
             if (videoPlayer.isEmpty()) KMessageBox::sorry(this, i18n("Cannot play video after rendering because the default video player application is not set.\nPlease define it in Kdenlive settings dialog."));
         }
         if (!QFile::exists(KdenliveSettings::rendererpath())) {
-            KMessageBox::sorry(this, i18n("Cannot find the inigo program required for rendering (part of Mlt)"));
+            KMessageBox::sorry(this, i18n("Cannot find the melt program required for rendering (part of Mlt)"));
             setRenderingProgress(dest, -3);
             return;
         }
@@ -2312,7 +2312,7 @@ void MainWindow::customEvent(QEvent* e)
 {
     if (e->type() == QEvent::User) {
         // The timeline playing position changed...
-        kDebug() << "RECEIVED JOG EVEMNT!!!";
+        kDebug() << "RECEIVED JOG EVEMNT!!!";
     }
 }
 void MainWindow::slotActivateEffectStackView()
@@ -2505,7 +2505,7 @@ void MainWindow::slotSaveZone(Render *render, QPoint zone)
     QLabel *label1 = new QLabel(i18n("Save clip zone as:"), this);
     QString path = m_activeDocument->projectFolder().path();
     path.append("/");
-    path.append("untitled.westley");
+    path.append("untitled.mlt");
     KUrlRequester *url = new KUrlRequester(KUrl(path), this);
     url->setFilter("video/mlt-playlist");
     QLabel *label2 = new QLabel(i18n("Description:"), this);
@@ -2635,7 +2635,7 @@ void MainWindow::slotShowTimeline(bool show)
 
 void MainWindow::slotMaximizeCurrent(bool show)
 {
-    //TODO: is there a way to maximize current widget?
+    //TODO: is there a way to maximize current widget?
     //if (show == true)
     {
         m_timelineState = saveState();
index 57e612eba6adbf4c24a3e2ecb96bc415b4ff01c7..1994c6c8ed78ec0c853ba8e1817d434f91cb8713 100644 (file)
@@ -45,13 +45,13 @@ MarkerDialog::MarkerDialog(DocClipBase *clip, CommentedTime t, Timecode tc, cons
         m_profile = new Mlt::Profile((char*) KdenliveSettings::current_profile().data());
         m_dar = m_profile->dar();
         QDomDocument doc;
-        QDomElement westley = doc.createElement("westley");
-        QDomElement play = doc.createElement("playlist");
-        doc.appendChild(westley);
-        westley.appendChild(play);
+        QDomElement mlt = doc.createElement("mlt");
+        QDomElement play = doc.createElement("mlt");
+        doc.appendChild(mlt);
+        mlt.appendChild(play);
         play.appendChild(doc.importNode(clip->toXML(), true));
         //char *tmp = doc.toString().toUtf8().data();
-        m_producer = new Mlt::Producer(*m_profile, "westley-xml", doc.toString().toUtf8().data());
+        m_producer = new Mlt::Producer(*m_profile, "xml-string", doc.toString().toUtf8().data());
         //delete[] tmp;
 
         QPixmap p((int)(100 * m_dar), 100);
index 571fb884d75abb273fd23653c0f36e93785b6ddc..a4db4461b66d1aea53b33f2a739e6b505e1be176 100644 (file)
@@ -697,10 +697,10 @@ void Monitor::slotOpenFile(const QString &file)
     if (render == NULL) return;
     activateMonitor();
     QDomDocument doc;
-    QDomElement westley = doc.createElement("westley");
-    doc.appendChild(westley);
+    QDomElement mlt = doc.createElement("mlt");
+    doc.appendChild(mlt);
     QDomElement prod = doc.createElement("producer");
-    westley.appendChild(prod);
+    mlt.appendChild(prod);
     prod.setAttribute("mlt_service", "avformat");
     prod.setAttribute("resource", file);
     render->setSceneList(doc, 0);
index 110f4122c6fa6713b054e7b6905e19e4e048edb2..0ef31973056f3c4b109a1065234f9c710afed426 100644 (file)
@@ -66,7 +66,7 @@ Render::Render(const QString & rendererName, int winid, int /* extid */, QWidget
         m_blackClip(NULL),
         m_winid(winid)
 {
-    kDebug() << "//////////  USING PROFILE: " << (char*)KdenliveSettings::current_profile().toUtf8().data();
+    kDebug() << "//////////  USING PROFILE: " << (char*)KdenliveSettings::current_profile().toUtf8().data();
     m_refreshTimer = new QTimer(this);
     connect(m_refreshTimer, SIGNAL(timeout()), this, SLOT(refresh()));
 
@@ -195,7 +195,7 @@ int Render::resetProfile()
     setSceneList(scene, pos);
 
     /*char *tmp = decodedString(scene);
-    Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile , "westley-xml", tmp);
+    Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile , "xml-string", tmp);
     delete[] tmp;
     m_mltProducer = producer;
     m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black");
@@ -499,17 +499,17 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId, bo
     }
     if (xml.attribute("type").toInt() == COLOR) {
         char *tmp = decodedString("colour:" + xml.attribute("colour"));
-        producer = new Mlt::Producer(*m_mltProfile, "fezzik", tmp);
+        producer = new Mlt::Producer(*m_mltProfile, 0, tmp);
         delete[] tmp;
     } else if (url.isEmpty()) {
         QDomDocument doc;
-        QDomElement westley = doc.createElement("westley");
+        QDomElement mlt = doc.createElement("mlt");
         QDomElement play = doc.createElement("playlist");
-        doc.appendChild(westley);
-        westley.appendChild(play);
+        doc.appendChild(mlt);
+        mlt.appendChild(play);
         play.appendChild(doc.importNode(xml, true));
         char *tmp = decodedString(doc.toString());
-        producer = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp);
+        producer = new Mlt::Producer(*m_mltProfile, "xml-string", tmp);
         delete[] tmp;
     } else {
         char *tmp = decodedString(url.path());
@@ -593,7 +593,7 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId, bo
         filePropertyMap["aspect_ratio"] = frame->get("aspect_ratio");
 
         if (frame->get_int("test_image") == 0) {
-            if (url.path().endsWith(".westley") || url.path().endsWith(".kdenlive")) {
+            if (url.path().endsWith(".mlt") || url.path().endsWith(".westley") || url.path().endsWith(".kdenlive")) {
                 filePropertyMap["type"] = "playlist";
                 metadataPropertyMap["comment"] = QString::fromUtf8(producer->get("title"));
             } else if (frame->get_int("test_audio") == 0)
@@ -670,11 +670,11 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId, bo
         }
 
         if (KdenliveSettings::dropbframes()) {
-            kDebug() << "// LOOKING FOR H264 on: " << default_video;
+            kDebug() << "// LOOKING FOR H264 on: " << default_video;
             snprintf(property, sizeof(property), "meta.media.%d.codec.name", default_video);
             kDebug() << "PROP: " << property << " = " << producer->get(property);
             if (producer->get(property) && strcmp(producer->get(property), "h264") == 0) {
-                kDebug() << "// GOT H264 CLIP, SETTING FAST PROPS";
+                kDebug() << "// GOT H264 CLIP, SETTING FAST PROPS";
                 producer->set("skip_loop_filter", "all");
                 producer->set("skip_frame", "bidir");
             }
@@ -714,14 +714,14 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId, bo
 }
 
 
-/** Create the producer from the Westley QDomDocument */
+/** Create the producer from the MLT XML QDomDocument */
 #if 0
 void Render::initSceneList()
 {
     kDebug() << "--------  INIT SCENE LIST ------_";
     QDomDocument doc;
-    QDomElement westley = doc.createElement("westley");
-    doc.appendChild(westley);
+    QDomElement mlt = doc.createElement("mlt");
+    doc.appendChild(mlt);
     QDomElement prod = doc.createElement("producer");
     prod.setAttribute("resource", "colour");
     prod.setAttribute("colour", "red");
@@ -744,17 +744,17 @@ void Render::initSceneList()
     QDomElement playlist5 = doc.createElement("playlist");
     multitrack.appendChild(playlist5);
     tractor.appendChild(multitrack);
-    westley.appendChild(tractor);
+    mlt.appendChild(tractor);
     // kDebug()<<doc.toString();
     /*
-       QString tmp = QString("<westley><producer resource=\"colour\" colour=\"red\" id=\"red\" /><tractor><multitrack><playlist></playlist><playlist></playlist><playlist /><playlist /><playlist></playlist></multitrack></tractor></westley>");*/
+       QString tmp = QString("<mlt><producer resource=\"colour\" colour=\"red\" id=\"red\" /><tractor><multitrack><playlist></playlist><playlist></playlist><playlist /><playlist /><playlist></playlist></multitrack></tractor></mlt>");*/
     setSceneList(doc, 0);
 }
 #endif
 
 
 
-/** Create the producer from the Westley QDomDocument */
+/** Create the producer from the MLT XML QDomDocument */
 void Render::setProducer(Mlt::Producer *producer, int position)
 {
     if (m_winid == -1) return;
@@ -779,7 +779,7 @@ void Render::setProducer(Mlt::Producer *producer, int position)
     m_mltProducer->set("skip_loop_filter", "all");
         m_mltProducer->set("skip_frame", "bidir");
     }*/
-    if (!m_mltProducer || !m_mltProducer->is_valid()) kDebug() << " WARNING - - - - -INVALID PLAYLIST: ";
+    if (!m_mltProducer || !m_mltProducer->is_valid()) kDebug() << " WARNING - - - - -INVALID PLAYLIST: ";
 
     m_fps = m_mltProducer->get_fps();
     connectPlaylist();
@@ -792,13 +792,13 @@ void Render::setProducer(Mlt::Producer *producer, int position)
 
 
 
-/** Create the producer from the Westley QDomDocument */
+/** Create the producer from the MLT XML QDomDocument */
 void Render::setSceneList(QDomDocument list, int position)
 {
     setSceneList(list.toString(), position);
 }
 
-/** Create the producer from the Westley QDomDocument */
+/** Create the producer from the MLT XML QDomDocument */
 void Render::setSceneList(QString playlist, int position)
 {
     if (m_winid == -1) return;
@@ -827,7 +827,7 @@ void Render::setSceneList(QString playlist, int position)
 
     blockSignals(true);
     char *tmp = decodedString(playlist);
-    m_mltProducer = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp);
+    m_mltProducer = new Mlt::Producer(*m_mltProfile, "xml-string", tmp);
 
     if (!m_mltProducer || !m_mltProducer->is_valid()) {
         kDebug() << " WARNING - - - - -INVALID PLAYLIST: " << tmp;
@@ -842,7 +842,7 @@ void Render::setSceneList(QString playlist, int position)
     delete m_osdInfo;
     QString attr = "attr_check";
     mlt_filter filter = mlt_factory_filter( "data_feed", (char*) attr.ascii() );
-    mlt_properties_set_int( MLT_FILTER_PROPERTIES( filter ), "_fezzik", 1 );
+    mlt_properties_set_int( MLT_FILTER_PROPERTIES( filter ), "_loader", 1 );
     mlt_producer_attach( m_mltProducer->get_producer(), filter );
     mlt_filter_close( filter );
 
@@ -876,20 +876,20 @@ void Render::setSceneList(QString playlist, int position)
     //if (position != 0) emit rendererPosition(position);
 }
 
-/** Create the producer from the Westley QDomDocument */
+/** Create the producer from the MLT XML QDomDocument */
 const QString Render::sceneList()
 {
     QString playlist;
-    Mlt::Consumer westleyConsumer(*m_mltProfile , "westley:kdenlive_playlist");
+    Mlt::Consumer xmlConsumer(*m_mltProfile , "xml:kdenlive_playlist");
     m_mltProducer->optimise();
-    westleyConsumer.set("terminate_on_pause", 1);
+    xmlConsumer.set("terminate_on_pause", 1);
     Mlt::Producer prod(m_mltProducer->get_producer());
     bool split = m_isSplitView;
     if (split) slotSplitView(false);
-    westleyConsumer.connect(prod);
-    westleyConsumer.start();
-    while (!westleyConsumer.is_stopped()) {}
-    playlist = QString::fromUtf8(westleyConsumer.get("kdenlive_playlist"));
+    xmlConsumer.connect(prod);
+    xmlConsumer.start();
+    while (!xmlConsumer.is_stopped()) {}
+    playlist = QString::fromUtf8(xmlConsumer.get("kdenlive_playlist"));
     if (split) slotSplitView(true);
     return playlist;
 }
@@ -901,8 +901,8 @@ bool Render::saveSceneList(QString path, QDomElement kdenliveData)
     doc.setContent(sceneList(), false);
     if (!kdenliveData.isNull()) {
         // add Kdenlive specific tags
-        QDomNode wes = doc.elementsByTagName("westley").at(0);
-        wes.appendChild(doc.importNode(kdenliveData, true));
+        QDomNode mlt = doc.elementsByTagName("mlt").at(0);
+        mlt.appendChild(doc.importNode(kdenliveData, true));
     }
     if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
         kWarning() << "//////  ERROR writing to file: " << path;
@@ -921,11 +921,11 @@ bool Render::saveSceneList(QString path, QDomElement kdenliveData)
 void Render::saveZone(KUrl url, QString desc, QPoint zone)
 {
     kDebug() << "// SAVING CLIP ZONE, RENDER: " << m_name;
-    char *tmppath = decodedString("westley:" + url.path());
-    Mlt::Consumer westleyConsumer(*m_mltProfile , tmppath);
+    char *tmppath = decodedString("xml:" + url.path());
+    Mlt::Consumer xmlConsumer(*m_mltProfile , tmppath);
     m_mltProducer->optimise();
     delete[] tmppath;
-    westleyConsumer.set("terminate_on_pause", 1);
+    xmlConsumer.set("terminate_on_pause", 1);
     if (m_name == "clip") {
         Mlt::Producer *prod = m_mltProducer->cut(zone.x(), zone.y());
         tmppath = decodedString(desc);
@@ -933,7 +933,7 @@ void Render::saveZone(KUrl url, QString desc, QPoint zone)
         list.insert_at(0, prod, 0);
         list.set("title", tmppath);
         delete[] tmppath;
-        westleyConsumer.connect(list);
+        xmlConsumer.connect(list);
 
     } else {
         //TODO: not working yet, save zone from timeline
@@ -945,10 +945,10 @@ void Render::saveZone(KUrl url, QString desc, QPoint zone)
         tmppath = decodedString(desc);
         //prod->set("title", tmppath);
         delete[] tmppath;
-        westleyConsumer.connect(*p1); //list);
+        xmlConsumer.connect(*p1); //list);
     }
 
-    westleyConsumer.start();
+    xmlConsumer.start();
 }
 
 double Render::fps() const
@@ -1358,12 +1358,12 @@ void Render::mltCheckLength()
 void Render::mltInsertClip(ItemInfo info, QDomElement element, Mlt::Producer *prod)
 {
     if (!m_mltProducer) {
-        kDebug() << "PLAYLIST NOT INITIALISED //////";
+        kDebug() << "PLAYLIST NOT INITIALISED //////";
         return;
     }
     Mlt::Producer parentProd(m_mltProducer->parent());
     if (parentProd.get_producer() == NULL) {
-        kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
+        kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
         return;
     }
 
@@ -1544,12 +1544,12 @@ bool Render::mltRemoveClip(int track, GenTime position)
 int Render::mltGetSpaceLength(const GenTime pos, int track, bool fromBlankStart)
 {
     if (!m_mltProducer) {
-        kDebug() << "PLAYLIST NOT INITIALISED //////";
+        kDebug() << "PLAYLIST NOT INITIALISED //////";
         return -1;
     }
     Mlt::Producer parentProd(m_mltProducer->parent());
     if (parentProd.get_producer() == NULL) {
-        kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
+        kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
         return -1;
     }
 
@@ -1568,12 +1568,12 @@ int Render::mltGetSpaceLength(const GenTime pos, int track, bool fromBlankStart)
 int Render::mltTrackDuration(int track)
 {
     if (!m_mltProducer) {
-        kDebug() << "PLAYLIST NOT INITIALISED //////";
+        kDebug() << "PLAYLIST NOT INITIALISED //////";
         return -1;
     }
     Mlt::Producer parentProd(m_mltProducer->parent());
     if (parentProd.get_producer() == NULL) {
-        kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
+        kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
         return -1;
     }
 
@@ -1587,12 +1587,12 @@ int Render::mltTrackDuration(int track)
 void Render::mltInsertSpace(QMap <int, int> trackClipStartList, QMap <int, int> trackTransitionStartList, int track, const GenTime duration, const GenTime timeOffset)
 {
     if (!m_mltProducer) {
-        kDebug() << "PLAYLIST NOT INITIALISED //////";
+        kDebug() << "PLAYLIST NOT INITIALISED //////";
         return;
     }
     Mlt::Producer parentProd(m_mltProducer->parent());
     if (parentProd.get_producer() == NULL) {
-        kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
+        kDebug() << "PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
         return;
     }
     //kDebug()<<"// CLP STRT LST: "<<trackClipStartList;
@@ -1622,7 +1622,7 @@ void Render::mltInsertSpace(QMap <int, int> trackClipStartList, QMap <int, int>
             }
             trackPlaylist.consolidate_blanks(0);
         }
-        // now move transitions
+        // now move transitions
         mlt_service serv = m_mltProducer->parent().get_service();
         mlt_service nextservice = mlt_service_get_producer(serv);
         mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice);
@@ -1681,7 +1681,7 @@ void Render::mltInsertSpace(QMap <int, int> trackClipStartList, QMap <int, int>
             }
             trackNb--;
         }
-        // now move transitions
+        // now move transitions
         mlt_service serv = m_mltProducer->parent().get_service();
         mlt_service nextservice = mlt_service_get_producer(serv);
         mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice);
@@ -1857,7 +1857,7 @@ bool Render::mltRemoveEffect(int track, GenTime position, QString index, bool up
             if (clipService.detach(*filter) == 0) success = true;
             kDebug() << " / / / DLEETED EFFECT: " << ct;
         } else if (updateIndex) {
-            // Adjust the other effects index
+            // Adjust the other effects index
             if (QString(filter->get("kdenlive_ix")).toInt() > index.toInt()) filter->set("kdenlive_ix", QString(filter->get("kdenlive_ix")).toInt() - 1);
             ct++;
         } else ct++;
@@ -2028,7 +2028,7 @@ bool Render::mltEditEffect(int track, GenTime position, EffectsParameterList par
     //int clipIndex = trackPlaylist.get_clip_index_at(position.frames(m_fps));
     Mlt::Producer *clip = trackPlaylist.get_clip_at((int) position.frames(m_fps));
     if (!clip) {
-        kDebug() << "WARINIG, CANNOT FIND CLIP ON track: " << track << ", AT POS: " << position.frames(m_fps);
+        kDebug() << "WARINIG, CANNOT FIND CLIP ON track: " << track << ", AT POS: " << position.frames(m_fps);
         return false;
     }
     Mlt::Service clipService(clip->get_service());
@@ -2045,7 +2045,7 @@ bool Render::mltEditEffect(int track, GenTime position, EffectsParameterList par
 
     if (!filter) {
         kDebug() << "WARINIG, FILTER FOR EDITING NOT FOUND, ADDING IT!!!!!";
-        // filter was not found, it was probably a disabled filter, so add it to the correct place...
+        // filter was not found, it was probably a disabled filter, so add it to the correct place...
         int ct = 0;
         filter = clipService.filter(ct);
         QList <Mlt::Filter *> filtersList;
@@ -2082,7 +2082,7 @@ bool Render::mltEditEffect(int track, GenTime position, EffectsParameterList par
 void Render::mltMoveEffect(int track, GenTime position, int oldPos, int newPos)
 {
 
-    kDebug() << "MOVING EFFECT FROM " << oldPos << ", TO: " << newPos;
+    kDebug() << "MOVING EFFECT FROM " << oldPos << ", TO: " << newPos;
     Mlt::Service service(m_mltProducer->parent().get_service());
 
     Mlt::Tractor tractor(service);
@@ -2091,7 +2091,7 @@ void Render::mltMoveEffect(int track, GenTime position, int oldPos, int newPos)
     //int clipIndex = trackPlaylist.get_clip_index_at(position.frames(m_fps));
     Mlt::Producer *clip = trackPlaylist.get_clip_at((int) position.frames(m_fps));
     if (!clip) {
-        kDebug() << "WARINIG, CANNOT FIND CLIP ON track: " << track << ", AT POS: " << position.frames(m_fps);
+        kDebug() << "WARINIG, CANNOT FIND CLIP ON track: " << track << ", AT POS: " << position.frames(m_fps);
         return;
     }
     Mlt::Service clipService(clip->get_service());
@@ -2191,7 +2191,7 @@ bool Render::mltResizeClipEnd(ItemInfo info, GenTime clipDuration)
     if (diff > 0) {
         // clip was made longer, trim next blank if there is one.
         if (clipIndex < trackPlaylist.count()) {
-            // If this is not the last clip in playlist
+            // If this is not the last clip in playlist
             if (trackPlaylist.is_blank(clipIndex)) {
                 int blankStart = trackPlaylist.clip_start(clipIndex);
                 int blankDuration = trackPlaylist.clip_length(clipIndex) - 1;
@@ -2508,7 +2508,7 @@ bool Render::mltMoveTransition(QString type, int startTrack, int newTrack, int n
         if (resource == type && startTrack == currentTrack && currentIn <= old_pos && currentOut >= old_pos) {
             mlt_transition_set_in_and_out(tr, new_in, new_out);
             if (newTrack - startTrack != 0) {
-                kDebug() << "///// TRANSITION CHANGE TRACK. CUrrent (b): " << currentTrack << 'x' << mlt_transition_get_a_track(tr) << ", NEw: " << newTrack << 'x' << newTransitionTrack;
+                kDebug() << "///// TRANSITION CHANGE TRACK. CUrrent (b): " << currentTrack << 'x' << mlt_transition_get_a_track(tr) << ", NEw: " << newTrack << 'x' << newTransitionTrack;
 
                 mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr);
                 mlt_properties_set_int(properties, "a_track", newTransitionTrack);
@@ -2639,7 +2639,7 @@ QMap<QString, QString> Render::mltGetTransitionParamsFromXml(QDomElement xml)
     for (int i = 0;i < attribs.count();i++) {
         QDomElement e = attribs.item(i).toElement();
         QString name = e.attribute("name");
-        //kDebug()<<"-- TRANSITION PARAM: "<<name<<" = "<< e.attribute("name")<<" / " << e.attribute("value");
+        //kDebug()<<"-- TRANSITION PARAM: "<<name<<" = "<< e.attribute("name")<<" / " << e.attribute("value");
         map[name] = e.attribute("default");
         if (!e.attribute("value").isEmpty()) {
             map[name] = e.attribute("value");
@@ -2846,8 +2846,8 @@ bool Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in,
 void Render::mltSavePlaylist()
 {
     kWarning() << "// UPDATING PLAYLIST TO DISK++++++++++++++++";
-    Mlt::Consumer fileConsumer(*m_mltProfile, "westley");
-    fileConsumer.set("resource", "/tmp/playlist.westley");
+    Mlt::Consumer fileConsumer(*m_mltProfile, "xml");
+    fileConsumer.set("resource", "/tmp/playlist.mlt");
 
     Mlt::Service service(m_mltProducer->get_service());
 
index 6e28f84301d72d21a16635e372598e43ccc37236..7b624a31033e08aa0a9264477a965d40b3f5f695 100644 (file)
@@ -468,7 +468,7 @@ void RenderWidget::slotDeleteProfile(bool refresh)
     /*
     QString edit = m_view.size_list->currentItem()->data(EditableRole).toString();
     if (!edit.endsWith("customprofiles.xml")) {
-        // This is a KNewStuff installed file, process through KNS
+        // This is a KNewStuff installed file, process through KNS
         KNS::Engine engine(0);
         if (engine.init("kdenlive_render.knsrc")) {
             KNS::Entry::List entries;
@@ -602,7 +602,7 @@ void RenderWidget::slotExport(bool scriptExport)
         QString filterFile = KStandardDirs::locate("appdata", "metadata.properties");
         overlayargs << "meta.attr.timecode=1" << "meta.attr.timecode.markup=#timecode";
         overlayargs << "-attach" << "data_feed:attr_check" << "-attach";
-        overlayargs << "data_show:" + filterFile << "_fezzik=1" << "dynamic=1";
+        overlayargs << "data_show:" + filterFile << "_loader=1" << "dynamic=1";
     }
     double startPos = -1;
     double endPos = -1;
@@ -1290,7 +1290,7 @@ void RenderWidget::parseScriptFiles()
     m_view.scripts_list->clear();
 
     QTreeWidgetItem *item;
-    // List the project scripts
+    // List the project scripts
     QStringList scriptFiles = QDir(m_projectFolder + "/scripts").entryList(scriptsFilter, QDir::Files);
     for (int i = 0; i < scriptFiles.size(); ++i) {
         KUrl scriptpath(m_projectFolder + "/scripts/" + scriptFiles.at(i));
@@ -1365,7 +1365,7 @@ void RenderWidget::slotDeleteScript()
     QTreeWidgetItem *item = m_view.scripts_list->currentItem();
     if (item) {
         QString path = item->data(0, Qt::UserRole + 1).toString();
-        KIO::NetAccess::del(path + ".westley", this);
+        KIO::NetAccess::del(path + ".mlt", this);
         KIO::NetAccess::del(path, this);
         parseScriptFiles();
     }
index 59ddbea1eb18f74c0e35ea177d0aa43ca8ddb49a..0fe426c8550cdc2fbd67be5c9b7ee38e498ce26a 100644 (file)
@@ -209,7 +209,7 @@ void TrackView::parseDocument(QDomDocument doc)
 
             trackduration = slotAddProjectTrack(pos, p, m_doc->isTrackLocked(i - 1));
             pos--;
-            //kDebug() << " PRO DUR: " << trackduration << ", TRACK DUR: " << duration;
+            //kDebug() << " PRO DUR: " << trackduration << ", TRACK DUR: " << duration;
             if (trackduration > duration) duration = trackduration;
         } else {
             // background black track
@@ -243,10 +243,10 @@ void TrackView::parseDocument(QDomDocument doc)
             p = transitionparams.item(k).toElement();
             if (!p.isNull()) {
                 QString paramName = p.attribute("name");
-                // do not add audio mixing transitions
+                // do not add audio mixing transitions
                 if (paramName == "internal_added" && p.text() == "237") {
                     transitionAdd = false;
-                    //kDebug() << "//  TRANSITRION " << i << " IS NOT VALID (INTERN ADDED)";
+                    //kDebug() << "//  TRANSITRION " << i << " IS NOT VALID (INTERN ADDED)";
                     //break;
                 } else if (paramName == "a_track") a_track = p.text().toInt();
                 else if (paramName == "b_track") b_track = p.text().toInt();
@@ -451,14 +451,14 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
             } else id = id.section('_', 0, 0);
             DocClipBase *clip = m_doc->clipManager()->getClipById(id);
             if (clip == NULL) {
-                // The clip in playlist was not listed in the kdenlive producers,
+                // The clip in playlist was not listed in the kdenlive producers,
                 // something went wrong, repair required.
                 kWarning() << "CANNOT INSERT CLIP " << id;
 
                 clip = getMissingProducer(id);
                 if (!clip) {
                     // We cannot find the producer, something is really wrong, add
-                    // placeholder color clip
+                    // placeholder color clip
                     QDomDocument doc;
                     QDomElement producerXml = doc.createElement("producer");
                     doc.appendChild(producerXml);
@@ -487,7 +487,7 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
                 clipinfo.endPos = clipinfo.startPos + GenTime(out - in + 1, m_doc->fps());
                 clipinfo.cropStart = GenTime(in, m_doc->fps());
                 clipinfo.track = ix;
-                //kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps();
+                //kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps();
                 ClipItem *item = new ClipItem(clip, clipinfo, m_doc->fps(), speed, false);
                 if (idString.endsWith("_video")) item->setVideoOnly(true);
                 else if (idString.endsWith("_audio")) item->setAudioOnly(true);
@@ -695,7 +695,7 @@ DocClipBase *TrackView::getMissingProducer(const QString id) const
             break;
         }
     }
-    // prepend westley document root if no path in clip resource and not a color clip
+    // prepend MLT XML document root if no path in clip resource and not a color clip
     if (!resource.contains('/') && !resource.startsWith("0x")) resource.prepend(docRoot);
     DocClipBase *missingClip = NULL;
     if (!resource.isEmpty())
index 9673b08cf6108f91a766f96dfa5e7b62ded73b5f..2b448004f7625bb14b0fabae2829a668bf61f878 100644 (file)
@@ -40,7 +40,7 @@
        <item row="1" column="0" >
         <widget class="QLabel" name="label_2" >
          <property name="text" >
-          <string>Inigo path</string>
+          <string>Melt path</string>
          </property>
         </widget>
        </item>
index 9ef7ad00e07f51efc9cdc7e1a126646cf00f474e..3717ff596168a964ddf92a979f018b560999761b 100644 (file)
@@ -31,7 +31,7 @@
 #include <QXmlStreamWriter>
 #include <QTimer>
 
-const double recommendedMltVersion = 38;
+const double recommendedMltVersion = 40;
 
 Wizard::Wizard(bool upgrade, QWidget *parent) :
         QWizard(parent)
@@ -126,17 +126,17 @@ void Wizard::checkMltComponents()
 
     QTreeWidgetItem *mltitem = new QTreeWidgetItem(m_mltCheck.programList);
 
-    QTreeWidgetItem *inigoitem = new QTreeWidgetItem(m_mltCheck.programList, QStringList() << QString() << i18n("Inigo") + " (" + KdenliveSettings::rendererpath() + ')');
-    inigoitem->setData(1, Qt::UserRole, i18n("Required for rendering (part of MLT package)"));
-    inigoitem->setSizeHint(0, itemSize);
-    inigoitem->setIcon(0, m_okIcon);
+    QTreeWidgetItem *meltitem = new QTreeWidgetItem(m_mltCheck.programList, QStringList() << QString() << i18n("Melt") + " (" + KdenliveSettings::rendererpath() + ')');
+    meltitem->setData(1, Qt::UserRole, i18n("Required for rendering (part of MLT package)"));
+    meltitem->setSizeHint(0, itemSize);
+    meltitem->setIcon(0, m_okIcon);
 
     // Check MLT's installed producers
     QProcess checkProcess;
     checkProcess.start(KdenliveSettings::rendererpath(), QStringList() << "-query" << "producer");
     if (!checkProcess.waitForStarted()) {
-        inigoitem->setIcon(0, m_badIcon);
-        inigoitem->setData(1, Qt::UserRole, i18n("Error starting MLT's command line player (inigo)"));
+        meltitem->setIcon(0, m_badIcon);
+        meltitem->setData(1, Qt::UserRole, i18n("Error starting MLT's command line player (melt)"));
         button(QWizard::NextButton)->setEnabled(false);
     } else {
         checkProcess.waitForFinished();
@@ -157,7 +157,7 @@ void Wizard::checkMltComponents()
             QString mltVersion;
             QString exepath = KStandardDirs::findExe("pkg-config");
             if (!exepath.isEmpty()) {
-                checkProcess.start(exepath, QStringList() << "--variable=version" << "mlt-framework");
+                checkProcess.start(exepath, QStringList() << "--variable=version" << "mlt++");
                 if (!checkProcess.waitForStarted()) {
                     kDebug() << "// Error querying MLT's version";
                 } else {
@@ -459,7 +459,7 @@ void Wizard::adjustSettings()
         KdenliveSettings::setDefault_profile(selectedProfile);
     }
     QString path = m_extra.projectfolder->url().path();
-    if (KStandardDirs::makeDir(path) == false) kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path;
+    if (KStandardDirs::makeDir(path) == false) kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path;
     KdenliveSettings::setDefaultprojectfolder(path);
 
 }
@@ -473,7 +473,7 @@ void Wizard::slotCheckMlt()
     /*QProcess checkProcess;
     checkProcess.start(KdenliveSettings::rendererpath(), QStringList() << "-query" << "producer");
     if (!checkProcess.waitForStarted())
-        errorMessage.append(i18n("Error starting MLT's command line player (inigo)") + ".\n");
+        errorMessage.append(i18n("Error starting MLT's command line player (melt)") + ".\n");
 
     checkProcess.waitForFinished();
 
@@ -483,7 +483,7 @@ void Wizard::slotCheckMlt()
     QProcess checkProcess2;
     checkProcess2.start(KdenliveSettings::rendererpath(), QStringList() << "-query" << "consumer");
     if (!checkProcess2.waitForStarted())
-        errorMessage.append(i18n("Error starting MLT's command line player (inigo).") + '\n');
+        errorMessage.append(i18n("Error starting MLT's command line player (melt).") + '\n');
 
     checkProcess2.waitForFinished();
 
index f8ee646e29e93428ce538dc156835934f747da67..9f00782eb229506692ddd4f33f0d2c573492398a 100644 (file)
 extern "C"
 {
     KDE_EXPORT ThumbCreator *new_creator() {
-        return new WestleyPreview;
+        return new MltPreview;
     }
 }
 
-WestleyPreview::WestleyPreview() :
+MltPreview::MltPreview() :
         QObject(),
         ThumbCreator(),
-        m_inigoprocess(0),
+        m_meltProcess(0),
         m_rand(0)
 {
 }
 
-WestleyPreview::~WestleyPreview()
+MltPreview::~MltPreview()
 {
     delete m_rand;
-    delete m_inigoprocess;
+    delete m_meltProcess;
 }
 
-bool WestleyPreview::startAndWaitProcess(const QStringList &args)
+bool MltPreview::startAndWaitProcess(const QStringList &args)
 {
-    kDebug(DBG_AREA) << "westleypreview: starting process with args: " << args << endl;
-    m_inigoprocess->start(args.join(" "));
-    if (! m_inigoprocess->waitForStarted()) {
-        kDebug(DBG_AREA) << "westleypreview: PROCESS NOT STARTED!!! exiting\n";
+    kDebug(DBG_AREA) << "MltPreview: starting process with args: " << args << endl;
+    m_meltProcess->start(args.join(" "));
+    if (! m_meltProcess->waitForStarted()) {
+        kDebug(DBG_AREA) << "MltPreview: PROCESS NOT STARTED!!! exiting\n";
         return false;
     }
-    if (! m_inigoprocess->waitForFinished()) {
-        kDebug(DBG_AREA) << "westleypreview: PROCESS DIDN'T FINISH!! exiting\n";
-        m_inigoprocess->close();
+    if (! m_meltProcess->waitForFinished()) {
+        kDebug(DBG_AREA) << "MltPreview: PROCESS DIDN'T FINISH!! exiting\n";
+        m_meltProcess->close();
         return false;
     }
-    kDebug() << "westleypreview: process started and ended correctly\n";
+    kDebug() << "MltPreview: process started and ended correctly\n";
     return true;
 }
 
-bool WestleyPreview::create(const QString &path, int width, int /*height*/, QImage &img)
+bool MltPreview::create(const QString &path, int width, int /*height*/, QImage &img)
 {
     QFileInfo fi(path);
-    m_playerBin = KStandardDirs::findExe("inigo");
+    m_playerBin = KStandardDirs::findExe("melt");
     if (m_playerBin.isEmpty()) {
-        kDebug(DBG_AREA) << "westleypreview: inigo not found, exiting.\n";
+        kDebug(DBG_AREA) << "MltPreview: melt not found, exiting.\n";
         return false;
     }
 
@@ -91,7 +91,7 @@ bool WestleyPreview::create(const QString &path, int width, int /*height*/, QIma
     fileinfo.fps = 0;
 
     m_rand = new KRandomSequence(QDateTime::currentDateTime().toTime_t());
-    m_inigoprocess = new QProcess();
+    m_meltProcess = new QProcess();
     KUrl furl(path);
     kDebug(DBG_AREA) << "videopreview: url=" << furl << "; local:" << furl.isLocalFile() << endl;
     fileinfo.towidth = width;
@@ -100,7 +100,7 @@ bool WestleyPreview::create(const QString &path, int width, int /*height*/, QIma
 //    if(furl.isLocalFile())
 //    {
     QStringList args;
-    //TODO: modify inigo so that it can return some infos about a westley clip (duration, track number,fps,...)
+    //TODO: modify melt so that it can return some infos about a MLT XML clip (duration, track number,fps,...)
     // without actually playing the file
     /*
         args << playerBin << QString("\"" + path + "\"") << "-file-info";
@@ -108,7 +108,7 @@ bool WestleyPreview::create(const QString &path, int width, int /*height*/, QIma
         kDebug(DBG_AREA) << "videopreview: starting process: --_" << " " << args.join(" ") << "_--\n";
         if (! startAndWaitProcess(args) ) return NULL;
 
-        QString information=QString(inigoprocess->readAllStandardOutput() );
+        QString information=QString(meltProcess->readAllStandardOutput() );
         QRegExp findInfos("ID_VIDEO_FPS=([\\d]*).*ID_LENGTH=([\\d]*).*");
         if(findInfos.indexIn( information) == -1 )
         {
@@ -141,7 +141,7 @@ bool WestleyPreview::create(const QString &path, int width, int /*height*/, QIma
     return true;
 }
 
-QImage WestleyPreview::getFrame(const QString &path)
+QImage MltPreview::getFrame(const QString &path)
 {
     QStringList args;
     const int START = 25;
@@ -163,7 +163,7 @@ QImage WestleyPreview::getFrame(const QString &path)
 }
 
 
-uint WestleyPreview::imageVariance(QImage image)
+uint MltPreview::imageVariance(QImage image)
 {
     uint delta = 0;
     uint avg = 0;
@@ -186,7 +186,7 @@ uint WestleyPreview::imageVariance(QImage image)
     return delta / STEPS;
 }
 
-ThumbCreator::Flags WestleyPreview::flags() const
+ThumbCreator::Flags MltPreview::flags() const
 {
     return None;
 }
index 80aff9c935a426fef37520ec3975eb1b68838aa0..f2501804fa9cfde407e56fe5f2b7b5a5f9abb938 100644 (file)
@@ -33,12 +33,12 @@ class QProcess;
 class KTempDir;
 class KRandomSequence;
 
-class WestleyPreview : public QObject, public ThumbCreator
+class MltPreview : public QObject, public ThumbCreator
 {
     Q_OBJECT
 public:
-    WestleyPreview();
-    virtual ~WestleyPreview();
+    MltPreview();
+    virtual ~MltPreview();
     virtual bool create(const QString &path, int width, int height, QImage &img);
     virtual Flags flags() const;
 
@@ -47,7 +47,7 @@ protected:
     static uint imageVariance(QImage image);
 
 private:
-    QProcess *m_inigoprocess;
+    QProcess *m_meltProcess;
     KRandomSequence *m_rand;
     QString m_playerBin;
     bool startAndWaitProcess(const QStringList &args);