]> git.sesse.net Git - kdenlive/commitdiff
Add support for curves version 0.3
authorTill Theato <root@ttill.de>
Thu, 8 Sep 2011 19:55:30 +0000 (19:55 +0000)
committerTill Theato <root@ttill.de>
Thu, 8 Sep 2011 19:55:30 +0000 (19:55 +0000)
svn path=/trunk/kdenlive/; revision=5865

effects/frei0r_curves.xml
effects/update/CMakeLists.txt
effects/update/frei0r.curves.js [new file with mode: 0644]
src/effectstackedit.cpp

index aeb79647f4872db1670280018d00a7cc2b104e46..aa9981b6c5a0d79542feb2551b8f2d9bb4d1c85c 100644 (file)
@@ -1,5 +1,6 @@
 <!DOCTYPE kpartgui>
-<effect tag="frei0r.curves" id="frei0r.curves">
+<group>
+    <effect tag="frei0r.curves" id="frei0r.curves">
        <name>Curves</name>
        <description>Color curves adjustment</description>
        <author>Maksim Golovkin</author>
@@ -7,7 +8,7 @@
                 <paramlistdisplay>Red,Green,Blue,Luma</paramlistdisplay>
                <name>Channel</name>
        </parameter>
-        <parameter type="list" name="Luma formula" default="1" paramlist="0,1">
+        <parameter type="list" name="Luma formula" default="1" paramlist="0;1">
                 <paramlistdisplay>Rec. 601,Rec. 709</paramlistdisplay>
                 <name>Luma formula</name>
         </parameter>
                 <paramlistdisplay>Top Left,Top Right,Bottom Left,Bottom Right</paramlistdisplay>
                 <name>Graph position</name>
         </parameter>
-</effect>
+    </effect>
+    <effect LC_NUMERIC="C" tag="frei0r.curves" id="frei0r.curves" version="0.3">
+        <name>Curves</name>
+        <description>Color curves adjustment</description>
+        <author>Maksim Golovkin</author>
+        <parameter type="list" name="Channel" default="0" paramlist="0;1;2;3">
+                <paramlistdisplay>Red,Green,Blue,Luma</paramlistdisplay>
+                <name>Channel</name>
+        </parameter>
+        <parameter type="list" name="Luma formula" default="1" paramlist="0;1">
+                <paramlistdisplay>Rec. 601,Rec. 709</paramlistdisplay>
+                <name>Luma formula</name>
+        </parameter>
+        
+        <!-- No actual parameter: Represents the curve widget -->
+        <parameter type="curve" default="0" depends="Channel" number="Curve point number" inpoints="Point %i input value" outpoints="Point %i output value" min="1" max="5" />
+
+        <parameter type="fixed" name="Curve point number" default="0.2" min="0.2" max="0.5">
+                <name>Number of curve points</name>
+        </parameter>
+        <parameter type="fixed" name="Point 1 input value" default="0" min="0" max="1">
+                <name>Point 1 input value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 1 output value" default="0" min="0" max="1">
+                <name>Point 1 output value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 2 input value" default="1" min="0" max="1">
+                <name>Point 2 input value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 2 output value" default="1" min="0" max="1">
+                <name>Point 2 output value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 3 input value" default="0" min="0" max="1">
+                <name>Point 3 input value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 3 output value" default="0" min="0" max="1">
+                <name>Point 3 output value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 4 input value" default="0" min="0" max="1">
+                <name>Point 4 input value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 4 output value" default="0" min="0" max="1">
+                <name>Point 4 output value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 5 input value" default="0" min="0" max="1">
+                <name>Point 5 input value</name>
+        </parameter>
+        <parameter type="fixed" name="Point 5 output value" default="0" min="0" max="1">
+                <name>Point 5 output value</name>
+        </parameter>
+        <parameter type="bool" name="Show curves" default="0">
+                <name>Show graph in picture</name>
+        </parameter>
+        <parameter type="list" name="Graph position" default="0.3" paramlist="0;0.1;0.2;0.3">
+                <paramlistdisplay>Top Left,Top Right,Bottom Left,Bottom Right</paramlistdisplay>
+                <name>Graph position</name>
+        </parameter>
+    </effect>
+</group>
index d69ab9cbfad0ccd3d64ddefac45d8863bc761645..f582223f48a88f84ad012c8525465764ffe3fd20 100644 (file)
@@ -1,4 +1,5 @@
 INSTALL(FILES
 
 frei0r.levels.js
+frei0r.curves.js
 DESTINATION ${DATA_INSTALL_DIR}/kdenlive/effects/update)
diff --git a/effects/update/frei0r.curves.js b/effects/update/frei0r.curves.js
new file mode 100644 (file)
index 0000000..240cb48
--- /dev/null
@@ -0,0 +1,12 @@
+
+var update = new Object();
+
+update["Graph position"] = new Array(new Array(0.2, function(v, d) { return this.upd1(v, d); }));
+update["Curve point number"] = update["Graph position"];
+
+function upd1(value, isDowngrade) {
+    if (isDowngrade)
+        return value * 10;
+    else
+        return value / 10.;
+}
index 7ade3c50e773669ecd4746635f664b5c46007524..00ebba69d55ecc00fe2b0d9494c31a4cbfeb2cab 100644 (file)
@@ -232,9 +232,8 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, ItemInfo info, bool
         }
     }
 #endif
