gst_timed_value_control_source_set_internal (GstTimedValueControlSource *
self, GstClockTime timestamp, const gdouble value)
{
- GSequenceIter *iter;
GstControlPoint *cp;
g_mutex_lock (&self->lock);
/* check if a control point for the timestamp already exists */
- /* iter contains the iter right *after* timestamp */
if (G_LIKELY (self->values)) {
- iter =
- g_sequence_search (self->values, ×tamp,
+ GSequenceIter *iter = g_sequence_lookup (self->values, ×tamp,
(GCompareDataFunc) gst_control_point_find, NULL);
- if (iter) {
- GSequenceIter *prev = g_sequence_iter_prev (iter);
- if (!g_sequence_iter_is_end (prev)) {
- GstControlPoint *cp = g_sequence_get (prev);
-
- /* If the timestamp is the same just update the control point value */
- if (cp->timestamp == timestamp) {
+ if (iter) {
+ GstControlPoint *cp = g_sequence_get (iter);
- /* update control point */
- cp->value = value;
- g_mutex_unlock (&self->lock);
+ /* update control point */
+ cp->value = value;
+ g_mutex_unlock (&self->lock);
- g_signal_emit (self,
- gst_timed_value_control_source_signals[VALUE_CHANGED_SIGNAL], 0,
- cp);
- goto done;
- }
- }
+ g_signal_emit (self,
+ gst_timed_value_control_source_signals[VALUE_CHANGED_SIGNAL], 0, cp);
+ goto done;
}
} else {
self->values = g_sequence_new ((GDestroyNotify) gst_control_point_free);
g_mutex_lock (&self->lock);
/* check if a control point for the timestamp exists */
if (G_LIKELY (self->values) && (iter =
- g_sequence_search (self->values, ×tamp,
+ g_sequence_lookup (self->values, ×tamp,
(GCompareDataFunc) gst_control_point_find, NULL))) {
/* Iter contains the iter right after timestamp, i.e.
* we need to get the previous one and check the timestamp
*/
- iter = g_sequence_iter_prev (iter);
- cp = g_sequence_get (iter);
- if (cp->timestamp == timestamp) {
- cp = g_slice_dup (GstControlPoint, cp);
- g_sequence_remove (iter);
- self->nvalues--;
- self->valid_cache = FALSE;
- res = TRUE;
- } else {
- cp = NULL;
- }
-
+ cp = g_slice_dup (GstControlPoint, g_sequence_get (iter));
+ g_sequence_remove (iter);
+ self->nvalues--;
+ self->valid_cache = FALSE;
+ res = TRUE;
}
g_mutex_unlock (&self->lock);