static gboolean interpolate_none_get_value_array (GstTimedValueControlSource * self, GstClockTime timestamp, GstClockTime interval, guint n_values, gdouble * values) { gboolean ret = FALSE; guint i; GstClockTime ts = timestamp; GstClockTime next_ts = 0; GstControlPoint *cp1 = NULL, *cp2 = NULL; g_mutex_lock (&self->lock); for (i = 0; i < n_values; i++) { GST_LOG ("values[%3d] : ts=%" GST_TIME_FORMAT ", next_ts=%" GST_TIME_FORMAT, i, GST_TIME_ARGS (ts), GST_TIME_ARGS (next_ts)); if (ts >= next_ts) { _get_nearest_control_points2 (self, ts, &cp1, &cp2, &next_ts); } if (cp1) { *values = _interpolate_none (self, cp1); ret = TRUE; GST_LOG ("values[%3d]=%lf", i, *values); } else { *values = NAN; GST_LOG ("values[%3d]=-", i); } ts += interval; values++; } g_mutex_unlock (&self->lock); return ret; }
Eina_Bool evas_filter_interpolate(DATA8 *output, int *points, Evas_Filter_Interpolation_Mode mode) { switch (mode) { case EVAS_FILTER_INTERPOLATION_MODE_NONE: return _interpolate_none(output, points); case EVAS_FILTER_INTERPOLATION_MODE_LINEAR: default: return _interpolate_linear(output, points); } }
static gboolean interpolate_none_get (GstTimedValueControlSource * self, GstClockTime timestamp, gdouble * value) { gboolean ret = FALSE; GSequenceIter *iter; GstControlPoint *cp; g_mutex_lock (&self->lock); iter = gst_timed_value_control_source_find_control_point_iter (self, timestamp); if (iter) { cp = g_sequence_get (iter); *value = _interpolate_none (self, cp); ret = TRUE; } g_mutex_unlock (&self->lock); return ret; }