1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gstreamer.Meta;
26 
27 private import glib.Str;
28 private import glib.c.functions;
29 private import gstreamer.c.functions;
30 public  import gstreamer.c.types;
31 public  import gstreamerc.gstreamertypes;
32 private import gtkd.Loader;
33 
34 
35 /**
36  * The #GstMeta structure should be included as the first member of a #GstBuffer
37  * metadata structure. The structure defines the API of the metadata and should
38  * be accessible to all elements using the metadata.
39  * 
40  * A metadata API is registered with gst_meta_api_type_register() which takes a
41  * name for the metadata API and some tags associated with the metadata.
42  * With gst_meta_api_type_has_tag() one can check if a certain metadata API
43  * contains a given tag.
44  * 
45  * Multiple implementations of a metadata API can be registered.
46  * To implement a metadata API, gst_meta_register() should be used. This
47  * function takes all parameters needed to create, free and transform metadata
48  * along with the size of the metadata. The function returns a #GstMetaInfo
49  * structure that contains the information for the implementation of the API.
50  * 
51  * A specific implementation can be retrieved by name with gst_meta_get_info().
52  * 
53  * See #GstBuffer for how the metadata can be added, retrieved and removed from
54  * buffers.
55  */
56 public struct Meta
57 {
58 
59 	/**
60 	 *
61 	 * Params:
62 	 *     api = an API
63 	 * Returns: an array of tags as strings.
64 	 *
65 	 * Since: 1.2
66 	 */
67 	public static string[] apiTypeGetTags(GType api)
68 	{
69 		return Str.toStringArray(gst_meta_api_type_get_tags(api));
70 	}
71 
72 	/**
73 	 * Check if @api was registered with @tag.
74 	 *
75 	 * Params:
76 	 *     api = an API
77 	 *     tag = the tag to check
78 	 *
79 	 * Returns: %TRUE if @api was registered with @tag.
80 	 */
81 	public static bool apiTypeHasTag(GType api, GQuark tag)
82 	{
83 		return gst_meta_api_type_has_tag(api, tag) != 0;
84 	}
85 
86 	/**
87 	 * Register and return a GType for the @api and associate it with
88 	 * @tags.
89 	 *
90 	 * Params:
91 	 *     api = an API to register
92 	 *     tags = tags for @api
93 	 *
94 	 * Returns: a unique GType for @api.
95 	 */
96 	public static GType apiTypeRegister(string api, string[] tags)
97 	{
98 		return gst_meta_api_type_register(Str.toStringz(api), Str.toStringzArray(tags));
99 	}
100 
101 	/**
102 	 * Lookup a previously registered meta info structure by its implementation name
103 	 * @impl.
104 	 *
105 	 * Params:
106 	 *     impl = the name
107 	 *
108 	 * Returns: a #GstMetaInfo with @impl, or
109 	 *     %NULL when no such metainfo exists.
110 	 */
111 	public static GstMetaInfo* getInfo(string impl)
112 	{
113 		return gst_meta_get_info(Str.toStringz(impl));
114 	}
115 
116 	/**
117 	 * Register a new #GstMeta implementation.
118 	 *
119 	 * The same @info can be retrieved later with gst_meta_get_info() by using
120 	 * @impl as the key.
121 	 *
122 	 * Params:
123 	 *     api = the type of the #GstMeta API
124 	 *     impl = the name of the #GstMeta implementation
125 	 *     size = the size of the #GstMeta structure
126 	 *     initFunc = a #GstMetaInitFunction
127 	 *     freeFunc = a #GstMetaFreeFunction
128 	 *     transformFunc = a #GstMetaTransformFunction
129 	 *
130 	 * Returns: a #GstMetaInfo that can be used to
131 	 *     access metadata.
132 	 */
133 	public static GstMetaInfo* register(GType api, string impl, size_t size, GstMetaInitFunction initFunc, GstMetaFreeFunction freeFunc, GstMetaTransformFunction transformFunc)
134 	{
135 		return gst_meta_register(api, Str.toStringz(impl), size, initFunc, freeFunc, transformFunc);
136 	}
137 }