+ if (clipeffect.isNull()) {
+ kDebug() << "/// WARNING, EFFECT: " << effecttag << ": " << effectid << " not found, removing it from project";
+ m_documentErrors.append(i18n("Effect %1:%2 not found in MLT, it was removed from this project\n", effecttag, effectid));
+ elem.removeChild(effects.at(ix));
+ ix--;
+ } else {
+ QDomElement currenteffect = clipeffect.cloneNode().toElement();
+ currenteffect.setAttribute("kdenlive_ix", effectindex);
+ QDomNodeList clipeffectparams = currenteffect.childNodes();
+
+ if (MainWindow::videoEffects.hasKeyFrames(currenteffect)) {
+ //kDebug() << " * * * * * * * * * * ** CLIP EFF WITH KFR FND * * * * * * * * * * *";
+ // effect is key-framable, read all effects to retrieve keyframes
+ double factor;
+ QString starttag;
+ QString endtag;
+ QDomNodeList params = currenteffect.elementsByTagName("parameter");
+ for (int i = 0; i < params.count(); i++) {
+ QDomElement e = params.item(i).toElement();
+ if (e.attribute("type") == "keyframe") {
+ starttag = e.attribute("starttag", "start");
+ endtag = e.attribute("endtag", "end");
+ factor = e.attribute("factor", "1").toDouble();
+ break;
+ }
+ }
+ QString keyframes;
+ int effectin = effect.attribute("in").toInt();
+ int effectout = effect.attribute("out").toInt();
+ double startvalue;
+ double endvalue;
+ for (QDomNode n3 = effect.firstChild(); !n3.isNull(); n3 = n3.nextSibling()) {
+ // parse effect parameters
+ QDomElement effectparam = n3.toElement();
+ if (effectparam.attribute("name") == starttag)
+ startvalue = effectparam.text().toDouble() * factor;
+ if (effectparam.attribute("name") == endtag)
+ endvalue = effectparam.text().toDouble() * factor;
+ }
+ // add first keyframe
+ keyframes.append(QString::number(effectin) + ":" + QString::number(startvalue) + ";" + QString::number(effectout) + ":" + QString::number(endvalue) + ";");
+ QDomNode lastParsedEffect;
+ ix++;
+ QDomNode n2 = effects.at(ix);
+ bool continueParsing = true;
+ for (; !n2.isNull() && continueParsing; n2 = n2.nextSibling()) {
+ // parse all effects
+ QDomElement kfreffect = n2.toElement();
+ int effectout = kfreffect.attribute("out").toInt();
+
+ for (QDomNode n4 = kfreffect.firstChild(); !n4.isNull(); n4 = n4.nextSibling()) {
+ // parse effect parameters
+ QDomElement subeffectparam = n4.toElement();
+ if (subeffectparam.attribute("name") == "kdenlive_ix" && subeffectparam.text() != effectindex) {
+ //We are not in the same effect, stop parsing
+ lastParsedEffect = n2.previousSibling();
+ ix--;
+ continueParsing = false;
+ break;
+ } else if (subeffectparam.attribute("name") == endtag) {
+ endvalue = subeffectparam.text().toDouble() * factor;
+ break;
+ }
+ }
+ if (continueParsing) {
+ keyframes.append(QString::number(effectout) + ":" + QString::number(endvalue) + ";");
+ ix++;
+ }
+ }