[gst-cvs] gstreamer: GstMessage: Add STREAM_STATUS message methods

Wim Taymans wtay at kemper.freedesktop.org
Mon May 11 14:59:19 PDT 2009


Module: gstreamer
Branch: master
Commit: e72efeccd1bdc62a8a0a4a0ab9559708c880cb80
URL:    http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=e72efeccd1bdc62a8a0a4a0ab9559708c880cb80

Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date:   Tue Apr 21 13:42:01 2009 +0200

GstMessage: Add STREAM_STATUS message methods

Add methods to handle the stream_status message types.

---

 docs/gst/gstreamer-sections.txt |   12 ++++-
 gst/gstmessage.c                |  109 +++++++++++++++++++++++++++++++++++++++
 gst/gstmessage.h                |   34 ++++++++++++
 win32/common/libgstreamer.def   |    5 ++
 4 files changed, 159 insertions(+), 1 deletions(-)

diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt
index b261c47..83bfa67 100644
--- a/docs/gst/gstreamer-sections.txt
+++ b/docs/gst/gstreamer-sections.txt
@@ -1043,7 +1043,6 @@ gst_iterator_result_get_type
 <TITLE>GstMessage</TITLE>
 GstMessage
 GstMessageType
-GstStructureChangeType
 GST_MESSAGE_SRC
 GST_MESSAGE_TIMESTAMP
 GST_MESSAGE_TYPE
@@ -1094,10 +1093,19 @@ gst_message_new_latency
 gst_message_new_async_start
 gst_message_parse_async_start
 gst_message_new_async_done
+
+GstStructureChangeType
 gst_message_new_structure_change
 gst_message_parse_structure_change
 gst_message_new_request_state
 gst_message_parse_request_state
+
+GstStreamStatusType
+gst_message_new_stream_status
+gst_message_parse_stream_status
+gst_message_set_stream_status_object
+gst_message_get_stream_status_object
+
 <SUBSECTION Standard>
 GstMessageClass
 GST_MESSAGE
@@ -1109,10 +1117,12 @@ GST_IS_MESSAGE_CLASS
 GST_MESSAGE_GET_CLASS
 GST_TYPE_MESSAGE_TYPE
 GST_TYPE_STRUCTURE_CHANGE_TYPE
+GST_TYPE_STREAM_STATUS_TYPE
 <SUBSECTION Private>
 gst_message_get_type
 gst_message_type_get_type
 gst_structure_change_type_get_type
+gst_stream_status_type_get_type
 GST_MESSAGE_COND
 GST_MESSAGE_GET_LOCK
 GST_MESSAGE_LOCK
diff --git a/gst/gstmessage.c b/gst/gstmessage.c
index 3078ccf..e2226d6 100644
--- a/gst/gstmessage.c
+++ b/gst/gstmessage.c
@@ -1458,3 +1458,112 @@ gst_message_parse_request_state (GstMessage * message, GstState * state)
     *state = g_value_get_enum (gst_structure_id_get_value (message->structure,
             GST_QUARK (NEW_STATE)));
 }
