[gst-cvs] thomasvs gstreamer: gstreamer/ gstreamer/check/gst/ gstreamer/check/states/ gstreamer/gst/
From: <tho...@fr...> - 2005-09-29 18:38:14
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: thomasvs Date: Thu Sep 29 2005 11:38:00 PDT Log message: * check/gst/gstbin.c: * check/states/sinks.c: fix tests for the new warning * check/gst/gstpipeline.c: add a test for pipeline and bus interaction * gst/gstelement.c: elements should be NULL if they get disposed; add a warning if not Modified files: . : ChangeLog check/gst : gstbin.c gstpipeline.c check/states : sinks.c gst : gstelement.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.1603&r2=1.1604 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/check/gst/gstbin.c.diff?r1=1.32&r2=1.33 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/check/gst/gstpipeline.c.diff?r1=1.5&r2=1.6 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/check/states/sinks.c.diff?r1=1.8&r2=1.9 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstelement.c.diff?r1=1.369&r2=1.370 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.1603 retrieving revision 1.1604 diff -u -d -r1.1603 -r1.1604 --- ChangeLog 29 Sep 2005 18:35:38 -0000 1.1603 +++ ChangeLog 29 Sep 2005 18:37:48 -0000 1.1604 @@ -1,5 +1,15 @@ 2005-09-29 Thomas Vander Stichele <thomas at apestaart dot org> + * check/gst/gstbin.c: + * check/states/sinks.c: + fix tests for the new warning + * check/gst/gstpipeline.c: + add a test for pipeline and bus interaction + * gst/gstelement.c: + elements should be NULL if they get disposed; add a warning if not + +2005-09-29 Thomas Vander Stichele <thomas at apestaart dot org> * gst/gstobject.c: for 2.6 refcounting, make debug log more correct by printing the actual refcounts at the time of swap (Wim) Index: gstbin.c RCS file: /cvs/gstreamer/gstreamer/check/gst/gstbin.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- gstbin.c 29 Sep 2005 13:07:37 -0000 1.32 +++ gstbin.c 29 Sep 2005 18:37:48 -0000 1.33 @@ -133,6 +133,8 @@ ASSERT_OBJECT_REFCOUNT (bin, "bin", 1); /* clean up */ + gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL); gst_object_unref (bus); gst_object_unref (bin); } @@ -192,6 +194,8 @@ + fail_unless (gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL) + == GST_STATE_CHANGE_SUCCESS); Index: gstpipeline.c RCS file: /cvs/gstreamer/gstreamer/check/gst/gstpipeline.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gstpipeline.c 28 Sep 2005 15:45:21 -0000 1.5 +++ gstpipeline.c 29 Sep 2005 18:37:48 -0000 1.6 @@ -108,7 +108,7 @@ GST_END_TEST; -GST_START_TEST (test_bus) +GST_START_TEST (test_get_bus) { GstPipeline *pipeline; GstBus *bus; @@ -129,6 +129,107 @@ +GMainLoop *loop = NULL; +gboolean +message_received (GstBus * bus, GstMessage * message, gpointer data) +{ + GstElement *pipeline = GST_ELEMENT (data); + GstMessageType type = message->type; + GST_DEBUG ("message received"); + switch (type) { + case GST_MESSAGE_STATE_CHANGED: + { + GstState old, new; + GST_DEBUG ("state change message received"); + gst_message_parse_state_changed (message, &old, &new); + GST_DEBUG ("new state %d", new); + if (message->src == GST_OBJECT (pipeline) && new == GST_STATE_PLAYING) { + GST_DEBUG ("quitting main loop"); + g_main_loop_quit (loop); + } + } + break; + case GST_MESSAGE_ERROR: + g_print ("error\n"); + default: + } + return TRUE; +} +GST_START_TEST (test_bus) + GstElement *pipeline; + GstElement *src, *sink; + GstBus *bus; + guint id; + GstState current; + pipeline = gst_pipeline_new (NULL); + fail_unless (pipeline != NULL, "Could not create pipeline"); + ASSERT_OBJECT_REFCOUNT (pipeline, "pipeline", 1); + g_object_set (pipeline, "play-timeout", 0LL, NULL); + src = gst_element_factory_make ("fakesrc", NULL); + fail_unless (src != NULL); + sink = gst_element_factory_make ("fakesink", NULL); + fail_unless (sink != NULL); + gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL); + fail_unless (gst_element_link (src, sink)); + bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); + ASSERT_OBJECT_REFCOUNT (pipeline, "pipeline after get_bus", 1); + ASSERT_OBJECT_REFCOUNT (bus, "bus", 2); + id = gst_bus_add_watch (bus, message_received, pipeline); + ASSERT_OBJECT_REFCOUNT (pipeline, "pipeline after add_watch", 1); + ASSERT_OBJECT_REFCOUNT (bus, "bus after add_watch", 3); + gst_element_set_state_async (pipeline, GST_STATE_PLAYING); + loop = g_main_loop_new (NULL, FALSE); + GST_DEBUG ("going into main loop"); + g_main_loop_run (loop); + GST_DEBUG ("left main loop"); + /* PLAYING now */ + ASSERT_OBJECT_REFCOUNT_BETWEEN (pipeline, "pipeline after gone to playing", 1, + 3); + /* cleanup */ + GST_DEBUG ("cleanup"); + /* current semantics require us to go step by step; this will change */ + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_element_set_state (pipeline, GST_STATE_READY); + gst_element_set_state (pipeline, GST_STATE_NULL); + fail_unless (gst_element_get_state (pipeline, ¤t, NULL, NULL) == + GST_STATE_CHANGE_SUCCESS); + fail_unless (current == GST_STATE_NULL, "state is not NULL but %d", current); + ASSERT_OBJECT_REFCOUNT (pipeline, "pipeline at start of cleanup", 1); + ASSERT_OBJECT_REFCOUNT (bus, "bus at start of cleanup", 3); + fail_unless (g_source_remove (id)); + ASSERT_OBJECT_REFCOUNT (bus, "bus after removing source", 2); + GST_DEBUG ("unreffing pipeline"); + gst_object_unref (pipeline); + ASSERT_OBJECT_REFCOUNT (bus, "bus after unref pipeline", 1); + gst_object_unref (bus); +GST_END_TEST; Suite * gst_pipeline_suite (void) @@ -139,6 +240,7 @@ tcase_add_test (tc_chain, test_async_state_change_empty); tcase_add_test (tc_chain, test_async_state_change_fake_ready); tcase_add_test (tc_chain, test_async_state_change_fake); + tcase_add_test (tc_chain, test_get_bus); tcase_add_test (tc_chain, test_bus); return s; Index: sinks.c RCS file: /cvs/gstreamer/gstreamer/check/states/sinks.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- sinks.c 2 Sep 2005 15:41:56 -0000 1.8 +++ sinks.c 29 Sep 2005 18:37:48 -0000 1.9 @@ -51,6 +51,9 @@ ret = gst_element_set_state (sink, GST_STATE_READY); fail_unless (ret == GST_STATE_CHANGE_SUCCESS, "failed to go to ready"); + ret = gst_element_set_state (sink, GST_STATE_NULL); + fail_unless (ret == GST_STATE_CHANGE_SUCCESS, "failed to go to null"); gst_object_unref (sink); Index: gstelement.c RCS file: /cvs/gstreamer/gstreamer/gst/gstelement.c,v retrieving revision 1.369 retrieving revision 1.370 diff -u -d -r1.369 -r1.370 --- gstelement.c 29 Sep 2005 09:39:36 -0000 1.369 +++ gstelement.c 29 Sep 2005 18:37:48 -0000 1.370 @@ -2121,6 +2121,9 @@ GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "dispose"); + g_return_if_fail (GST_STATE (element) == GST_STATE_NULL); + g_return_if_fail (GST_STATE_PENDING (element) == GST_STATE_VOID_PENDING); /* first we break all our links with the outside */ while (element->pads) { gst_element_remove_pad (element, GST_PAD_CAST (element->pads->data)); @@ -2135,7 +2138,7 @@ gst_object_replace ((GstObject **) & element->bus, NULL); GST_UNLOCK (element); - GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "dispose parent"); + GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "parent class dispose"); G_OBJECT_CLASS (parent_class)->dispose (object); |