]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
Merge branch 'master' into feature/pkey
[kdenlive] / src / docclipbase.cpp
index 693e4ecca2f2829fc62d73add95782907d46fb70..5f2f01a19d8a27248dcc4cc89b9e95e9d742c6c7 100644 (file)
@@ -41,7 +41,8 @@
 
 DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id) :
         QObject(),
-        m_audioFrameCache(),
+        lastSeekPosition(0),
+        audioFrameCache(),
         m_refcount(0),
         m_baseTrackProducers(),
         m_videoTrackProducers(),
@@ -73,6 +74,12 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QStrin
         }
     }
 
+    if (xml.hasAttribute("analysisdata")) {
+       QStringList adata = xml.attribute("analysisdata").split('#', QString::SkipEmptyParts);
+       for (int i = 0; i < adata.count(); i++)
+           m_analysisdata.insert(adata.at(i).section('?', 0, 0), adata.at(i).section('?', 1, 1));
+    }
+
     KUrl url = KUrl(xml.attribute("resource"));
     if (!m_properties.contains("file_hash") && !url.isEmpty()) getFileHash(url.path());
 
@@ -131,7 +138,7 @@ bool DocClipBase::hasAudioThumb() const
 
 void DocClipBase::slotClearAudioCache()
 {
-    m_audioFrameCache.clear();
+    audioFrameCache.clear();
     m_audioThumbCreated = false;
 }
 
@@ -255,6 +262,16 @@ QDomElement DocClipBase::toXML(bool hideTemporaryProperties) const
         }
         clip.setAttribute("cutzones", cuts.join(";"));
     }
+    QString adata;
+    if (!m_analysisdata.isEmpty()) {
+       QMapIterator<QString, QString> i(m_analysisdata);
+       while (i.hasNext()) {
+           i.next();
+           //WARNING: a ? and # separator is not a good idea
+           adata.append(i.key() + "?" + i.value() + "#");
+       }
+    }
+    clip.setAttribute("analysisdata", adata);
     //kDebug() << "/// CLIP XML: " << doc.toString();
     return doc.documentElement();
 }
@@ -268,7 +285,7 @@ void DocClipBase::setAudioThumbCreated(bool isDone)
 void DocClipBase::updateAudioThumbnail(const audioByteArray& data)
 {
     //kDebug() << "CLIPBASE RECIEDVED AUDIO DATA*********************************************";
-    m_audioFrameCache = data;
+    audioFrameCache = data;
     m_audioThumbCreated = true;
     emit gotAudioData();
 }
@@ -1262,7 +1279,18 @@ QImage DocClipBase::extractImage(int frame, int width, int height)
 void DocClipBase::setAnalysisData(const QString &name, const QString &data)
 {
     if (data.isEmpty()) m_analysisdata.remove(name);
-    else m_analysisdata.insert(name, data);
+    else {
+       if (m_analysisdata.contains(name)) {
+           int i = 1;
+           QString newname = name + " " + QString::number(i);
+           while (m_analysisdata.contains(newname)) {
+               i++;
+               newname = name + " " + QString::number(i);
+           }
+           m_analysisdata.insert(newname, data);
+       }
+       else m_analysisdata.insert(name, data);
+    }
 }
 
 QMap <QString, QString> DocClipBase::analysisData() const