diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-07-05 13:03:10 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-07-05 13:04:31 +0200 |
commit | aa2309e54ad8123b37e6463a712d69b6acfdbec4 (patch) | |
tree | 3006dd8d19e1d66f79f49f24341875e953621a05 /gst/gstevent.c | |
parent | 964ea9eccb66f4bee4d79f980859f00288931220 (diff) | |
download | gstreamer-aa2309e54ad8123b37e6463a712d69b6acfdbec4.tar.gz |
event: Add format and position to the segment-done event
Diffstat (limited to 'gst/gstevent.c')
-rw-r--r-- | gst/gstevent.c | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/gst/gstevent.c b/gst/gstevent.c index 980747dc5d..d07c8140c9 100644 --- a/gst/gstevent.c +++ b/gst/gstevent.c @@ -1739,7 +1739,9 @@ gst_event_parse_toc_select (GstEvent * event, gchar ** uid) /** * gst_event_new_segment_done: - + * @format: The format of the position being done + * @position: The position of the segment being done + * * Create a new segment-done event. This event is sent by elements that * finish playback of a segment as a result of a segment seek. * @@ -1748,13 +1750,48 @@ gst_event_parse_toc_select (GstEvent * event, gchar ** uid) * Since: 0.11.0 */ GstEvent * -gst_event_new_segment_done (void) +gst_event_new_segment_done (GstFormat format, gint64 position) { GstEvent *event; + GstStructure *structure; GST_CAT_INFO (GST_CAT_EVENT, "creating segment-done event"); - event = gst_event_new_custom (GST_EVENT_SEGMENT_DONE, NULL); + structure = gst_structure_new_id (GST_QUARK (EVENT_SEGMENT_DONE), + GST_QUARK (FORMAT), GST_TYPE_FORMAT, format, + GST_QUARK (POSITION), G_TYPE_INT64, position, NULL); + + event = gst_event_new_custom (GST_EVENT_SEGMENT_DONE, structure); return event; } + +/** + * gst_event_parse_segment_done: + * @event: A valid #GstEvent of type GST_EVENT_SEGMENT_DONE. + * @format: (out): Result location for the format, or NULL + * @position: (out): Result location for the position, or NULL + * + * Extracts the position and format from the segment done message. + * + */ +void +gst_event_parse_segment_done (GstEvent * event, GstFormat * format, + gint64 * position) +{ + const GstStructure *structure; + const GValue *val; + + g_return_if_fail (event != NULL); + g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT_DONE); + + structure = gst_event_get_structure (event); + + val = gst_structure_id_get_value (structure, GST_QUARK (FORMAT)); + if (format != NULL) + *format = g_value_get_enum (val); + + val = gst_structure_id_get_value (structure, GST_QUARK (POSITION)); + if (position != NULL) + *position = g_value_get_int64 (val); +} |