GstBin *bin;
GstBus *bus;
GstMessage *message;
+ GstStateChangeReturn ret;
bin = GST_BIN (gst_bin_new (NULL));
fail_unless (bin != NULL, "Could not create bin");
gst_element_set_bus (GST_ELEMENT_CAST (bin), bus);
/* change state, spawning a message, causing an incref on the bin */
- gst_element_set_state (GST_ELEMENT (bin), GST_STATE_READY);
+ ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_READY);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
ASSERT_OBJECT_REFCOUNT (bin, "bin", 2);
ASSERT_OBJECT_REFCOUNT (bin, "bin", 1);
/* clean up */
- gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL);
+ ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
gst_object_unref (bus);
gst_object_unref (bin);
GstElement *src;
GstBus *bus;
GstMessage *message;
+ GstStateChangeReturn ret;
bin = GST_BIN (gst_bin_new (NULL));
fail_unless (bin != NULL, "Could not create bin");
* - first for fakesrc, forwarded to bin's bus, causing incref on fakesrc
* - second for bin, causing an incref on the bin */
GST_DEBUG ("setting bin to READY");
- fail_unless (gst_element_set_state (GST_ELEMENT (bin), GST_STATE_READY)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_READY);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
ASSERT_OBJECT_REFCOUNT (src, "src", 2);
ASSERT_OBJECT_REFCOUNT (bin, "bin", 2);
ASSERT_OBJECT_REFCOUNT (bin, "bin", 1);
/* clean up */
- fail_unless (gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
gst_object_unref (bus);
gst_object_unref (bin);
}
GstPipeline *pipeline;
GstElement *src, *sink;
GstBus *bus;
+ GstStateChangeReturn ret;
+ GstState current, pending;
pipeline = GST_PIPELINE (gst_pipeline_new (NULL));
fail_unless (pipeline != NULL, "Could not create pipeline");
/* change state to READY, spawning three messages */
GST_DEBUG ("setting pipeline to READY");
- fail_unless (gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_READY)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_READY);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
/* each object is referenced by a message */
ASSERT_OBJECT_REFCOUNT (bus, "bus", 2);
/* change state to PAUSED, spawning three messages */
GST_DEBUG ("setting pipeline to PAUSED");
- fail_unless (gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PAUSED)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PAUSED);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
+ ret =
+ gst_element_get_state (GST_ELEMENT (pipeline), ¤t, &pending, NULL);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
+ fail_unless (current == GST_STATE_PAUSED);
+ fail_unless (pending == GST_STATE_VOID_PENDING);
/* each object is referenced by a message;
* base_sink_chain has taken a refcount on the sink, and is blocked on
/* change state to PLAYING, spawning three messages */
GST_DEBUG ("setting pipeline to PLAYING");
- fail_unless (gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
+ ret =
+ gst_element_get_state (GST_ELEMENT (pipeline), ¤t, &pending, NULL);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
+ fail_unless (current == GST_STATE_PLAYING);
+ fail_unless (pending == GST_STATE_VOID_PENDING);
/* each object is referenced by one message
* sink might have an extra reference if it's still blocked on preroll
/* go back to READY, spawning six messages */
GST_DEBUG ("setting pipeline to READY");
- fail_unless (gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_READY)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_READY);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
/* each object is referenced by two messages */
ASSERT_OBJECT_REFCOUNT (src, "src", 3);
ASSERT_OBJECT_REFCOUNT (pipeline, "pipeline", 1);
/* setting pipeline to NULL flushes the bus automatically */
- fail_unless (gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
ASSERT_OBJECT_REFCOUNT (src, "src", 1);
ASSERT_OBJECT_REFCOUNT (sink, "sink", 1);
{
GstElement *src, *sink, *bin;
GstBus *bus;
+ GstStateChangeReturn ret;
bin = gst_element_factory_make ("bin", NULL);
fail_unless (bin != NULL, "Could not create bin");
fail_unless (gst_element_link (src, sink), "could not link src and sink");
/* change state, spawning two times three messages, minus one async */
- fail_unless (gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PAUSED)
- == GST_STATE_CHANGE_ASYNC);
+ ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PAUSED);
+ fail_unless (ret == GST_STATE_CHANGE_ASYNC);
pop_messages (bus, 5);
fail_unless (gst_bus_have_pending (bus) == FALSE,
"Unexpected messages on bus");
- fail_unless (gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PLAYING)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PLAYING);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
pop_messages (bus, 3);
"Unexpected messages on bus");
/* setting bin to NULL flushes the bus automatically */
- fail_unless (gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL)
- == GST_STATE_CHANGE_SUCCESS);
+ ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL);
+ fail_unless (ret == GST_STATE_CHANGE_SUCCESS);
/* clean up */
gst_object_unref (bus);
/* don't set to NULL that will set the bus flushing and kill our messages */
ret = gst_element_set_state (pipeline, GST_STATE_READY);
fail_if (ret != GST_STATE_CHANGE_SUCCESS, "State change to READY failed");
+ ret = gst_element_get_state (pipeline, NULL, NULL, NULL);
+ fail_if (ret != GST_STATE_CHANGE_SUCCESS, "State change to READY failed");
/* TODO: do we need to check downwards state change order as well? */
pop_messages (bus, 4); /* pop playing => paused messages off the bus */
{
GstElement *src, *identity, *sink, *pipeline;
GstStateChangeReturn ret;
+ GstState current, pending;
GstBus *bus;
/* (2) Now again, but check other code path where we don't have
ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
fail_if (ret != GST_STATE_CHANGE_SUCCESS, "State change to PLAYING failed");
+ ret = gst_element_get_state (pipeline, ¤t, &pending, NULL);
+ fail_if (ret != GST_STATE_CHANGE_SUCCESS, "State change to PLAYING failed");
+ fail_if (current != GST_STATE_PLAYING, "State change to PLAYING failed");
+ fail_if (pending != GST_STATE_VOID_PENDING, "State change to PLAYING failed");
/* NULL => READY */
ASSERT_STATE_CHANGE_MSG (bus, sink, GST_STATE_NULL, GST_STATE_READY, 201);
Suite *s = suite_create ("GstBin");
TCase *tc_chain = tcase_create ("bin tests");
+ tcase_set_timeout (tc_chain, 0);
+
suite_add_tcase (s, tc_chain);
tcase_add_test (tc_chain, test_interface);
tcase_add_test (tc_chain, test_children_state_change_order_flagged_sink);