diff options
author | Tim-Philipp Müller <tim@centricular.net> | 2013-01-19 12:51:56 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2013-01-19 12:51:56 +0000 |
commit | c0926dc7cc9a0e180621ad454ee6eb54745f5de1 (patch) | |
tree | bffa05c0851b9008acea3013935d8a792b8fddc8 | |
parent | c015b70456710cf3d743b0ea04dab73a7c93e30f (diff) |
pad: add gst_pad_get_stream_id() utility function
API: gst_pad_get_stream_id()
-rw-r--r-- | docs/gst/gstreamer-sections.txt | 2 | ||||
-rw-r--r-- | gst/gstutils.c | 40 | ||||
-rw-r--r-- | gst/gstutils.h | 2 | ||||
-rw-r--r-- | tests/check/gst/gstpad.c | 9 | ||||
-rw-r--r-- | win32/common/libgstreamer.def | 1 |
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 |