[gst-cvs] gst-plugins-bad: tests: more rtpbin checks

Wim Taymans wtay at kemper.freedesktop.org
Fri May 22 06:37:45 PDT 2009


Module: gst-plugins-bad
Branch: master
Commit: 51c07ac6263916858c638eb9cc91021c29a15e0f
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=51c07ac6263916858c638eb9cc91021c29a15e0f

Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date:   Fri May 22 15:37:29 2009 +0200

tests: more rtpbin checks

---

 tests/check/elements/rtpbin.c |  113 +++++++++++++++++++++++------------------
 1 files changed, 64 insertions(+), 49 deletions(-)

diff --git a/tests/check/elements/rtpbin.c b/tests/check/elements/rtpbin.c
index d14d316..60ebd7a 100644
--- a/tests/check/elements/rtpbin.c
+++ b/tests/check/elements/rtpbin.c
@@ -27,58 +27,73 @@ GST_START_TEST (test_cleanup_send)
   GstElement *rtpbin;
   GstPad *rtp_sink, *rtp_src, *rtcp_src;
   GObject *session;
+  gint count = 2;
 
   rtpbin = gst_element_factory_make ("gstrtpbin", "rtpbin");
 
-  /* request session 0 */
-  rtp_sink = gst_element_get_request_pad (rtpbin, "send_rtp_sink_0");
-  fail_unless (rtp_sink != NULL);
-  ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 2);
-
-  /* this static pad should be created automatically now */
-  rtp_src = gst_element_get_static_pad (rtpbin, "send_rtp_src_0");
-  fail_unless (rtp_src != NULL);
-  ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 2);
-
-  /* we should be able to get an internal session 0 now */
-  g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
-  fail_unless (session != NULL);
-  g_object_unref (session);
-
-  /* get the send RTCP pad too */
-  rtcp_src = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
-  fail_unless (rtcp_src != NULL);
-  ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtcp_src", 2);
-
-  gst_element_release_request_pad (rtpbin, rtp_sink);
-  /* we should only have our refs to the pads now */
-  ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 1);
-  ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 1);
-  ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtp_src", 2);
-
-  /* the other pad should be gone now */
-  fail_unless (gst_element_get_static_pad (rtpbin, "send_rtp_src_0") == NULL);
-
-  /* internal session should still be there */
-  g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
-  fail_unless (session != NULL);
-  g_object_unref (session);
-
-  /* release the RTCP pad */
-  gst_element_release_request_pad (rtpbin, rtcp_src);
-  /* we should only have our refs to the pads now */
-  ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 1);
-  ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 1);
-  ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtp_src", 1);
-
-  /* the session should be gone now */
-  g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
-  fail_unless (session == NULL);
-
-  /* unref the request pad and the static pad */
-  gst_object_unref (rtp_sink);
-  gst_object_unref (rtp_src);
-  gst_object_unref (rtcp_src);
+  while (count--) {
+    /* request session 0 */
+    rtp_sink = gst_element_get_request_pad (rtpbin, "send_rtp_sink_0");
+    fail_unless (rtp_sink != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 2);
+
+    /* request again */
+    rtp_sink = gst_element_get_request_pad (rtpbin, "send_rtp_sink_0");
+    fail_unless (rtp_sink != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 3);
+    gst_object_unref (rtp_sink);
+
+    /* this static pad should be created automatically now */
+    rtp_src = gst_element_get_static_pad (rtpbin, "send_rtp_src_0");
+    fail_unless (rtp_src != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 2);
+
+    /* we should be able to get an internal session 0 now */
+    g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
+    fail_unless (session != NULL);
+    g_object_unref (session);
+
+    /* get the send RTCP pad too */
+    rtcp_src = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
+    fail_unless (rtcp_src != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtcp_src", 2);
+
+    /* second time */
+    rtcp_src = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
+    fail_unless (rtcp_src != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtcp_src", 3);
+    gst_object_unref (rtcp_src);
+
+    gst_element_release_request_pad (rtpbin, rtp_sink);
+    /* we should only have our refs to the pads now */
+    ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 1);
+    ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 1);
+    ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtp_src", 2);
+
+    /* the other pad should be gone now */
+    fail_unless (gst_element_get_static_pad (rtpbin, "send_rtp_src_0") == NULL);
+
+    /* internal session should still be there */
+    g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
+    fail_unless (session != NULL);
+    g_object_unref (session);
+
+    /* release the RTCP pad */
+    gst_element_release_request_pad (rtpbin, rtcp_src);
+    /* we should only have our refs to the pads now */
+    ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 1);
+    ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 1);
+    ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtp_src", 1);
+
+    /* the session should be gone now */
+    g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
+    fail_unless (session == NULL);
+
+    /* unref the request pad and the static pad */
+    gst_object_unref (rtp_sink);
+    gst_object_unref (rtp_src);
+    gst_object_unref (rtcp_src);
+  }
 
   gst_object_unref (rtpbin);
 }





More information about the Gstreamer-commits mailing list