From: <j-...@us...> - 2009-11-14 02:19:38
|
Revision: 4121 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=4121&view=rev Author: j-b-m Date: 2009-11-14 02:19:31 +0000 (Sat, 14 Nov 2009) Log Message: ----------- First draft for keyframes in frei0r effects Modified Paths: -------------- trunk/kdenlive/src/clipitem.cpp trunk/kdenlive/src/effectslist.cpp trunk/kdenlive/src/effectslist.h trunk/kdenlive/src/effectstackedit.cpp trunk/kdenlive/src/trackview.cpp Modified: trunk/kdenlive/src/clipitem.cpp =================================================================== --- trunk/kdenlive/src/clipitem.cpp 2009-11-14 00:18:45 UTC (rev 4120) +++ trunk/kdenlive/src/clipitem.cpp 2009-11-14 02:19:31 UTC (rev 4121) @@ -183,7 +183,7 @@ } } - if (!e.isNull() && e.attribute("type") == "keyframe") { + if (!e.isNull() && (e.attribute("type") == "keyframe" || e.attribute("type") == "simplekeyframe")) { QString def = e.attribute("default"); // Effect has a keyframe type parameter, we need to set the values if (e.attribute("keyframes").isEmpty()) { @@ -316,7 +316,7 @@ QDomNodeList params = effect.elementsByTagName("parameter"); for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); - if (!e.isNull() && e.attribute("type") == "keyframe") { + if (!e.isNull() && (e.attribute("type") == "keyframe" || e.attribute("type") == "simplekeyframe")) { e.setAttribute("keyframes", keyframes); if (ix == m_selectedEffect) { m_keyframes.clear(); @@ -349,7 +349,7 @@ if (effect.attribute("disabled") != "1") for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); - if (!e.isNull() && e.attribute("type") == "keyframe") { + if (!e.isNull() && (e.attribute("type") == "keyframe" || e.attribute("type") == "simplekeyframe")) { m_keyframes.clear(); double max = e.attribute("max").toDouble(); double min = e.attribute("min").toDouble(); @@ -381,7 +381,7 @@ for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); - if (!e.isNull() && e.attribute("type") == "keyframe") { + if (!e.isNull() && (e.attribute("type") == "keyframe" || e.attribute("type") == "simplekeyframe")) { result = e.attribute("keyframes"); break; } @@ -398,7 +398,7 @@ for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); - if (!e.isNull() && e.attribute("type") == "keyframe") { + if (!e.isNull() && (e.attribute("type") == "keyframe" || e.attribute("type") == "simplekeyframe")) { QString keyframes; if (m_keyframes.count() > 1) { QMap<int, int>::const_iterator i = m_keyframes.constBegin(); @@ -1111,7 +1111,7 @@ QDomNodeList params = effect.elementsByTagName("parameter"); for (int j = 0; j < params.count(); j++) { QDomElement e = params.item(i).toElement(); - if (e.attribute("type") == "keyframe") { + if (!e.isNull() && (e.attribute("type") == "keyframe" || e.attribute("type") == "simplekeyframe")) { // parse keyframes and adjust values const QStringList keyframes = e.attribute("keyframes").split(';', QString::SkipEmptyParts); QMap <int, double> kfr; @@ -1308,7 +1308,22 @@ for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); if (!e.isNull()) { - if (e.attribute("type") == "keyframe") { + if (e.attribute("type") == "simplekeyframe") { + QStringList values = e.attribute("keyframes").split(";", QString::SkipEmptyParts); + double factor = e.attribute("factor", "1").toDouble(); + if (factor != 1) { + for (int j = 0; j < values.count(); j++) { + QString pos = values.at(j).section(":", 0, 0); + double val = values.at(j).section(":", 1, 1).toDouble() / factor; + values[j] = pos + "=" + QString::number(val); + } + } + parameters.addParam(e.attribute("name"), values.join(";")); + /*parameters.addParam("max", e.attribute("max")); + parameters.addParam("min", e.attribute("min")); + parameters.addParam("factor", );*/ + } + else if (e.attribute("type") == "keyframe") { parameters.addParam("keyframes", e.attribute("keyframes")); parameters.addParam("max", e.attribute("max")); parameters.addParam("min", e.attribute("min")); @@ -1403,8 +1418,25 @@ for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); //kDebug() << "/ / / /SENDING EFFECT PARAM: " << e.attribute("type") << ", NAME_ " << e.attribute("tag"); - if (e.attribute("type") == "keyframe") { + if (e.attribute("type") == "simplekeyframe") { kDebug() << "/ / / /SENDING KEYFR EFFECT TYPE"; + QStringList values = e.attribute("keyframes").split(";", QString::SkipEmptyParts); + double factor = e.attribute("factor", "1").toDouble(); + if (factor != 1) { + for (int j = 0; j < values.count(); j++) { + QString pos = values.at(j).section(":", 0, 0); + double val = values.at(j).section(":", 1, 1).toDouble() / factor; + values[j] = pos + "=" + QString::number(val); + } + } + parameters.addParam(e.attribute("name"), values.join(";")); + /*parameters.addParam(e.attribute("name"), e.attribute("keyframes").replace(":", "=")); + parameters.addParam("max", e.attribute("max")); + parameters.addParam("min", e.attribute("min")); + parameters.addParam("factor", e.attribute("factor", "1"));*/ + } + else if (e.attribute("type") == "keyframe") { + kDebug() << "/ / / /SENDING KEYFR EFFECT TYPE"; parameters.addParam("keyframes", e.attribute("keyframes")); parameters.addParam("max", e.attribute("max")); parameters.addParam("min", e.attribute("min")); Modified: trunk/kdenlive/src/effectslist.cpp =================================================================== --- trunk/kdenlive/src/effectslist.cpp 2009-11-14 00:18:45 UTC (rev 4120) +++ trunk/kdenlive/src/effectslist.cpp 2009-11-14 02:19:31 UTC (rev 4121) @@ -150,6 +150,17 @@ return false; } +// static +bool EffectsList::hasSimpleKeyFrames(QDomElement effect) +{ + QDomNodeList params = effect.elementsByTagName("parameter"); + for (int i = 0; i < params.count(); i++) { + QDomElement e = params.item(i).toElement(); + if (e.attribute("type") == "simplekeyframe") return true; + } + return false; +} + void EffectsList::clone(const EffectsList original) { setContent(original.toString()); Modified: trunk/kdenlive/src/effectslist.h =================================================================== --- trunk/kdenlive/src/effectslist.h 2009-11-14 00:18:45 UTC (rev 4120) +++ trunk/kdenlive/src/effectslist.h 2009-11-14 02:19:31 UTC (rev 4121) @@ -51,6 +51,7 @@ void insert(int ix, QDomElement effect); void replace(int ix, QDomElement effect); static bool hasKeyFrames(QDomElement effect); + static bool hasSimpleKeyFrames(QDomElement effect); static void setParameter(QDomElement effect, const QString &name, const QString &value); static QString parameter(QDomElement effect, const QString &name); static void setProperty(QDomElement effect, const QString &name, const QString &value); Modified: trunk/kdenlive/src/effectstackedit.cpp =================================================================== --- trunk/kdenlive/src/effectstackedit.cpp 2009-11-14 00:18:45 UTC (rev 4120) +++ trunk/kdenlive/src/effectstackedit.cpp 2009-11-14 02:19:31 UTC (rev 4121) @@ -231,7 +231,7 @@ m_valueItems[paramName+"geometry"] = geo; connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters())); connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int))); - } else if (type == "keyframe") { + } else if (type == "keyframe" || type == "simplekeyframe") { // keyframe editor widget kDebug() << "min: " << m_in << ", MAX: " << m_out; KeyframeEdit *geo = new KeyframeEdit(pa, m_out - m_in - 1, pa.attribute("min").toInt(), pa.attribute("max").toInt(), m_timecode); Modified: trunk/kdenlive/src/trackview.cpp =================================================================== --- trunk/kdenlive/src/trackview.cpp 2009-11-14 00:18:45 UTC (rev 4120) +++ trunk/kdenlive/src/trackview.cpp 2009-11-14 02:19:31 UTC (rev 4121) @@ -689,7 +689,7 @@ 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 @@ -792,7 +792,16 @@ if (factor.startsWith('%')) { fact = ProfilesDialog::getStringEval(m_doc->mltProfile(), factor); } else fact = factor.toDouble(); - e.setAttribute("value", paramvalue.toDouble() * fact); + if (e.attribute("type") == "simplekeyframe") { + QStringList kfrs = paramvalue.split(";"); + for (int l = 0; l < kfrs.count(); l++) { + QString fr = kfrs.at(l).section("=", 0, 0); + double val = kfrs.at(l).section("=", 1, 1).toDouble(); + kfrs[l] = fr + ":" + QString::number((int) (val * fact)); + } + e.setAttribute("keyframes", kfrs.join(";")); + } + else e.setAttribute("value", paramvalue.toDouble() * fact); } else e.setAttribute("value", paramvalue); break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |