Curve::_get_vector: fix return value when veclen == 1
[ardour.git] / libs / evoral / src / Curve.cpp
index 44fc48f7282c168d7f31f3d70a7fa7234089cea8..f99a8075d5d4f5572e9aa232d092916910e9ab66 100644 (file)
@@ -302,14 +302,11 @@ Curve::_get_vector (double x0, double x1, float *vec, int32_t veclen)
                if (veclen > 1) {
                        dx_num = hx - lx;
                        dx_den = veclen - 1;
-               }
-
-               if (veclen > 1) {
                        for (int i = 0; i < veclen; ++i) {
                                vec[i] = (lx * (m_num / m_den) + m_num * i * dx_num / (m_den * dx_den)) + c;
                        }
                } else {
-                       vec[0] = lx;
+                       vec[0] = lx * (m_num / m_den) + c;
                }
 
                return;
@@ -403,15 +400,13 @@ Curve::multipoint_eval (double x)
                double tdelta = x - before->when;
                double trange = after->when - before->when;
 
-               return before->value + (vdelta * (tdelta / trange));
-
-#if 0
-               double x2 = x * x;
-               ControlEvent* ev = *range.second;
-
-               return = ev->coeff[0] + (ev->coeff[1] * x) + (ev->coeff[2] * x2) + (ev->coeff[3] * x2 * x);
-#endif
-
+               if (_list.interpolation() == ControlList::Curved && after->coeff) {
+                               ControlEvent* ev = after;
+                               double x2 = x * x;
+                               return ev->coeff[0] + (ev->coeff[1] * x) + (ev->coeff[2] * x2) + (ev->coeff[3] * x2 * x);
+               } else {
+                       return before->value + (vdelta * (tdelta / trange));
+               }
        }
 
        /* x is a control point in the data */