structured: Enhance error message when no clip duration set
[platform/upstream/gst-editing-services.git] / ges / ges-meta-container.h
1 /* GStreamer Editing Services
2  * Copyright (C) 2012 Paul Lange <palango@gmx.de>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #ifndef _GES_META_CONTAINER
21 #define _GES_META_CONTAINER
22
23 #include <glib-object.h>
24 #include <gst/gst.h>
25 #include <ges/ges-types.h>
26 #include "ges-enums.h"
27
28 G_BEGIN_DECLS
29
30 #define GES_TYPE_META_CONTAINER                 (ges_meta_container_get_type ())
31 #define GES_META_CONTAINER(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_META_CONTAINER, GESMetaContainer))
32 #define GES_IS_META_CONTAINER(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_META_CONTAINER))
33 #define GES_META_CONTAINER_GET_INTERFACE (inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GES_TYPE_META_CONTAINER, GESMetaContainerInterface))
34
35 /**
36  * GES_META_FORMATTER_NAME:
37  *
38  * Name of a formatter it is used as ID of Formater assets (string)
39  *
40  * The name of the formatter
41  */
42 #define GES_META_FORMATTER_NAME                       "name"
43
44 /**
45  * GES_META_DESCRIPTION:
46  *
47  * The description of an object, can be used in various context (string)
48  *
49  * The description
50  */
51 #define GES_META_DESCRIPTION                         "description"
52
53 /**
54  * GES_META_FORMATTER_MIMETYPE:
55  *
56  * Mimetype used for the file produced by a  formatter (string)
57  *
58  * The mime type
59  */
60 #define GES_META_FORMATTER_MIMETYPE                   "mimetype"
61
62 /**
63  * GES_META_FORMATTER_EXTENSION:
64  *
65  * The extension of the files produced by a formatter (string)
66  */
67 #define GES_META_FORMATTER_EXTENSION                  "extension"
68
69 /**
70  * GES_META_FORMATTER_VERSION:
71  *
72  * The version of a formatter (double)
73  *
74  * The formatter version
75  */
76 #define GES_META_FORMATTER_VERSION                    "version"
77
78 /**
79  * GES_META_FORMATTER_RANK:
80  *
81  * The rank of a formatter (GstRank)
82  *
83  * The rank of a formatter
84  */
85 #define GES_META_FORMATTER_RANK                       "rank"
86
87 /**
88  * GES_META_VOLUME:
89  *
90  * The volume, can be used for audio track or layers
91  *
92  * The volume for a track or a layer, it is register as a float
93  */
94 #define GES_META_VOLUME                              "volume"
95
96 /**
97  * GES_META_VOLUME_DEFAULT:
98  *
99  * The default volume
100  *
101  * The default volume for a track or a layer as a float
102  */
103 #define GES_META_VOLUME_DEFAULT                       1.0
104
105 /**
106  * GES_META_FORMAT_VERSION:
107  *
108  * The version of the format in which a project is serialized
109  */
110 #define GES_META_FORMAT_VERSION                       "format-version"
111
112 typedef struct _GESMetaContainer          GESMetaContainer;
113 typedef struct _GESMetaContainerInterface GESMetaContainerInterface;
114
115 struct _GESMetaContainerInterface {
116   GTypeInterface parent_iface;
117
118   gpointer _ges_reserved[GES_PADDING];
119 };
120
121 GES_API
122 GType ges_meta_container_get_type (void);
123
124 GES_API gboolean
125 ges_meta_container_set_boolean     (GESMetaContainer *container,
126                                         const gchar* meta_item,
127                                         gboolean value);
128
129 GES_API gboolean
130 ges_meta_container_set_int         (GESMetaContainer *container,
131                                         const gchar* meta_item,
132                                         gint value);
133
134 GES_API gboolean
135 ges_meta_container_set_uint        (GESMetaContainer *container,
136                                         const gchar* meta_item,
137                                         guint value);
138
139 GES_API gboolean
140 ges_meta_container_set_int64       (GESMetaContainer *container,
141                                         const gchar* meta_item,
142                                         gint64 value);
143
144 GES_API gboolean
145 ges_meta_container_set_uint64      (GESMetaContainer *container,
146                                         const gchar* meta_item,
147                                         guint64 value);
148
149 GES_API gboolean
150 ges_meta_container_set_float       (GESMetaContainer *container,
151                                         const gchar* meta_item,
152                                         gfloat value);
153
154 GES_API gboolean
155 ges_meta_container_set_double      (GESMetaContainer *container,
156                                         const gchar* meta_item,
157                                         gdouble value);
158
159 GES_API gboolean
160 ges_meta_container_set_date        (GESMetaContainer *container,
161                                         const gchar* meta_item,
162                                         const GDate* value);
163
164 GES_API gboolean
165 ges_meta_container_set_date_time   (GESMetaContainer *container,
166                                         const gchar* meta_item,
167                                         const GstDateTime* value);
168
169 GES_API gboolean
170 ges_meta_container_set_string      (GESMetaContainer *container,
171                                         const gchar* meta_item,
172                                         const gchar* value);
173
174 GES_API gboolean
175 ges_meta_container_set_meta            (GESMetaContainer * container,
176                                         const gchar* meta_item,
177                                         const GValue *value);
178
179 GES_API gboolean
180 ges_meta_container_register_meta_boolean (GESMetaContainer *container,
181                                           GESMetaFlag flags,
182                                           const gchar* meta_item,
183                                           gboolean value);
184
185 GES_API gboolean
186 ges_meta_container_register_meta_int     (GESMetaContainer *container,
187                                           GESMetaFlag flags,
188                                           const gchar* meta_item,
189                                           gint value);
190
191 GES_API gboolean
192 ges_meta_container_register_meta_uint    (GESMetaContainer *container,
193                                           GESMetaFlag flags,
194                                           const gchar* meta_item,
195                                           guint value);
196
197 GES_API gboolean
198 ges_meta_container_register_meta_int64   (GESMetaContainer *container,
199                                           GESMetaFlag flags,
200                                           const gchar* meta_item,
201                                           gint64 value);
202
203 GES_API gboolean
204 ges_meta_container_register_meta_uint64  (GESMetaContainer *container,
205                                           GESMetaFlag flags,
206                                           const gchar* meta_item,
207                                           guint64 value);
208
209 GES_API gboolean
210 ges_meta_container_register_meta_float   (GESMetaContainer *container,
211                                           GESMetaFlag flags,
212                                           const gchar* meta_item,
213                                           gfloat value);
214
215 GES_API gboolean
216 ges_meta_container_register_meta_double  (GESMetaContainer *container,
217                                           GESMetaFlag flags,
218                                           const gchar* meta_item,
219                                           gdouble value);
220
221 GES_API gboolean
222 ges_meta_container_register_meta_date    (GESMetaContainer *container,
223                                           GESMetaFlag flags,
224                                           const gchar* meta_item,
225                                           const GDate* value);
226
227 GES_API gboolean
228 ges_meta_container_register_meta_date_time  (GESMetaContainer *container,
229                                              GESMetaFlag flags,
230                                              const gchar* meta_item,
231                                              const GstDateTime* value);
232
233 GES_API gboolean
234 ges_meta_container_register_meta_string     (GESMetaContainer *container,
235                                              GESMetaFlag flags,
236                                              const gchar* meta_item,
237                                              const gchar* value);
238
239 GES_API gboolean
240 ges_meta_container_register_meta            (GESMetaContainer *container,
241                                              GESMetaFlag flags,
242                                              const gchar* meta_item,
243                                              const GValue * value);
244
245 GES_API gboolean
246 ges_meta_container_check_meta_registered    (GESMetaContainer *container,
247                                              const gchar * meta_item,
248                                              GESMetaFlag * flags,
249                                              GType * type);
250
251 GES_API gboolean
252 ges_meta_container_get_boolean     (GESMetaContainer *container,
253                                         const gchar* meta_item,
254                                         gboolean* dest);
255
256 GES_API gboolean
257 ges_meta_container_get_int         (GESMetaContainer *container,
258                                         const gchar* meta_item,
259                                         gint* dest);
260
261 GES_API gboolean
262 ges_meta_container_get_uint        (GESMetaContainer *container,
263                                         const gchar* meta_item,
264                                         guint* dest);
265
266 GES_API gboolean
267 ges_meta_container_get_int64       (GESMetaContainer *container,
268                                         const gchar* meta_item,
269                                         gint64* dest);
270
271 GES_API gboolean
272 ges_meta_container_get_uint64      (GESMetaContainer *container,
273                                         const gchar* meta_item,
274                                         guint64* dest);
275
276 GES_API gboolean
277 ges_meta_container_get_float       (GESMetaContainer *container,
278                                         const gchar* meta_item,
279                                         gfloat* dest);
280
281 GES_API gboolean
282 ges_meta_container_get_double      (GESMetaContainer *container,
283                                         const gchar* meta_item,
284                                         gdouble* dest);
285
286 GES_API gboolean
287 ges_meta_container_get_date        (GESMetaContainer *container,
288                                         const gchar* meta_item,
289                                         GDate** dest);
290
291 GES_API gboolean
292 ges_meta_container_get_date_time   (GESMetaContainer *container,
293                                         const gchar* meta_item,
294                                         GstDateTime** dest);
295
296 GES_API const gchar *
297 ges_meta_container_get_string      (GESMetaContainer * container,
298                                         const gchar * meta_item);
299
300 GES_API const GValue *
301 ges_meta_container_get_meta            (GESMetaContainer * container,
302                                         const gchar * key);
303
304 typedef void
305 (*GESMetaForeachFunc)                  (const GESMetaContainer *container,
306                                         const gchar *key,
307                                         const GValue *value,
308                                         gpointer user_data);
309
310 GES_API void
311 ges_meta_container_foreach             (GESMetaContainer *container,
312                                         GESMetaForeachFunc func,
313                                         gpointer user_data);
314
315 GES_API gchar *
316 ges_meta_container_metas_to_string     (GESMetaContainer *container);
317
318 GES_API gboolean
319 ges_meta_container_add_metas_from_string (GESMetaContainer *container,
320                                           const gchar *str);
321
322 G_END_DECLS
323 #endif /* _GES_META_CONTAINER */