}
}
}
- if (fade > 0) m_startFade = fade;
- else if (fade < 0) m_endFade = -fade;
+ if (fade > 0)
+ m_startFade = fade;
+ else if (fade < 0)
+ m_endFade = -fade;
}
setSelectedEffect(0);
}
bool effModified = false;
// go through all params which have keyframes
- foreach (const QString &kfr, keyframeParams) {
+ foreach(const QString &kfr, keyframeParams) {
const QStringList keyframes = kfr.split(';', QString::SkipEmptyParts);
QStringList newKeyFrames;
bool cutKeyFrame = false;
}
-bool ClipItem::checkEffectsKeyframesPos(const int previous, const int current, bool fromStart)
+bool ClipItem::checkEffectsKeyframesPos(const int previous, const int current, bool fromStart, int renderWidth, int renderHeight)
{
bool effModified = false;
for (int i = 0; i < m_effectList.count(); i++) {
for (int j = 0; j < params.count(); j++) {
bool modified = false;
QDomElement e = params.item(j).toElement();
- if (!e.isNull() && (e.attribute("type") == "keyframe" || e.attribute("type") == "simplekeyframe")) {
+ if (e.isNull())
+ continue;
+ if (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;
}
e.setAttribute("keyframes", newkfr);
}
+ } else if (e.attribute("type") == "geometry" && !e.hasAttribute("fixed")) {
+ Mlt::Geometry geometry(e.attribute("value").toUtf8().data(), cropDuration().frames(fps()), renderWidth, renderHeight);
+
+ Mlt::GeometryItem item;
+ while (!geometry.next_key(&item, cropDuration().frames(fps()))) {
+ geometry.remove(item.frame());
+ modified = true;
+ }
+
+ e.setAttribute("value", geometry.serialise());
}
}
}
if (effectId.isEmpty()) effectId = effect.attribute("tag");
parameters.addParam("id", effectId);
- // special case: the affine effect need in / out points
+ // special case: the affine effect needs in / out points
if (effectId == "pan_zoom") {
- parameters.addParam("in", QString::number(cropStart().frames(m_fps)));
- parameters.addParam("out", QString::number((cropStart() + cropDuration()).frames(m_fps)));
+ int start = cropStart().frames(m_fps);
+ int end = (cropStart() + cropDuration()).frames(m_fps);
+ if (start < 0) {
+ end -= start;
+ start = 0;
+ }
+ parameters.addParam("in", QString::number(start));
+ parameters.addParam("out", QString::number(end));
}
QDomNodeList params = effect.elementsByTagName("parameter");
return parameters;
}
-EffectsParameterList ClipItem::getEffectArgs(const QDomElement effect)
-{
- EffectsParameterList parameters;
- parameters.addParam("tag", effect.attribute("tag"));
- if (effect.hasAttribute("region")) parameters.addParam("region", effect.attribute("region"));
- parameters.addParam("kdenlive_ix", effect.attribute("kdenlive_ix"));
- parameters.addParam("id", effect.attribute("id"));
- if (effect.hasAttribute("src")) parameters.addParam("src", effect.attribute("src"));
- if (effect.hasAttribute("disable")) parameters.addParam("disable", effect.attribute("disable"));
- if (effect.hasAttribute("in")) parameters.addParam("in", effect.attribute("in"));
- if (effect.hasAttribute("out")) parameters.addParam("out", effect.attribute("out"));
-
- QDomNodeList params = effect.elementsByTagName("parameter");
- 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") == "simplekeyframe") {
-
- QStringList values = e.attribute("keyframes").split(";", QString::SkipEmptyParts);
- double factor = e.attribute("factor", "1").toDouble();
- 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);
- }
- // kDebug() << "/ / / /SENDING KEYFR:" << values;
- 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"));
- parameters.addParam("factor", e.attribute("factor", "1"));
- parameters.addParam("starttag", e.attribute("starttag", "start"));
- parameters.addParam("endtag", e.attribute("endtag", "end"));
- } else if (e.attribute("namedesc").contains(';')) {
- QString format = e.attribute("format");
- QStringList separators = format.split("%d", QString::SkipEmptyParts);
- QStringList values = e.attribute("value").split(QRegExp("[,:;x]"));
- QString neu;
- QTextStream txtNeu(&neu);
- if (values.size() > 0)
- txtNeu << (int)values[0].toDouble();
- for (int i = 0; i < separators.size() && i + 1 < values.size(); i++) {
- txtNeu << separators[i];
- txtNeu << (int)(values[i+1].toDouble());
- }
- parameters.addParam("start", neu);
- } else {
- if (e.attribute("factor", "1") != "1") {
- double fact;
- if (e.attribute("factor").startsWith('%')) {
- fact = ProfilesDialog::getStringEval(projectScene()->profile(), e.attribute("factor"));
- } else fact = e.attribute("factor", "1").toDouble();
- parameters.addParam(e.attribute("name"), QString::number(e.attribute("value").toDouble() / fact));
- } else {
- parameters.addParam(e.attribute("name"), e.attribute("value"));
- }
- }
- }
- return parameters;
-}
-
void ClipItem::deleteEffect(QString index)
{
bool needRepaint = false;