- QDomNodeList effects = elem.childNodes();
- for (int ix = 0; ix < effects.count(); ix++) {
- QDomElement effect = effects.at(ix).toElement();
- if (effect.tagName() == "filter") {
- // add effect to clip
- QString effecttag;
- QString effectid;
- QString effectindex;
- QString ladspaEffectFile;
- // Get effect tag & index
- for (QDomNode n3 = effect.firstChild(); !n3.isNull(); n3 = n3.nextSibling()) {
- // parse effect parameters
- QDomElement effectparam = n3.toElement();
- if (effectparam.attribute("name") == "tag") {
- effecttag = effectparam.text();
- } else if (effectparam.attribute("name") == "kdenlive_id") {
- effectid = effectparam.text();
- } else if (effectparam.attribute("name") == "kdenlive_ix") {
- effectindex = effectparam.text();
- } else if (effectparam.attribute("name") == "src") {
- ladspaEffectFile = effectparam.text();
- if (!QFile::exists(ladspaEffectFile)) {
- // If the ladspa effect file is missing, recreate it
- kDebug() << "// MISSING LADSPA FILE: " << ladspaEffectFile;
- ladspaEffectFile = m_doc->getLadspaFile();
- effectparam.firstChild().setNodeValue(ladspaEffectFile);
- kDebug() << "// ... REPLACED WITH: " << ladspaEffectFile;
- }
- }
- }
- //kDebug() << "+ + CLIP EFF FND: " << effecttag << ", " << effectid << ", " << effectindex;
- // get effect standard tags
- QDomElement clipeffect = MainWindow::customEffects.getEffectByTag(QString(), effectid);
- if (clipeffect.isNull()) clipeffect = MainWindow::videoEffects.getEffectByTag(effecttag, effectid);
- if (clipeffect.isNull()) clipeffect = MainWindow::audioEffects.getEffectByTag(effecttag, effectid);
- 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
- QString 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");
- break;
- }
- }
- QString keyframes;
- int effectin = effect.attribute("in").toInt();
- int effectout = effect.attribute("out").toInt();
- double startvalue = 0;
- double endvalue = 0;
- double fact;
- if (factor.isEmpty()) fact = 1;
- else if (factor.startsWith('%')) {
- fact = ProfilesDialog::getStringEval(m_doc->mltProfile(), factor);
- } else fact = factor.toDouble();
- 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() * fact;
- if (effectparam.attribute("name") == endtag)
- endvalue = effectparam.text().toDouble() * fact;
- }
- // 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() * fact;
- break;
- }
- }
- if (continueParsing) {
- keyframes.append(QString::number(effectout) + ':' + QString::number(endvalue) + ';');
- ix++;
- }
- }