query: add caps query
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 14 Nov 2011 10:26:17 +0000 (11:26 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 14 Nov 2011 10:26:17 +0000 (11:26 +0100)
gst/gstquark.c
gst/gstquark.h
gst/gstquery.c
gst/gstquery.h

index ffb72db..1b6dd38 100644 (file)
@@ -55,7 +55,7 @@ static const gchar *_quark_strings[] = {
   "GstQueryAllocation", "need-pool", "meta", "pool", "GstEventCaps",
   "GstEventReconfigure", "segment", "GstQueryScheduling", "pull-mode",
   "random-access", "sequential", "allocator", "GstEventFlushStop", "options",
-  "GstQueryAcceptCaps", "result"
+  "GstQueryAcceptCaps", "result", "GstQueryCaps"
 };
 
 GQuark _priv_gst_quark_table[GST_QUARK_MAX];
index 430ba07..0e3553f 100644 (file)
@@ -157,8 +157,9 @@ typedef enum _GstQuarkId
   GST_QUARK_OPTIONS = 128,
   GST_QUARK_QUERY_ACCEPT_CAPS = 129,
   GST_QUARK_RESULT = 130,
+  GST_QUARK_QUERY_CAPS = 131,
 
-  GST_QUARK_MAX = 131
+  GST_QUARK_MAX = 132
 } GstQuarkId;
 
 extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];
index e08e6a5..d2d66f9 100644 (file)
@@ -106,6 +106,7 @@ static GstQueryTypeDefinition standard_definitions[] = {
   {GST_QUERY_ALLOCATION, "allocation", "Allocation properties", 0},
   {GST_QUERY_SCHEDULING, "scheduling", "Scheduling properties", 0},
   {GST_QUERY_ACCEPT_CAPS, "accept-caps", "Accept caps", 0},
+  {GST_QUERY_CAPS, "caps", "Caps", 0},
   {GST_QUERY_NONE, NULL, NULL, 0}
 };
 
@@ -2072,3 +2073,64 @@ gst_query_parse_accept_caps_result (GstQuery * query, gboolean * result)
   gst_structure_id_get (structure,
       GST_QUARK (RESULT), G_TYPE_BOOLEAN, result, NULL);
 }
+
+/**
+ * gst_query_new_caps
+ *
+ * Constructs a new query object for querying the caps.
+ *
+ * Free-function: gst_query_unref
+ *
+ * Returns: (transfer full): a new #GstQuery
+ */
+GstQuery *
+gst_query_new_caps (void)
+{
+  GstQuery *query;
+  GstStructure *structure;
+
+  structure = gst_structure_new_id (GST_QUARK (QUERY_CAPS),
+      GST_QUARK (CAPS), GST_TYPE_CAPS, NULL, NULL);
+  query = gst_query_new (GST_QUERY_CAPS, structure);
+
+  return query;
+}
+
+/**
+ * gst_query_set_caps:
+ * @query: The query to use
+ * @caps: (in): A pointer to the caps
+ *
+ * Set the @caps in @query.
+ */
+void
+gst_query_set_caps (GstQuery * query, GstCaps * caps)
+{
+  GstStructure *structure;
+
+  g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_CAPS);
+  g_return_if_fail (gst_query_is_writable (query));
+
+  structure = GST_QUERY_STRUCTURE (query);
+  gst_structure_id_set (structure, GST_QUARK (CAPS), GST_TYPE_CAPS, caps, NULL);
+}
+
+/**
+ * gst_query_parse_caps:
+ * @query: The query to parse
+ * @caps: (out): A pointer to the caps
+ *
+ * Get the caps from @query. The caps remains valid as long as @query remains
+ * valid.
+ */
+void
+gst_query_parse_caps (GstQuery * query, GstCaps ** caps)
+{
+  GstStructure *structure;
+
+  g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_CAPS);
+
+  structure = GST_QUERY_STRUCTURE (query);
+  *caps = g_value_get_boxed (gst_structure_id_get_value (structure,
+          GST_QUARK (CAPS)));
+}
index 2536637..2fc75ed 100644 (file)
@@ -56,6 +56,7 @@ G_BEGIN_DECLS
  * @GST_QUERY_ALLOCATION: the buffer allocation properties
  * @GST_QUERY_SCHEDULING: the scheduling properties
  * @GST_QUERY_ACCEPT_CAPS: the accept caps query
+ * @GST_QUERY_CAPS: the caps query
  *
  * Standard predefined Query types
  */
@@ -77,7 +78,8 @@ typedef enum {
   GST_QUERY_URI,
   GST_QUERY_ALLOCATION,
   GST_QUERY_SCHEDULING,
-  GST_QUERY_ACCEPT_CAPS
+  GST_QUERY_ACCEPT_CAPS,
+  GST_QUERY_CAPS
 } GstQueryType;
 
 /**
@@ -386,6 +388,11 @@ void            gst_query_parse_accept_caps        (GstQuery *query, GstCaps **c
 void            gst_query_set_accept_caps_result   (GstQuery *query, gboolean result);
 void            gst_query_parse_accept_caps_result (GstQuery *query, gboolean *result);
 
+/* caps query */
+GstQuery *      gst_query_new_caps                 (void);
+void            gst_query_set_caps                 (GstQuery *query, GstCaps *caps);
+void            gst_query_parse_caps               (GstQuery *query, GstCaps **caps);
+
 G_END_DECLS
 
 #endif /* __GST_QUERY_H__ */