summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2013-01-19 12:51:56 +0000
committerTim-Philipp Müller <tim@centricular.net>2013-01-19 12:51:56 +0000
commitc0926dc7cc9a0e180621ad454ee6eb54745f5de1 (patch)
treebffa05c0851b9008acea3013935d8a792b8fddc8
parentc015b70456710cf3d743b0ea04dab73a7c93e30f (diff)
pad: add gst_pad_get_stream_id() utility function
API: gst_pad_get_stream_id()
-rw-r--r--docs/gst/gstreamer-sections.txt2
-rw-r--r--gst/gstutils.c40
-rw-r--r--gst/gstutils.h2
-rw-r--r--tests/check/gst/gstpad.c9
-rw-r--r--win32/common/libgstreamer.def1
5 files changed, 54 insertions, 0 deletions
diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt
index 02306c10fe..a2717b6e93 100644
--- a/docs/gst/gstreamer-sections.txt
+++ b/docs/gst/gstreamer-sections.txt
@@ -1772,6 +1772,8 @@ gst_pad_create_stream_id
gst_pad_create_stream_id_printf
gst_pad_create_stream_id_printf_valist
+gst_pad_get_stream_id
+
GstPadForwardFunction
gst_pad_forward
<SUBSECTION Core>
diff --git a/gst/gstutils.c b/gst/gstutils.c
index 7c20a72ed3..8968024123 100644
--- a/gst/gstutils.c
+++ b/gst/gstutils.c
@@ -3707,3 +3707,43 @@ gst_pad_create_stream_id (GstPad * pad, GstElement * parent,
{
return gst_pad_create_stream_id_printf (pad, parent, stream_id, NULL);
}
+
+/**
+ * gst_pad_get_stream_id:
+ * @pad: A source #GstPad
+ *
+ * Returns the current stream-id for the @pad, or %NULL if none has been
+ * set yet, i.e. the pad has not received a stream-start event yet.
+ *
+ * This is a convenience wrapper around gst_pad_get_sticky_event() and
+ * gst_event_parse_stream_start().
+ *
+ * The returned stream-id string should be treated as an opaque string, its
+ * contents should not be interpreted.
+ *
+ * Returns: a newly-allocated copy of the stream-idfor @pad, or %NULL.
+ * g_free() the returned string when no longer needed.
+ *
+ * Since: 1.2
+ */
+gchar *
+gst_pad_get_stream_id (GstPad * pad)
+{
+ const gchar *stream_id = NULL;
+ GstEvent *event;
+ gchar *ret = NULL;
+
+ g_return_val_if_fail (GST_IS_PAD (pad), NULL);
+
+ event = gst_pad_get_sticky_event (pad, GST_EVENT_STREAM_START, 0);
+ if (event != NULL) {
+ gst_event_parse_stream_start (event, &stream_id);
+ ret = g_strdup (stream_id);
+ gst_event_unref (event);
+ GST_LOG_OBJECT (pad, "pad has stream-id '%s'", ret);
+ } else {
+ GST_DEBUG_OBJECT (pad, "pad has not received a stream-start event yet");
+ }
+
+ return ret;
+}
diff --git a/gst/gstutils.h b/gst/gstutils.h
index aa216dc49e..219e607bd0 100644
--- a/gst/gstutils.h
+++ b/gst/gstutils.h
@@ -892,6 +892,8 @@ gchar * gst_pad_create_stream_id (GstPad * pad, Gs
gchar * gst_pad_create_stream_id_printf (GstPad * pad, GstElement * parent, const gchar *stream_id, ...);
gchar * gst_pad_create_stream_id_printf_valist (GstPad * pad, GstElement * parent, const gchar *stream_id, va_list var_args);
+gchar * gst_pad_get_stream_id (GstPad * pad);
+
/* bin functions */
void gst_bin_add_many (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED;
void gst_bin_remove_many (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED;
diff --git a/tests/check/gst/gstpad.c b/tests/check/gst/gstpad.c
index 61275f46ee..2a6d3488a9 100644
--- a/tests/check/gst/gstpad.c
+++ b/tests/check/gst/gstpad.c
@@ -1479,15 +1479,24 @@ GST_START_TEST (test_sticky_events)
GstPad *srcpad, *sinkpad;
GstCaps *caps;
GstSegment seg;
+ gchar *id;
/* make unlinked srcpad */
srcpad = gst_pad_new ("src", GST_PAD_SRC);
fail_unless (srcpad != NULL);
gst_pad_set_active (srcpad, TRUE);
+ /* test stream-start */
+ fail_unless (gst_pad_get_stream_id (srcpad) == NULL);
+
/* push an event, it should be sticky on the srcpad */
gst_pad_push_event (srcpad, gst_event_new_stream_start ("test"));
+ /* let's see if it stuck */
+ id = gst_pad_get_stream_id (srcpad);
+ fail_unless_equals_string (id, "test");
+ g_free (id);
+
/* make a caps event */
caps = gst_caps_new_empty_simple ("foo/bar");
gst_pad_push_event (srcpad, gst_event_new_caps (caps));
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index c3a444ff9c..5582376f28 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -680,6 +680,7 @@ EXPORTS
gst_pad_get_peer
gst_pad_get_range
gst_pad_get_sticky_event
+ gst_pad_get_stream_id
gst_pad_get_type
gst_pad_has_current_caps
gst_pad_is_active