enum
{
COMMIT_SIGNAL,
+ COMMITED_SIGNAL,
LAST_SIGNAL
};
compare_relink_single_node (GnlComposition * comp, GNode * node,
GNode * oldstack);
static gboolean update_pipeline_func (GnlComposition * comp);
+static gboolean commit_pipeline_func (GnlComposition *comp);
/* COMP_REAL_START: actual position to start current playback at. */
}
static void
+_add_commit_gsource (GnlComposition * comp)
+{
+ MAIN_CONTEXT_LOCK (comp);
+ g_main_context_invoke (comp->priv->mcontext,
+ (GSourceFunc) commit_pipeline_func, comp);
+ MAIN_CONTEXT_UNLOCK (comp);
+}
+
+static void
gnl_composition_class_init (GnlCompositionClass * klass)
{
GObjectClass *gobject_class;
G_STRUCT_OFFSET (GnlObjectClass, commit_signal_handler), NULL, NULL, NULL,
G_TYPE_BOOLEAN, 1, G_TYPE_BOOLEAN);
+ _signals[COMMITED_SIGNAL] = g_signal_new ("commited", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
gnlobject_class->commit = gnl_composition_commit_func;
}
static gboolean
gnl_composition_commit_func (GnlObject * object, gboolean recurse)
{
- GList *tmp;
- gboolean commited = FALSE;
- GnlComposition *comp = GNL_COMPOSITION (object);
- GnlCompositionPrivate *priv = comp->priv;
-
-
- GST_DEBUG_OBJECT (object, "Commiting state");
- COMP_OBJECTS_LOCK (comp);
- for (tmp = priv->objects_start; tmp; tmp = tmp->next) {
- if (gnl_object_commit (tmp->data, recurse))
- commited = TRUE;
- }
-
- GST_DEBUG_OBJECT (object, "Linking up commit vmethod");
- if (commited == FALSE &&
- (GNL_OBJECT_CLASS (parent_class)->commit (object, recurse) == FALSE)) {
- COMP_OBJECTS_UNLOCK (comp);
- GST_DEBUG_OBJECT (object, "Nothing to commit, leaving");
- return FALSE;
- }
-
- /* The topology of the composition might have changed, update the lists */
- priv->objects_start = g_list_sort
- (priv->objects_start, (GCompareFunc) objects_start_compare);
- priv->objects_stop = g_list_sort
- (priv->objects_stop, (GCompareFunc) objects_stop_compare);
-
- /* And update the pipeline at current position if needed */
- update_pipeline_at_current_position (comp);
- COMP_OBJECTS_UNLOCK (comp);
-
- GST_DEBUG_OBJECT (object, "Done commiting");
+ GST_ERROR ("Adding commit gsource");
+ _add_commit_gsource (GNL_COMPOSITION (object));
return TRUE;
}
}
static gboolean
+commit_pipeline_func (GnlComposition *comp)
+{
+ GList *tmp;
+ gboolean commited = FALSE;
+ GnlObject *object = GNL_OBJECT (comp);
+ GnlCompositionPrivate *priv = comp->priv;
+
+ GST_ERROR_OBJECT (object, "Commiting state");
+ COMP_OBJECTS_LOCK (comp);
+ for (tmp = priv->objects_start; tmp; tmp = tmp->next) {
+ if (gnl_object_commit (tmp->data, TRUE))
+ commited = TRUE;
+ }
+
+ GST_DEBUG_OBJECT (object, "Linking up commit vmethod");
+ if (commited == FALSE &&
+ (GNL_OBJECT_CLASS (parent_class)->commit (object, TRUE) == FALSE)) {
+ COMP_OBJECTS_UNLOCK (comp);
+ GST_ERROR_OBJECT (object, "Nothing to commit, leaving");
+ g_signal_emit (comp, _signals[COMMITED_SIGNAL], 0, FALSE);
+ return G_SOURCE_REMOVE;
+ }
+
+ /* The topology of the composition might have changed, update the lists */
+ priv->objects_start = g_list_sort
+ (priv->objects_start, (GCompareFunc) objects_start_compare);
+ priv->objects_stop = g_list_sort
+ (priv->objects_stop, (GCompareFunc) objects_stop_compare);
+
+ /* And update the pipeline at current position if needed */
+ update_pipeline_at_current_position (comp);
+ COMP_OBJECTS_UNLOCK (comp);
+
+ GST_ERROR ("emitted signal");
+ g_signal_emit (comp, _signals[COMMITED_SIGNAL], 0, TRUE);
+ return G_SOURCE_REMOVE;
+}
+
+static gboolean
update_pipeline_func (GnlComposition * comp)
{
GnlCompositionPrivate *priv;
GstState nextstate = (GST_STATE_NEXT (comp) == GST_STATE_VOID_PENDING) ?
GST_STATE (comp) : GST_STATE_NEXT (comp);
- GST_DEBUG_OBJECT (comp,
+ GST_ERROR_OBJECT (comp,
"currenttime:%" GST_TIME_FORMAT
" initial:%d , modify:%d", GST_TIME_ARGS (currenttime), initial, modify);
}
}
-
static gboolean
gnl_composition_remove_object (GstBin * bin, GstElement * element)
{
return res;
}
+
+static GMutex lock;
+static GCond cond;
+static void
+commited_cb (GstElement * comp, gboolean changed)
+{
+ GST_ERROR ("commited !!");
+ g_mutex_lock (&lock);
+ g_cond_signal (&cond);
+ g_mutex_unlock (&lock);
+}
+
+void
+commit_and_wait (GstElement * comp, gboolean * ret)
+{
+ g_signal_connect (comp, "commited", (GCallback) commited_cb, NULL);
+ g_mutex_lock (&lock);
+ g_signal_emit_by_name (comp, "commit", TRUE, ret);
+ g_cond_wait (&cond, &lock);
+ g_mutex_unlock (&lock);
+}
gst_element_factory_make_or_warn (const gchar * factoryname, const gchar * name);
Segment *
segment_new (gdouble rate, GstFormat format, gint64 start, gint64 stop, gint64 position);
+
+void commit_and_wait (GstElement *comp, gboolean *ret);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
gst_bin_add (GST_BIN (comp), source2);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
g_signal_emit_by_name (comp, "commit", TRUE, &ret);
- check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
+ commit_and_wait (comp, &ret);
ASSERT_OBJECT_REFCOUNT (source2, "source2", 1);
/* Remove first source */
/* Re-add first source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
gst_object_unref (source1);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, GST_SECOND, 2 * GST_SECOND, 1 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
/* defaultsrc source */
gst_bin_add (GST_BIN (comp), defaultsrc);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
check_start_stop_duration (defaultsrc, 0, 2 * GST_SECOND, 2 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source2, "source2", 1);
/* Third source */
gst_bin_add (GST_BIN (comp), source3);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
fail_unless (ret);
check_start_stop_duration (comp, 0, 5 * GST_SECOND, 5 * GST_SECOND);
check_start_stop_duration (defaultsrc, 0, 5 * GST_SECOND, 5 * GST_SECOND);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, GST_SECOND, 2 * GST_SECOND, 1 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
/* defaultsrc source */
gst_bin_add (GST_BIN (comp), defaultsrc);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
check_start_stop_duration (defaultsrc, 0, 2 * GST_SECOND, 2 * GST_SECOND);
/* Second source */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 4 * GST_SECOND, 4 * GST_SECOND);
check_start_stop_duration (defaultsrc, 0, 4 * GST_SECOND, 4 * GST_SECOND);
/* Third source */
gst_bin_add (GST_BIN (comp), source3);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 5 * GST_SECOND, 5 * GST_SECOND);
check_start_stop_duration (defaultsrc, 0, 5 * GST_SECOND, 5 * GST_SECOND);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
/* Second source */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source2, "source2", 1);
/* Third source */
gst_bin_add (GST_BIN (comp), source3);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source3, "source3", 1);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
/* Second source */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
/* Remove second source */
/* Re-add second source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
gst_object_unref (source1);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
/* Second source */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
/* Remove second source */
/* Re-add second source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
gst_object_unref (source1);
/* Add default */
gst_bin_add (GST_BIN (comp), def);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (source1, 0, 2 * GST_SECOND, 2 * GST_SECOND);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
/* move source1 out of the active segment */
g_object_set (source1, "start", (guint64) 4 * GST_SECOND, NULL);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
fail_unless (seek_events > seek_events_before, "%i > %i", seek_events,
seek_events_before);
g_object_set (source1, "start", (guint64) 0 * GST_SECOND, NULL);
/* add the source again and check that the ghostpad is added again */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
g_mutex_lock (&pad_added_lock);
g_cond_wait (&pad_added_cond, &pad_added_lock);
seek_events_before = seek_events;
g_object_set (source1, "duration", (guint64) 1 * GST_SECOND, NULL);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
fail_unless (seek_events > seek_events_before);
GST_DEBUG ("Setting pipeline to NULL");
pipeline = GST_ELEMENT (gst_pipeline_new (NULL));
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+ GST_ERROR ("Pipeline refcounts: %i", ((GObject *) pipeline)->ref_count);
composition = gst_element_factory_make ("gnlcomposition", "composition");
fakesink = gst_element_factory_make ("fakesink", NULL);
"priority", 0, NULL);
gst_bin_add (GST_BIN (composition), gnl_adder);
+ GST_ERROR ("Pipeline refcounts: %i", ((GObject *) pipeline)->ref_count);
/* source 1 */
gnlsource1 = gst_element_factory_make ("gnlsource", "gnlsource1");
audiotestsrc1 = gst_element_factory_make ("audiotestsrc", "audiotestsrc1");
GST_DEBUG ("Adding composition to pipeline");
gst_bin_add_many (GST_BIN (pipeline), composition, fakesink, NULL);
+ GST_ERROR ("Pipeline refcounts: %i", ((GObject *) pipeline)->ref_count);
+
fail_unless (gst_bin_add (GST_BIN (composition), gnlsource2));
fail_unless (gst_element_link (composition, fakesink) == TRUE);
message = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
GST_MESSAGE_ASYNC_DONE | GST_MESSAGE_ERROR);
-
gst_mini_object_unref (GST_MINI_OBJECT (message));
if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ERROR)
}
gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL);
- gst_object_unref (pipeline);
gst_object_unref (bus);
+ gst_object_unref (pipeline);
}
GST_END_TEST;
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
/* Add sources */
gst_bin_add (GST_BIN (comp), source1);
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (source1, 0, 1 * GST_SECOND, 1 * GST_SECOND);
check_start_stop_duration (source2, 1 * GST_SECOND, 2 * GST_SECOND,
1 * GST_SECOND);
gst_bin_add (GST_BIN (comp), source1);
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (source1, 0, 2 * GST_SECOND, 2 * GST_SECOND);
check_start_stop_duration (source2, 1 * GST_SECOND, 3 * GST_SECOND,
2 * GST_SECOND);
/* Second source */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (source1, 0, 1 * GST_SECOND, 1 * GST_SECOND);
check_start_stop_duration (source2, 1 * GST_SECOND, 2 * GST_SECOND,
1 * GST_SECOND);
/* Add source1 */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 4 * GST_SECOND, 4 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
/* Add source2 */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 6 * GST_SECOND, 6 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source2, "source2", 1);
/* Add operaton */
gst_bin_add (GST_BIN (comp), oper);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 6 * GST_SECOND, 6 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (oper, "oper", 1);
/* Add source1 */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 4 * GST_SECOND, 4 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
/* Add source2 */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 6 * GST_SECOND, 6 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source2, "source2", 1);
/* Add operaton */
gst_bin_add (GST_BIN (comp), oper);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (source1, 0, 4 * GST_SECOND, 4 * GST_SECOND);
check_start_stop_duration (source2, 2 * GST_SECOND, 6 * GST_SECOND,
4 * GST_SECOND);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
fail_unless (ret);
check_start_stop_duration (source1, 0, 1 * GST_SECOND, 1 * GST_SECOND);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source2, "source2", 1);
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
fail_unless (ret == TRUE);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
ret = FALSE;
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
fail_unless (ret == TRUE);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
gst_object_ref (source1);
gst_bin_remove (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 1 * GST_SECOND, 2 * GST_SECOND,
1 * GST_SECOND);
/* Re-add first source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
gst_object_unref (source1);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
ASSERT_OBJECT_REFCOUNT (source1, "source1", 1);
/* Second source */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
fail_unless (ret);
check_start_stop_duration (source1, 0 * GST_SECOND, 1 * GST_SECOND,
1 * GST_SECOND);
/* Re-add first source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
gst_object_unref (source1);
gst_bin_add (GST_BIN (comp), source2);
check_start_stop_duration (comp, 0, 0 * GST_SECOND, 0 * GST_SECOND);
/* Now commiting changes */
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
check_start_stop_duration (source1, 0, 2 * GST_SECOND, 2 * GST_SECOND);
check_start_stop_duration (source2, 1 * GST_SECOND, 3 * GST_SECOND,
/* Re-add second source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 3 * GST_SECOND, 3 * GST_SECOND);
gst_object_unref (source1);
/* Add one source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
fail_unless (ret);
check_start_stop_duration (comp, 0, 1 * GST_SECOND, 1 * GST_SECOND);
check_start_stop_duration (source1, 0, 1 * GST_SECOND, 1 * GST_SECOND);
/* Second source */
gst_bin_add (GST_BIN (comp), source2);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
check_start_stop_duration (source1, 0, 1 * GST_SECOND, 1 * GST_SECOND);
check_start_stop_duration (source2, 1 * GST_SECOND, 2 * GST_SECOND,
/* Re-add first source */
gst_bin_add (GST_BIN (comp), source1);
- g_signal_emit_by_name (comp, "commit", TRUE, &ret);
+ commit_and_wait (comp, &ret);
check_start_stop_duration (comp, 0, 2 * GST_SECOND, 2 * GST_SECOND);
gst_object_unref (source1);