]> git.sesse.net Git - kdenlive/blobdiff - src/clipitem.cpp
first step in fixing keyframe issue
[kdenlive] / src / clipitem.cpp
index 1aa2b203dcbd674b8ffb9a69edc65ad7d9c08e57..7c6cac2b976c476bb55a54a4c29843b530ff78fe 100644 (file)
@@ -190,7 +190,7 @@ void ClipItem::initEffect(QDomElement effect, int diff)
             // Effect has a keyframe type parameter, we need to set the values
             if (e.attribute("keyframes").isEmpty()) {
                 e.setAttribute("keyframes", QString::number(cropStart().frames(m_fps)) + ':' + def + ';' + QString::number((cropStart() + cropDuration()).frames(m_fps) - 1) + ':' + def);
-                //kDebug() << "///// EFFECT KEYFRAMES INITED: " << e.attribute("keyframes");
+                kDebug() << "///// EFFECT KEYFRAMES INITED: " << e.attribute("keyframes");
                 //break;
             }
         }
@@ -1628,5 +1628,32 @@ bool ClipItem::isVideoOnly() const
     return m_videoOnly;
 }
 
+void ClipItem::insertKeyframe(QDomElement effect, const int pos, const int val)
+{
+    if (effect.attribute("disabled") == "1") return;
+    QDomNodeList params = effect.elementsByTagName("parameter");
+    for (int i = 0; i < params.count(); i++) {
+        QDomElement e = params.item(i).toElement();
+        QString kfr = e.attribute("keyframes");
+        const QStringList keyframes = kfr.split(';', QString::SkipEmptyParts);
+        QStringList newkfr;
+        bool added = false;
+        foreach(const QString &str, keyframes) {
+            int kpos = str.section(':', 0, 0).toInt();
+            double newval = str.section(':', 1, 1).toDouble();
+            if (kpos < pos) {
+                newkfr.append(str);
+            } else if (!added) {
+                if (i == 0) newkfr.append(QString::number(pos) + ":" + QString::number(val));
+                else newkfr.append(QString::number(pos) + ":" + QString::number(newval));
+                if (kpos > pos) newkfr.append(str);
+                added = true;
+            } else newkfr.append(str);
+        }
+        if (!added) newkfr.append(QString::number(pos) + ":" + QString::number(val));
+        e.setAttribute("keyframes", newkfr.join(";"));
+        kDebug() << "insert kfr: " << newkfr.join(";");
+    }
+}
 
 #include "clipitem.moc"