-    QDomElement e = m_params.toElement();
-    int minFrame = e.attribute("start").toInt();
-    int maxFrame = e.attribute("end").toInt();
+    int minFrame = d.attribute("start").toInt();
+    int maxFrame = d.attribute("end").toInt();
     // In transitions, maxFrame is in fact one frame after the end of transition
     if (maxFrame > 0) maxFrame --;
 
@@ -372,14 +371,14 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, ItemInfo info, bool
                 KeyframeEdit *geo;
                 if (pa.attribute("widget") == "corners") {
                     // we want a corners-keyframe-widget
-                    CornersWidget *corners = new CornersWidget(m_monitor, pa, m_in, m_out, m_timecode, e.attribute("active_keyframe", "-1").toInt(), this);
+                    CornersWidget *corners = new CornersWidget(m_monitor, pa, m_in, m_out, m_timecode, d.attribute("active_keyframe", "-1").toInt(), this);
                     corners->slotShowScene(!disable);
                     connect(corners, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
                     connect(this, SIGNAL(effectStateChanged(bool)), corners, SLOT(slotShowScene(bool)));
                     connect(this, SIGNAL(syncEffectsPos(int)), corners, SLOT(slotSyncPosition(int)));
                     geo = static_cast<KeyframeEdit *>(corners);
                 } else {
-                    geo = new KeyframeEdit(pa, m_in, m_out, m_timecode, e.attribute("active_keyframe", "-1").toInt());
+                    geo = new KeyframeEdit(pa, m_in, m_out, m_timecode, d.attribute("active_keyframe", "-1").toInt());
                 }
                 m_vbox->addWidget(geo);
                 m_valueItems[paramName+"keyframe"] = geo;
@@ -416,7 +415,12 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, ItemInfo info, bool
             KisCurveWidget *curve = new KisCurveWidget(this);
             curve->setMaxPoints(pa.attribute("max").toInt());
             QList<QPointF> points;
-            int number = EffectsList::parameter(e, pa.attribute("number")).toInt();
+            int number;
+            if (d.attribute("version").toDouble() > 0.2) {
+                number = EffectsList::parameter(d, pa.attribute("number")).toDouble() * 10;
+            } else {
+                number = EffectsList::parameter(d, pa.attribute("number")).toInt();
+            }
             QString inName = pa.attribute("inpoints");
             QString outName = pa.attribute("outpoints");
             int start = pa.attribute("min").toInt();
@@ -425,7 +429,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, ItemInfo info, bool
                 in.replace("%i", QString::number(j));
                 QString out = outName;
                 out.replace("%i", QString::number(j));
-                points << QPointF(EffectsList::parameter(e, in).toDouble(), EffectsList::parameter(e, out).toDouble());
+                points << QPointF(EffectsList::parameter(d, in).toDouble(), EffectsList::parameter(d, out).toDouble());
             }
             if (!points.isEmpty())
                 curve->setCurve(KisCubicCurve(points));
@@ -443,7 +447,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, ItemInfo info, bool
 
             QString depends = pa.attribute("depends");
             if (!depends.isEmpty())
-                meetDependency(paramName, type, EffectsList::parameter(e, depends));
+                meetDependency(paramName, type, EffectsList::parameter(d, depends));
         } else if (type == "bezier_spline") {
             BezierSplineWidget *widget = new BezierSplineWidget(value, this);
             stretch = false;
@@ -452,7 +456,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, ItemInfo info, bool
             connect(widget, SIGNAL(modified()), this, SLOT(collectAllParameters()));
             QString depends = pa.attribute("depends");
             if (!depends.isEmpty())
-                meetDependency(paramName, type, EffectsList::parameter(e, depends));
+                meetDependency(paramName, type, EffectsList::parameter(d, depends));
 #ifdef QJSON
         } else if (type == "roto-spline") {
             RotoWidget *roto = new RotoWidget(value, m_monitor, info, m_timecode, this);
@@ -725,7 +729,11 @@ void EffectStackEdit::collectAllParameters()
             QString outName = pa.attributes().namedItem("outpoints").nodeValue();
             int off = pa.attributes().namedItem("min").nodeValue().toInt();
             int end = pa.attributes().namedItem("max").nodeValue().toInt();
-            EffectsList::setParameter(newparam, number, QString::number(points.count()));
+            if (oldparam.attribute("version").toDouble() > 0.2) {
+                EffectsList::setParameter(newparam, number, locale.toString(points.count() / 10.));
+            } else {
+                EffectsList::setParameter(newparam, number, QString::number(points.count()));
+            }
             for (int j = 0; (j < points.count() && j + off <= end); j++) {
                 QString in = inName;
                 in.replace("%i", QString::number(j + off));