2 * Copyright (C) 2009 Wim Taymans <wim.taymans@gmail.be>
4 * gstmeta.h: Header for Metadata structures
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
23 #ifndef __GST_META_H__
24 #define __GST_META_H__
28 typedef struct _GstMeta GstMeta;
29 typedef struct _GstMetaInfo GstMetaInfo;
31 #define GST_META_CAST(meta) ((GstMeta *)(meta))
35 * @GST_META_FLAG_NONE: no flags
36 * @GST_META_FLAG_READONLY: metadata should not be modified
37 * @GST_META_FLAG_POOLED: metadata is managed by a bufferpool and should not
39 * @GST_META_FLAG_LAST: additional flags can be added starting from this flag.
41 * Extra metadata flags.
44 GST_META_FLAG_NONE = 0,
45 GST_META_FLAG_READONLY = (1 << 0),
46 GST_META_FLAG_POOLED = (1 << 1),
48 GST_META_FLAG_LAST = (1 << 16)
55 * A flags word containing #GstMetaFlag flags set on @meta
57 #define GST_META_FLAGS(meta) (GST_META_CAST (meta)->flags)
59 * GST_META_FLAG_IS_SET:
61 * @flag: the #GstMetaFlag to check.
63 * Gives the status of a specific flag on a metadata.
65 #define GST_META_FLAG_IS_SET(meta,flag) !!(GST_META_FLAGS (meta) & (flag))
69 * @flag: the #GstMetaFlag to set.
71 * Sets a metadata flag on a metadata.
73 #define GST_META_FLAG_SET(meta,flag) (GST_META_FLAGS (meta) |= (flag))
75 * GST_META_FLAG_UNSET:
77 * @flag: the #GstMetaFlag to clear.
79 * Clears a metadata flag.
81 #define GST_META_FLAG_UNSET(meta,flag) (GST_META_FLAGS (meta) &= ~(flag))
85 * @flags: extra flags for the metadata
86 * @info: pointer to the #GstMetaInfo
88 * Base structure for metadata. Custom metadata will put this structure
89 * as the first member of their structure.
93 const GstMetaInfo *info;
97 * GST_META_TRACE_NAME:
99 * The name used for tracing memory allocations.
101 #define GST_META_TRACE_NAME "GstMeta"
104 * GstMetaInitFunction:
106 * @params: parameters passed to the init function
107 * @buffer: a #GstBuffer
109 * Function called when @meta is initialized in @buffer.
111 typedef gboolean (*GstMetaInitFunction) (GstMeta *meta, gpointer params, GstBuffer *buffer);
114 * GstMetaFreeFunction:
116 * @buffer: a #GstBuffer
118 * Function called when @meta is freed in @buffer.
120 typedef void (*GstMetaFreeFunction) (GstMeta *meta, GstBuffer *buffer);
123 * GstMetaCopyFunction:
124 * @dest: a destination #GstBuffer
126 * @buffer: a #GstBuffer
130 * Function called when the region at @offset and @size in @buffer is copied
131 * into @dest. The function should update the metadata on @dest using @meta.
133 typedef void (*GstMetaCopyFunction) (GstBuffer *dest, GstMeta *meta,
134 GstBuffer *buffer, gsize offset, gsize size);
136 * GstMetaTransformFunction:
137 * @transbuf: a #GstBuffer
139 * @buffer: a #GstBuffer
140 * @data: transform specific data.
142 * Function called for each @meta in @buffer as a result of performing a
143 * transformation on @transbuf. Additional type specific transform data
144 * is passed to the function.
146 * Implementations should check the type of the transform @data and parse
147 * additional type specific field that should be used to perform the transform.
149 typedef void (*GstMetaTransformFunction) (GstBuffer *transbuf, GstMeta *meta,
150 GstBuffer *buffer, gpointer data);
154 * @api: tag indentifying the metadata structure and api
155 * @type: type indentifying the implementor of the api
156 * @size: size of the metadata
157 * @init_func: function for initializing the metadata
158 * @free_func: function for freeing the metadata
159 * @copy_func: function for copying the metadata
160 * @transform_func: function for transforming the metadata
162 * The #GstMetaInfo provides information about a specific metadata
165 struct _GstMetaInfo {
170 GstMetaInitFunction init_func;
171 GstMetaFreeFunction free_func;
172 GstMetaCopyFunction copy_func;
173 GstMetaTransformFunction transform_func;
176 gpointer _gst_reserved[GST_PADDING];
179 const GstMetaInfo * gst_meta_register (const gchar *api, const gchar *impl,
181 GstMetaInitFunction init_func,
182 GstMetaFreeFunction free_func,
183 GstMetaCopyFunction copy_func,
184 GstMetaTransformFunction transform_func);
185 const GstMetaInfo * gst_meta_get_info (const gchar * impl);
189 #endif /* __GST_META_H__ */