]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
Check for invalid producers / entries when opening document:
[kdenlive] / src / docclipbase.cpp
index ade305e491d3a808c189a716d6b3d4681bc3f53e..d60435fc67a298834d15b040f3f82e03d5927410 100644 (file)
@@ -3,7 +3,8 @@
                              -------------------
     begin                : Fri Apr 12 2002
     copyright            : (C) 2002 by Jason Wood
-    email                : jasonwood@blueyonder.co.uk
+    copyright            : (C) 2009 by Jean-Baptiste Mardelle
+
  ***************************************************************************/
 
 /***************************************************************************
  *                                                                         *
  ***************************************************************************/
 
-#include <QCryptographicHash>
-
-#include <KDebug>
 
-#include "kdenlivesettings.h"
 #include "docclipbase.h"
+#include "kdenlivesettings.h"
 #include "kthumb.h"
 #include "clipmanager.h"
 
+#include <KDebug>
+
+#include <QCryptographicHash>
+
 DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id):
         m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_properties(QMap <QString, QString> ()), audioFrameChache(QMap<int, QMap<int, QByteArray> > ()), m_baseTrackProducers(QList <Mlt::Producer *>()), m_snapMarkers(QList < CommentedTime > ())  {
     int type = xml.attribute("type").toInt();
@@ -36,13 +38,15 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QStrin
 
     KUrl url = KUrl(xml.attribute("resource"));
     if (!m_properties.contains("file_hash") && !url.isEmpty()) getFileHash(url.path());
-    int out = xml.attribute("out").toInt();
-    if (out != 0) {
-        setDuration(GenTime(out, KdenliveSettings::project_fps()));
+
+    if (xml.hasAttribute("duration")) {
+        setDuration(GenTime(xml.attribute("duration").toInt(), KdenliveSettings::project_fps()));
     } else {
-        out = xml.attribute("duration").toInt();
-        if (out != 0) setDuration(GenTime(out, KdenliveSettings::project_fps()));
+        int out = xml.attribute("out").toInt();
+        int in = xml.attribute("in").toInt();
+        setDuration(GenTime(out - in, KdenliveSettings::project_fps()));
     }
+
     if (!m_properties.contains("name")) m_properties.insert("name", url.fileName());
 
     //if (!url.isEmpty() && QFile::exists(url.path()))
@@ -118,7 +122,7 @@ bool DocClipBase::audioThumbCreated() const {
     return m_audioThumbCreated;
 }
 
-const QString DocClipBase::name() const {
+const QString DocClipBase::name() const {
 
     return m_properties.value("name");
 }
@@ -178,7 +182,7 @@ const GenTime &DocClipBase::duration() const {
     return m_duration;
 }
 
-const GenTime &DocClipBase::maxDuration() const {
+const GenTime DocClipBase::maxDuration() const {
     if (m_clipType == COLOR || m_clipType == IMAGE || m_clipType == TEXT || (m_clipType == SLIDESHOW &&  m_properties.value("loop") == "1")) {
         const GenTime dur(15000, KdenliveSettings::project_fps());
         return dur;
@@ -414,7 +418,6 @@ Mlt::Producer *DocClipBase::producer(int track) {
     }*/
     if (track == -1 || (m_clipType != AUDIO && m_clipType != AV)) {
         if (m_baseTrackProducers.count() == 0) return NULL;
-        int i;
         for (int i = 0; i < m_baseTrackProducers.count(); i++) {
             if (m_baseTrackProducers.at(i) != NULL)
                 return m_baseTrackProducers.at(i);