gstpad: Probes that return HANDLED can reset the data info field
[platform/upstream/gstreamer.git] / gst / gstmeta.h
index bd7b2e2..d617ef8 100644 (file)
  *
  * You should have received a copy of the GNU Library General Public
  * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
  */
 
 
 #ifndef __GST_META_H__
 #define __GST_META_H__
 
+#include <glib.h>
+
 G_BEGIN_DECLS
 
 typedef struct _GstMeta GstMeta;
@@ -34,8 +36,8 @@ typedef struct _GstMetaInfo GstMetaInfo;
  * GstMetaFlags:
  * @GST_META_FLAG_NONE: no flags
  * @GST_META_FLAG_READONLY: metadata should not be modified
- * @GST_META_FLAG_POOLED: metadata is managed by a bufferpool and should not
- *    be removed
+ * @GST_META_FLAG_POOLED: metadata is managed by a bufferpool
+ * @GST_META_FLAG_LOCKED: metadata should not be removed
  * @GST_META_FLAG_LAST: additional flags can be added starting from this flag.
  *
  * Extra metadata flags.
@@ -44,6 +46,7 @@ typedef enum {
   GST_META_FLAG_NONE        = 0,
   GST_META_FLAG_READONLY    = (1 << 0),
   GST_META_FLAG_POOLED      = (1 << 1),
+  GST_META_FLAG_LOCKED      = (1 << 2),
 
   GST_META_FLAG_LAST        = (1 << 16)
 } GstMetaFlags;
@@ -81,6 +84,15 @@ typedef enum {
 #define GST_META_FLAG_UNSET(meta,flag)         (GST_META_FLAGS (meta) &= ~(flag))
 
 /**
+ * GST_META_TAG_MEMORY_STR:
+ *
+ * This metadata stays relevant as long as memory layout is unchanged.
+ *
+ * Since: 1.2
+ */
+#define GST_META_TAG_MEMORY_STR "memory"
+
+/**
  * GstMeta:
  * @flags: extra flags for the metadata
  * @info: pointer to the #GstMetaInfo
@@ -93,6 +105,8 @@ struct _GstMeta {
   const GstMetaInfo *info;
 };
 
+#include <gst/gstbuffer.h>
+
 /**
  * GstMetaInitFunction:
  * @meta: a #GstMeta
@@ -117,7 +131,8 @@ typedef void (*GstMetaFreeFunction)     (GstMeta *meta, GstBuffer *buffer);
  *
  * GQuark for the "gst-copy" transform.
  */
-GST_EXPORT GQuark _gst_meta_transform_copy;
+
+GST_API GQuark _gst_meta_transform_copy;
 
 /**
  * GST_META_TRANSFORM_IS_COPY:
@@ -165,8 +180,8 @@ typedef gboolean (*GstMetaTransformFunction) (GstBuffer *transbuf,
 
 /**
  * GstMetaInfo:
- * @api: tag indentifying the metadata structure and api
- * @type: type indentifying the implementor of the api
+ * @api: tag identifying the metadata structure and api
+ * @type: type identifying the implementor of the api
  * @size: size of the metadata
  * @init_func: function for initializing the metadata
  * @free_func: function for freeing the metadata
@@ -184,31 +199,52 @@ struct _GstMetaInfo {
   GstMetaFreeFunction        free_func;
   GstMetaTransformFunction   transform_func;
 
-  /*< private >*/
-  gpointer _gst_reserved[GST_PADDING];
+  /* No padding needed, GstMetaInfo is always allocated by GStreamer and is
+   * not subclassable or stack-allocatable, so we can extend it as we please
+   * just like interfaces */
 };
 
+GST_API
 GType                gst_meta_api_type_register (const gchar *api,
                                                  const gchar **tags);
+GST_API
 gboolean             gst_meta_api_type_has_tag  (GType api, GQuark tag);
 
+GST_API
 const GstMetaInfo *  gst_meta_register          (GType api, const gchar *impl,
                                                  gsize size,
                                                  GstMetaInitFunction      init_func,
                                                  GstMetaFreeFunction      free_func,
                                                  GstMetaTransformFunction transform_func);
+GST_API
 const GstMetaInfo *  gst_meta_get_info          (const gchar * impl);
 
+GST_API
+const gchar* const*  gst_meta_api_type_get_tags (GType api);
+
+GST_API
+guint64              gst_meta_get_seqnum        (const GstMeta * meta);
+
+GST_API
+gint                 gst_meta_compare_seqnum    (const GstMeta * meta1,
+                                                 const GstMeta * meta2);
+
 /* some default tags */
-GST_EXPORT GQuark _gst_meta_tag_memory;
+
+GST_API GQuark _gst_meta_tag_memory;
 
 /**
  * GST_META_TAG_MEMORY:
  *
  * Metadata tagged with this tag depends on the particular memory
  * or buffer that it is on.
+ *
+ * Deprecated: The GQuarks are not exported by any public API, use
+ *   GST_META_TAG_MEMORY_STR instead.
  */
+#ifndef GST_DISABLE_DEPRECATED
 #define GST_META_TAG_MEMORY (_gst_meta_tag_memory)
+#endif
 
 G_END_DECLS