+
+/**
+ * gst_message_new_stream_status:
+ * @src: The object originating the message.
+ * @type: The stream status type.
+ * @owner: The owner element of @src.
+ *
+ * Create a new stream status message. This message is posted when a streaming
+ * thread is created/destroyed or when the state changed.
+ * 
+ * Returns: The new stream status message.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.24.
+ */
+GstMessage *
+gst_message_new_stream_status (GstObject * src, GstStreamStatusType type,
+    GstElement * owner)
+{
+  GstMessage *message;
+  GstStructure *structure;
+
+  structure = gst_structure_empty_new ("GstMessageStreamStatus");
+  gst_structure_id_set (structure,
+      GST_QUARK (TYPE), GST_TYPE_STREAM_STATUS_TYPE, (gint) type,
+      GST_QUARK (OWNER), GST_TYPE_ELEMENT, owner, NULL);
+  message = gst_message_new_custom (GST_MESSAGE_STREAM_STATUS, src, structure);
+
+  return message;
+}
+
+/**
+ * gst_message_parse_stream_status:
+ * @message: A valid #GstMessage of type GST_MESSAGE_STREAM_STATUS.
+ * @type: A pointer to hold the status type
+ * @owner: The owner element of the message source
+ *
+ * Extracts the stream status type and owner the GstMessage.
+ *
+ * Since: 0.10.24.
+ *
+ * MT safe.
+ */
+void
+gst_message_parse_stream_status (GstMessage * message,
+    GstStreamStatusType * type, GstElement ** owner)
+{
+  const GValue *owner_gvalue;
+
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_STREAM_STATUS);
+
+  owner_gvalue =
+      gst_structure_id_get_value (message->structure, GST_QUARK (OWNER));
+  g_return_if_fail (owner_gvalue != NULL);
+
+  if (type)
+    *type = g_value_get_enum (gst_structure_id_get_value (message->structure,
+            GST_QUARK (TYPE)));
+  if (owner)
+    *owner = (GstElement *) g_value_get_object (owner_gvalue);
+}
+
+/**
+ * gst_message_set_stream_status_object:
+ * @message: A valid #GstMessage of type GST_MESSAGE_STREAM_STATUS.
+ * @object: the object controlling the streaming
+ *
+ * Configures the object handling the streaming thread. This is usually a
+ * GstTask object but other objects might be added in the future.
+ *
+ * Since: 0.10.24
+ */
+void
+gst_message_set_stream_status_object (GstMessage * message,
+    const GValue * object)
+{
+  g_return_if_fail (GST_IS_MESSAGE (message));
+  g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_STREAM_STATUS);
+
+  gst_structure_id_set_value (message->structure, GST_QUARK (OBJECT), object);
+}
+
+/**
+ * gst_message_get_stream_status_object:
+ * @message: A valid #GstMessage of type GST_MESSAGE_STREAM_STATUS.
+ *
+ * Extracts the object managing the streaming thread from @message.
+ *
+ * Returns: a GValue containing the object that manages the streaming thread.
+ * This object is usually of type GstTask but other types can be added in the
+ * future. The object remains valid as long as @message is valid.
+ *
+ * Since: 0.10.24
+ */
+const GValue *
+gst_message_get_stream_status_object (GstMessage * message)
+{
+  const GValue *result;
+
+  g_return_val_if_fail (GST_IS_MESSAGE (message), NULL);
+  g_return_val_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_STREAM_STATUS,
+      NULL);
+
+  result = gst_structure_id_get_value (message->structure, GST_QUARK (OBJECT));
+
+  return result;
+}
diff --git a/gst/gstmessage.h b/gst/gstmessage.h
index 6b9aea3..6ed1790 100644
--- a/gst/gstmessage.h
+++ b/gst/gstmessage.h
@@ -198,6 +198,32 @@ typedef enum {
 } GstStructureChangeType;
 
 /**
+ * GstStreamStatusType:
+ * @GST_STREAM_STATUS_TYPE_CREATE: A new thread need to be created.
+ * @GST_STREAM_STATUS_TYPE_ENTER: a thread entered its loop function
+ * @GST_STREAM_STATUS_TYPE_LEAVE: a thread left its loop function
+ * @GST_STREAM_STATUS_TYPE_DESTROY: a thread is destroyed
+ * @GST_STREAM_STATUS_TYPE_START: a thread is started
+ * @GST_STREAM_STATUS_TYPE_PAUSE: a thread is paused
+ * @GST_STREAM_STATUS_TYPE_STOP: a thread is stopped
+ *
+ * The type of a #GstMessageStreamStatus. The stream status messages inform the
+ * application of new streaming threads and their status.
+ *
+ * Since: 0.10.24
+ */
+typedef enum {
+  GST_STREAM_STATUS_TYPE_CREATE   = 0,
+  GST_STREAM_STATUS_TYPE_ENTER    = 1,
+  GST_STREAM_STATUS_TYPE_LEAVE    = 2,
+  GST_STREAM_STATUS_TYPE_DESTROY  = 3,
+
+  GST_STREAM_STATUS_TYPE_START    = 8,
+  GST_STREAM_STATUS_TYPE_PAUSE    = 9,
+  GST_STREAM_STATUS_TYPE_STOP     = 10
+} GstStreamStatusType;
+
+/**
  * GstMessage:
  * @mini_object: the parent structure
  * @type: the #GstMessageType of the message
@@ -405,6 +431,14 @@ GstMessage *	gst_message_new_structure_change   (GstObject * src, GstStructureCh
 void		gst_message_parse_structure_change (GstMessage *message, GstStructureChangeType *type,
                                                     GstElement **owner, gboolean *busy);
 
+/* STREAM STATUS */
+GstMessage *	gst_message_new_stream_status        (GstObject * src, GstStreamStatusType type,
+                                                      GstElement *owner);
+void		gst_message_parse_stream_status      (GstMessage *message, GstStreamStatusType *type,
+                                                      GstElement **owner);
+void            gst_message_set_stream_status_object (GstMessage *message, const GValue *object);
+const GValue *  gst_message_get_stream_status_object (GstMessage *message);
+
 /* REQUEST_STATE */
 GstMessage *    gst_message_new_request_state   (GstObject * src, GstState state);
 void            gst_message_parse_request_state (GstMessage * message, GstState *state);
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index 2de554e..19eab26 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -446,6 +446,7 @@ EXPORTS
 	gst_marshal_VOID__POINTER_OBJECT
 	gst_marshal_VOID__UINT_BOXED
 	gst_message_get_seqnum
+	gst_message_get_stream_status_object
 	gst_message_get_structure
 	gst_message_get_type
 	gst_message_new_application
@@ -467,6 +468,7 @@ EXPORTS
 	gst_message_new_segment_start
 	gst_message_new_state_changed
 	gst_message_new_state_dirty
+	gst_message_new_stream_status
 	gst_message_new_structure_change
 	gst_message_new_tag
 	gst_message_new_warning
@@ -483,11 +485,13 @@ EXPORTS
 	gst_message_parse_segment_done
 	gst_message_parse_segment_start
 	gst_message_parse_state_changed
+	gst_message_parse_stream_status
 	gst_message_parse_structure_change
 	gst_message_parse_tag
 	gst_message_parse_warning
 	gst_message_set_buffering_stats
 	gst_message_set_seqnum
+	gst_message_set_stream_status_object
 	gst_message_type_get_name
 	gst_message_type_get_type
 	gst_message_type_to_quark
@@ -815,6 +819,7 @@ EXPORTS
 	gst_static_pad_template_get_type
 	gst_stream_error_get_type
 	gst_stream_error_quark
+	gst_stream_status_type_get_type
 	gst_structure_change_type_get_type
 	gst_structure_copy
 	gst_structure_empty_new





More information about the Gstreamer-commits mailing list