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  * Conversion parameters:
26  * inFile  = gstreamer-GstTagList.html
27  * outPack = gstreamer
28  * outFile = TagList
29  * strct   = GstTagList
30  * realStrct=
31  * ctorStrct=
32  * clss    = TagList
33  * interf  = 
34  * class Code: No
35  * interface Code: No
36  * template for:
37  * extend  = 
38  * implements:
39  * prefixes:
40  * 	- gst_tag_list_
41  * 	- gst_tag_
42  * omit structs:
43  * omit prefixes:
44  * omit code:
45  * omit signals:
46  * imports:
47  * 	- glib.Str
48  * 	- glib.Date
49  * 	- gobject.Value
50  * 	- gstreamer.DateTime
51  * 	- gstreamer.Sample
52  * structWrap:
53  * 	- GDate* -> Date
54  * 	- GValue* -> Value
55  * 	- GstDateTime* -> DateTime
56  * 	- GstSample* -> Sample
57  * 	- GstTagList* -> TagList
58  * module aliases:
59  * local aliases:
60  * overrides:
61  * 	- toString
62  */
63 
64 module gstreamer.TagList;
65 
66 public  import gstreamerc.gstreamertypes;
67 
68 private import gstreamerc.gstreamer;
69 private import glib.ConstructionException;
70 private import gobject.ObjectG;
71 
72 
73 private import glib.Str;
74 private import glib.Date;
75 private import gobject.Value;
76 private import gstreamer.DateTime;
77 private import gstreamer.Sample;
78 
79 
80 
81 
82 /**
83  * List of tags and values used to describe media metadata.
84  *
85  * Strings must be in ASCII or UTF-8 encoding. No other encodings are allowed.
86  *
87  * Last reviewed on 2009-06-09 (0.10.23)
88  */
89 public class TagList
90 {
91 	
92 	/** the main Gtk struct */
93 	protected GstTagList* gstTagList;
94 	
95 	
96 	public GstTagList* getTagListStruct()
97 	{
98 		return gstTagList;
99 	}
100 	
101 	
102 	/** the main Gtk struct as a void* */
103 	protected void* getStruct()
104 	{
105 		return cast(void*)gstTagList;
106 	}
107 	
108 	/**
109 	 * Sets our main struct and passes it to the parent class
110 	 */
111 	public this (GstTagList* gstTagList)
112 	{
113 		this.gstTagList = gstTagList;
114 	}
115 	
116 	/**
117 	 */
118 	
119 	/**
120 	 * Registers a new tag type for the use with GStreamer's type system. If a type
121 	 * with that name is already registered, that one is used.
122 	 * The old registration may have used a different type however. So don't rely
123 	 * on your supplied values.
124 	 * Important: if you do not supply a merge function the implication will be
125 	 * that there can only be one single value for this tag in a tag list and
126 	 * any additional values will silenty be discarded when being added (unless
127 	 * GST_TAG_MERGE_REPLACE, GST_TAG_MERGE_REPLACE_ALL, or
128 	 * GST_TAG_MERGE_PREPEND is used as merge mode, in which case the new
129 	 * value will replace the old one in the list).
130 	 * The merge function will be called from gst_tag_list_copy_value() when
131 	 * it is required that one or more values for a tag be condensed into
132 	 * one single value. This may happen from gst_tag_list_get_string(),
133 	 * gst_tag_list_get_int(), gst_tag_list_get_double() etc. What will happen
134 	 * exactly in that case depends on how the tag was registered and if a
135 	 * merge function was supplied and if so which one.
136 	 * Two default merge functions are provided: gst_tag_merge_use_first() and
137 	 * gst_tag_merge_strings_with_comma().
138 	 * Params:
139 	 * name = the name or identifier string
140 	 * flag = a flag describing the type of tag info
141 	 * type = the type this data is in
142 	 * nick = human-readable name
143 	 * blurb = a human-readable description about this tag
144 	 * func = function for merging multiple values of this tag, or NULL. [allow-none]
145 	 */
146 	public static void register(string name, GstTagFlag flag, GType type, string nick, string blurb, GstTagMergeFunc func)
147 	{
148 		// void gst_tag_register (const gchar *name,  GstTagFlag flag,  GType type,  const gchar *nick,  const gchar *blurb,  GstTagMergeFunc func);
149 		gst_tag_register(Str.toStringz(name), flag, type, Str.toStringz(nick), Str.toStringz(blurb), func);
150 	}
151 	
152 	/**
153 	 * Registers a new tag type for the use with GStreamer's type system.
154 	 * Same as gst_tag_register(), but name, nick, and blurb must be
155 	 * static strings or inlined strings, as they will not be copied. (GStreamer
156 	 * plugins will be made resident once loaded, so this function can be used
157 	 * even from dynamically loaded plugins.)
158 	 * Params:
159 	 * name = the name or identifier string (string constant)
160 	 * flag = a flag describing the type of tag info
161 	 * type = the type this data is in
162 	 * nick = human-readable name or short description (string constant)
163 	 * blurb = a human-readable description for this tag (string constant)
164 	 * func = function for merging multiple values of this tag, or NULL. [allow-none]
165 	 */
166 	public static void registerStatic(string name, GstTagFlag flag, GType type, string nick, string blurb, GstTagMergeFunc func)
167 	{
168 		// void gst_tag_register_static (const gchar *name,  GstTagFlag flag,  GType type,  const gchar *nick,  const gchar *blurb,  GstTagMergeFunc func);
169 		gst_tag_register_static(Str.toStringz(name), flag, type, Str.toStringz(nick), Str.toStringz(blurb), func);
170 	}
171 	
172 	/**
173 	 * This is a convenience function for the func argument of gst_tag_register().
174 	 * It creates a copy of the first value from the list.
175 	 * Params:
176 	 * dest = uninitialized GValue to store result in. [out caller-allocates]
177 	 * src = GValue to copy from
178 	 */
179 	public static void mergeUseFirst(Value dest, Value src)
180 	{
181 		// void gst_tag_merge_use_first (GValue *dest,  const GValue *src);
182 		gst_tag_merge_use_first((dest is null) ? null : dest.getValueStruct(), (src is null) ? null : src.getValueStruct());
183 	}
184 	
185 	/**
186 	 * This is a convenience function for the func argument of gst_tag_register().
187 	 * It concatenates all given strings using a comma. The tag must be registered
188 	 * as a G_TYPE_STRING or this function will fail.
189 	 * Params:
190 	 * dest = uninitialized GValue to store result in. [out caller-allocates]
191 	 * src = GValue to copy from
192 	 */
193 	public static void mergeStringsWithComma(Value dest, Value src)
194 	{
195 		// void gst_tag_merge_strings_with_comma (GValue *dest,  const GValue *src);
196 		gst_tag_merge_strings_with_comma((dest is null) ? null : dest.getValueStruct(), (src is null) ? null : src.getValueStruct());
197 	}
198 	
199 	/**
200 	 * Checks if the given type is already registered.
201 	 * Params:
202 	 * tag = name of the tag
203 	 * Returns: TRUE if the type is already registered
204 	 */
205 	public static int exists(string tag)
206 	{
207 		// gboolean gst_tag_exists (const gchar *tag);
208 		return gst_tag_exists(Str.toStringz(tag));
209 	}
210 	
211 	/**
212 	 * Gets the GType used for this tag.
213 	 * Params:
214 	 * tag = the tag
215 	 * Returns: the GType of this tag
216 	 */
217 	public static GType getType(string tag)
218 	{
219 		// GType gst_tag_get_type (const gchar *tag);
220 		return gst_tag_get_type(Str.toStringz(tag));
221 	}
222 	
223 	/**
224 	 * Returns the human-readable name of this tag, You must not change or free
225 	 * this string.
226 	 * Params:
227 	 * tag = the tag
228 	 * Returns: the human-readable name of this tag
229 	 */
230 	public static string getNick(string tag)
231 	{
232 		// const gchar * gst_tag_get_nick (const gchar *tag);
233 		return Str.toString(gst_tag_get_nick(Str.toStringz(tag)));
234 	}
235 	
236 	/**
237 	 * Returns the human-readable description of this tag, You must not change or
238 	 * free this string.
239 	 * Params:
240 	 * tag = the tag
241 	 * Returns: the human-readable description of this tag
242 	 */
243 	public static string getDescription(string tag)
244 	{
245 		// const gchar * gst_tag_get_description (const gchar *tag);
246 		return Str.toString(gst_tag_get_description(Str.toStringz(tag)));
247 	}
248 	
249 	/**
250 	 * Gets the flag of tag.
251 	 * Params:
252 	 * tag = the tag
253 	 * Returns: the flag of this tag.
254 	 */
255 	public static GstTagFlag getFlag(string tag)
256 	{
257 		// GstTagFlag gst_tag_get_flag (const gchar *tag);
258 		return gst_tag_get_flag(Str.toStringz(tag));
259 	}
260 	
261 	/**
262 	 * Checks if the given tag is fixed. A fixed tag can only contain one value.
263 	 * Unfixed tags can contain lists of values.
264 	 * Params:
265 	 * tag = tag to check
266 	 * Returns: TRUE, if the given tag is fixed.
267 	 */
268 	public static int isFixed(string tag)
269 	{
270 		// gboolean gst_tag_is_fixed (const gchar *tag);
271 		return gst_tag_is_fixed(Str.toStringz(tag));
272 	}
273 	
274 	/**
275 	 * Creates a new empty GstTagList.
276 	 * Free-function: gst_tag_list_unref
277 	 * Throws: ConstructionException GTK+ fails to create the object.
278 	 */
279 	public this ()
280 	{
281 		// GstTagList * gst_tag_list_new_empty (void);
282 		auto p = gst_tag_list_new_empty();
283 		if(p is null)
284 		{
285 			throw new ConstructionException("null returned by gst_tag_list_new_empty()");
286 		}
287 		this(cast(GstTagList*) p);
288 	}
289 	
290 	/**
291 	 * Just like gst_tag_list_new(), only that it takes a va_list argument.
292 	 * Useful mostly for language bindings.
293 	 * Free-function: gst_tag_list_unref
294 	 * Params:
295 	 * varArgs = tag / value pairs to set
296 	 * Throws: ConstructionException GTK+ fails to create the object.
297 	 */
298 	public this (void* varArgs)
299 	{
300 		// GstTagList * gst_tag_list_new_valist (va_list var_args);
301 		auto p = gst_tag_list_new_valist(varArgs);
302 		if(p is null)
303 		{
304 			throw new ConstructionException("null returned by gst_tag_list_new_valist(varArgs)");
305 		}
306 		this(cast(GstTagList*) p);
307 	}
308 	
309 	/**
310 	 * Deserializes a tag list.
311 	 * Params:
312 	 * str = a string created with gst_tag_list_to_string()
313 	 * Throws: ConstructionException GTK+ fails to create the object.
314 	 */
315 	public this (string str)
316 	{
317 		// GstTagList * gst_tag_list_new_from_string (const gchar *str);
318 		auto p = gst_tag_list_new_from_string(Str.toStringz(str));
319 		if(p is null)
320 		{
321 			throw new ConstructionException("null returned by gst_tag_list_new_from_string(Str.toStringz(str))");
322 		}
323 		this(cast(GstTagList*) p);
324 	}
325 	
326 	/**
327 	 * Gets the scope of list.
328 	 * Returns: The scope of list
329 	 */
330 	public GstTagScope getScope()
331 	{
332 		// GstTagScope gst_tag_list_get_scope (const GstTagList *list);
333 		return gst_tag_list_get_scope(gstTagList);
334 	}
335 	
336 	/**
337 	 * Sets the scope of list to scope. By default the scope
338 	 * of a taglist is stream scope.
339 	 */
340 	public void setScope(GstTagScope scop)
341 	{
342 		// void gst_tag_list_set_scope (GstTagList *list,  GstTagScope scope);
343 		gst_tag_list_set_scope(gstTagList, scop);
344 	}
345 	
346 	/**
347 	 * Serializes a tag list to a string.
348 	 * Returns: a newly-allocated string, or NULL in case of an error. The string must be freed with g_free() when no longer needed.
349 	 */
350 	public override string toString()
351 	{
352 		// gchar * gst_tag_list_to_string (const GstTagList *list);
353 		return Str.toString(gst_tag_list_to_string(gstTagList));
354 	}
355 	
356 	/**
357 	 * Checks if the given taglist is empty.
358 	 * Returns: TRUE if the taglist is empty, otherwise FALSE.
359 	 */
360 	public int isEmpty()
361 	{
362 		// gboolean gst_tag_list_is_empty (const GstTagList *list);
363 		return gst_tag_list_is_empty(gstTagList);
364 	}
365 	
366 	/**
367 	 * Checks if the two given taglists are equal.
368 	 * Params:
369 	 * list2 = a GstTagList.
370 	 * Returns: TRUE if the taglists are equal, otherwise FALSE
371 	 */
372 	public int isEqual(TagList list2)
373 	{
374 		// gboolean gst_tag_list_is_equal (const GstTagList *list1,  const GstTagList *list2);
375 		return gst_tag_list_is_equal(gstTagList, (list2 is null) ? null : list2.getTagListStruct());
376 	}
377 	
378 	/**
379 	 * Creates a new GstTagList as a copy of the old taglist. The new taglist
380 	 * will have a refcount of 1, owned by the caller, and will be writable as
381 	 * a result.
382 	 * Note that this function is the semantic equivalent of a gst_tag_list_ref()
383 	 * followed by a gst_tag_list_make_writable(). If you only want to hold on to a
384 	 * reference to the data, you should use gst_tag_list_ref().
385 	 * When you are finished with the taglist, call gst_tag_list_unref() on it.
386 	 * Returns: the new GstTagList
387 	 */
388 	public TagList copy()
389 	{
390 		// GstTagList * gst_tag_list_copy (const GstTagList *taglist);
391 		auto p = gst_tag_list_copy(gstTagList);
392 		
393 		if(p is null)
394 		{
395 			return null;
396 		}
397 		
398 		return ObjectG.getDObject!(TagList)(cast(GstTagList*) p);
399 	}
400 	
401 	/**
402 	 * Add a reference to a GstTagList mini object.
403 	 * From this point on, until the caller calls gst_tag_list_unref() or
404 	 * gst_tag_list_make_writable(), it is guaranteed that the taglist object will
405 	 * not change. To use a GstTagList object, you must always have a refcount on
406 	 * it -- either the one made implicitly by e.g. gst_tag_list_new(), or via
407 	 * taking one explicitly with this function.
408 	 * Returns: the same GstTagList mini object.
409 	 */
410 	public TagList doref()
411 	{
412 		// GstTagList * gst_tag_list_ref (GstTagList *taglist);
413 		auto p = gst_tag_list_ref(gstTagList);
414 		
415 		if(p is null)
416 		{
417 			return null;
418 		}
419 		
420 		return ObjectG.getDObject!(TagList)(cast(GstTagList*) p);
421 	}
422 	
423 	/**
424 	 * Unref a GstTagList, and and free all its memory when the refcount reaches 0.
425 	 */
426 	public void unref()
427 	{
428 		// void gst_tag_list_unref (GstTagList *taglist);
429 		gst_tag_list_unref(gstTagList);
430 	}
431 	
432 	/**
433 	 * Inserts the tags of the from list into the first list using the given mode.
434 	 * Params:
435 	 * from = list to merge from
436 	 * mode = the mode to use
437 	 */
438 	public void insert(TagList from, GstTagMergeMode mode)
439 	{
440 		// void gst_tag_list_insert (GstTagList *into,  const GstTagList *from,  GstTagMergeMode mode);
441 		gst_tag_list_insert(gstTagList, (from is null) ? null : from.getTagListStruct(), mode);
442 	}
443 	
444 	/**
445 	 * Merges the two given lists into a new list. If one of the lists is NULL, a
446 	 * copy of the other is returned. If both lists are NULL, NULL is returned.
447 	 * Free-function: gst_tag_list_unref
448 	 * Params:
449 	 * list2 = second list to merge
450 	 * mode = the mode to use
451 	 * Returns: the new list. [transfer full]
452 	 */
453 	public TagList merge(TagList list2, GstTagMergeMode mode)
454 	{
455 		// GstTagList * gst_tag_list_merge (const GstTagList *list1,  const GstTagList *list2,  GstTagMergeMode mode);
456 		auto p = gst_tag_list_merge(gstTagList, (list2 is null) ? null : list2.getTagListStruct(), mode);
457 		
458 		if(p is null)
459 		{
460 			return null;
461 		}
462 		
463 		return ObjectG.getDObject!(TagList)(cast(GstTagList*) p);
464 	}
465 	
466 	/**
467 	 * Checks how many value are stored in this tag list for the given tag.
468 	 * Params:
469 	 * tag = the tag to query
470 	 * Returns: The number of tags stored
471 	 */
472 	public uint getTagSize(string tag)
473 	{
474 		// guint gst_tag_list_get_tag_size (const GstTagList *list,  const gchar *tag);
475 		return gst_tag_list_get_tag_size(gstTagList, Str.toStringz(tag));
476 	}
477 	
478 	/**
479 	 * Get the number of tags in list.
480 	 * Returns: The number of tags in list.
481 	 */
482 	public int nTags()
483 	{
484 		// gint gst_tag_list_n_tags (const GstTagList *list);
485 		return gst_tag_list_n_tags(gstTagList);
486 	}
487 	
488 	/**
489 	 * Get the name of the tag in list at index.
490 	 * Params:
491 	 * index = the index
492 	 * Returns: The name of the tag at index.
493 	 */
494 	public string nthTagName(uint index)
495 	{
496 		// const gchar * gst_tag_list_nth_tag_name (const GstTagList *list,  guint index);
497 		return Str.toString(gst_tag_list_nth_tag_name(gstTagList, index));
498 	}
499 	
500 	/**
501 	 * Sets the GValue for a given tag using the specified mode.
502 	 * Params:
503 	 * mode = the mode to use
504 	 * tag = tag
505 	 * value = GValue for this tag
506 	 */
507 	public void addValue(GstTagMergeMode mode, string tag, Value value)
508 	{
509 		// void gst_tag_list_add_value (GstTagList *list,  GstTagMergeMode mode,  const gchar *tag,  const GValue *value);
510 		gst_tag_list_add_value(gstTagList, mode, Str.toStringz(tag), (value is null) ? null : value.getValueStruct());
511 	}
512 	
513 	/**
514 	 * Sets the values for the given tags using the specified mode.
515 	 * Params:
516 	 * list = list to set tags in
517 	 * mode = the mode to use
518 	 * tag = tag
519 	 * varArgs = tag / value pairs to set
520 	 */
521 	public void addValist(GstTagMergeMode mode, string tag, void* varArgs)
522 	{
523 		// void gst_tag_list_add_valist (GstTagList *list,  GstTagMergeMode mode,  const gchar *tag,  va_list var_args);
524 		gst_tag_list_add_valist(gstTagList, mode, Str.toStringz(tag), varArgs);
525 	}
526 	
527 	/**
528 	 * Sets the GValues for the given tags using the specified mode.
529 	 * Params:
530 	 * list = list to set tags in
531 	 * mode = the mode to use
532 	 * tag = tag
533 	 * varArgs = tag / GValue pairs to set
534 	 */
535 	public void addValistValues(GstTagMergeMode mode, string tag, void* varArgs)
536 	{
537 		// void gst_tag_list_add_valist_values (GstTagList *list,  GstTagMergeMode mode,  const gchar *tag,  va_list var_args);
538 		gst_tag_list_add_valist_values(gstTagList, mode, Str.toStringz(tag), varArgs);
539 	}
540 	
541 	/**
542 	 * Removes the given tag from the taglist.
543 	 * Params:
544 	 * tag = tag to remove
545 	 */
546 	public void removeTag(string tag)
547 	{
548 		// void gst_tag_list_remove_tag (GstTagList *list,  const gchar *tag);
549 		gst_tag_list_remove_tag(gstTagList, Str.toStringz(tag));
550 	}
551 	
552 	/**
553 	 * Calls the given function for each tag inside the tag list. Note that if there
554 	 * is no tag, the function won't be called at all.
555 	 * Params:
556 	 * func = function to be called for each tag. [scope call]
557 	 * userData = user specified data. [closure]
558 	 */
559 	public void foreac(GstTagForeachFunc func, void* userData)
560 	{
561 		// void gst_tag_list_foreach (const GstTagList *list,  GstTagForeachFunc func,  gpointer user_data);
562 		gst_tag_list_foreach(gstTagList, func, userData);
563 	}
564 	
565 	/**
566 	 * Gets the value that is at the given index for the given tag in the given
567 	 * list.
568 	 * Params:
569 	 * tag = tag to read out
570 	 * index = number of entry to read out
571 	 * Returns: The GValue for the specified entry or NULL if the tag wasn't available or the tag doesn't have as many entries. [transfer none]
572 	 */
573 	public Value getValueIndex(string tag, uint index)
574 	{
575 		// const GValue * gst_tag_list_get_value_index (const GstTagList *list,  const gchar *tag,  guint index);
576 		auto p = gst_tag_list_get_value_index(gstTagList, Str.toStringz(tag), index);
577 		
578 		if(p is null)
579 		{
580 			return null;
581 		}
582 		
583 		return ObjectG.getDObject!(Value)(cast(GValue*) p);
584 	}
585 	
586 	/**
587 	 * Copies the contents for the given tag into the value,
588 	 * merging multiple values into one if multiple values are associated
589 	 * with the tag.
590 	 * You must g_value_unset() the value after use.
591 	 * Params:
592 	 * dest = uninitialized GValue to copy into. [out caller-allocates]
593 	 * list = list to get the tag from
594 	 * tag = tag to read out
595 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
596 	 */
597 	public static int copyValue(Value dest, TagList list, string tag)
598 	{
599 		// gboolean gst_tag_list_copy_value (GValue *dest,  const GstTagList *list,  const gchar *tag);
600 		return gst_tag_list_copy_value((dest is null) ? null : dest.getValueStruct(), (list is null) ? null : list.getTagListStruct(), Str.toStringz(tag));
601 	}
602 	
603 	/**
604 	 * Copies the contents for the given tag into the value, merging multiple values
605 	 * into one if multiple values are associated with the tag.
606 	 * Params:
607 	 * tag = tag to read out
608 	 * value = location for the result. [out]
609 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
610 	 */
611 	public int getBoolean(string tag, out int value)
612 	{
613 		// gboolean gst_tag_list_get_boolean (const GstTagList *list,  const gchar *tag,  gboolean *value);
614 		return gst_tag_list_get_boolean(gstTagList, Str.toStringz(tag), &value);
615 	}
616 	
617 	/**
618 	 * Gets the value that is at the given index for the given tag in the given
619 	 * list.
620 	 * Params:
621 	 * tag = tag to read out
622 	 * index = number of entry to read out
623 	 * value = location for the result. [out]
624 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
625 	 */
626 	public int getBooleanIndex(string tag, uint index, out int value)
627 	{
628 		// gboolean gst_tag_list_get_boolean_index (const GstTagList *list,  const gchar *tag,  guint index,  gboolean *value);
629 		return gst_tag_list_get_boolean_index(gstTagList, Str.toStringz(tag), index, &value);
630 	}
631 	
632 	/**
633 	 * Copies the contents for the given tag into the value, merging multiple values
634 	 * into one if multiple values are associated with the tag.
635 	 * Params:
636 	 * tag = tag to read out
637 	 * value = location for the result. [out]
638 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
639 	 */
640 	public int getInt(string tag, out int value)
641 	{
642 		// gboolean gst_tag_list_get_int (const GstTagList *list,  const gchar *tag,  gint *value);
643 		return gst_tag_list_get_int(gstTagList, Str.toStringz(tag), &value);
644 	}
645 	
646 	/**
647 	 * Gets the value that is at the given index for the given tag in the given
648 	 * list.
649 	 * Params:
650 	 * tag = tag to read out
651 	 * index = number of entry to read out
652 	 * value = location for the result. [out]
653 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
654 	 */
655 	public int getIntIndex(string tag, uint index, out int value)
656 	{
657 		// gboolean gst_tag_list_get_int_index (const GstTagList *list,  const gchar *tag,  guint index,  gint *value);
658 		return gst_tag_list_get_int_index(gstTagList, Str.toStringz(tag), index, &value);
659 	}
660 	
661 	/**
662 	 * Copies the contents for the given tag into the value, merging multiple values
663 	 * into one if multiple values are associated with the tag.
664 	 * Params:
665 	 * tag = tag to read out
666 	 * value = location for the result. [out]
667 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
668 	 */
669 	public int getUint(string tag, out uint value)
670 	{
671 		// gboolean gst_tag_list_get_uint (const GstTagList *list,  const gchar *tag,  guint *value);
672 		return gst_tag_list_get_uint(gstTagList, Str.toStringz(tag), &value);
673 	}
674 	
675 	/**
676 	 * Gets the value that is at the given index for the given tag in the given
677 	 * list.
678 	 * Params:
679 	 * tag = tag to read out
680 	 * index = number of entry to read out
681 	 * value = location for the result. [out]
682 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
683 	 */
684 	public int getUintIndex(string tag, uint index, out uint value)
685 	{
686 		// gboolean gst_tag_list_get_uint_index (const GstTagList *list,  const gchar *tag,  guint index,  guint *value);
687 		return gst_tag_list_get_uint_index(gstTagList, Str.toStringz(tag), index, &value);
688 	}
689 	
690 	/**
691 	 */
692 	public int getInt64(string tag, out long value)
693 	{
694 		// gboolean gst_tag_list_get_int64 (const GstTagList *list,  const gchar *tag,  gint64 *value);
695 		return gst_tag_list_get_int64(gstTagList, Str.toStringz(tag), &value);
696 	}
697 	
698 	/**
699 	 * Gets the value that is at the given index for the given tag in the given
700 	 * list.
701 	 * Params:
702 	 * tag = tag to read out
703 	 * index = number of entry to read out
704 	 * value = location for the result. [out]
705 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
706 	 */
707 	public int getInt64_Index(string tag, uint index, out long value)
708 	{
709 		// gboolean gst_tag_list_get_int64_index (const GstTagList *list,  const gchar *tag,  guint index,  gint64 *value);
710 		return gst_tag_list_get_int64_index(gstTagList, Str.toStringz(tag), index, &value);
711 	}
712 	
713 	/**
714 	 * Copies the contents for the given tag into the value, merging multiple values
715 	 * into one if multiple values are associated with the tag.
716 	 * Params:
717 	 * tag = tag to read out
718 	 * value = location for the result. [out]
719 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
720 	 */
721 	public int getUint64(string tag, out ulong value)
722 	{
723 		// gboolean gst_tag_list_get_uint64 (const GstTagList *list,  const gchar *tag,  guint64 *value);
724 		return gst_tag_list_get_uint64(gstTagList, Str.toStringz(tag), &value);
725 	}
726 	
727 	/**
728 	 * Gets the value that is at the given index for the given tag in the given
729 	 * list.
730 	 * Params:
731 	 * tag = tag to read out
732 	 * index = number of entry to read out
733 	 * value = location for the result. [out]
734 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
735 	 */
736 	public int getUint64_Index(string tag, uint index, out ulong value)
737 	{
738 		// gboolean gst_tag_list_get_uint64_index (const GstTagList *list,  const gchar *tag,  guint index,  guint64 *value);
739 		return gst_tag_list_get_uint64_index(gstTagList, Str.toStringz(tag), index, &value);
740 	}
741 	
742 	/**
743 	 * Copies the contents for the given tag into the value, merging multiple values
744 	 * into one if multiple values are associated with the tag.
745 	 * Params:
746 	 * tag = tag to read out
747 	 * value = location for the result. [out]
748 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
749 	 */
750 	public int getFloat(string tag, out float value)
751 	{
752 		// gboolean gst_tag_list_get_float (const GstTagList *list,  const gchar *tag,  gfloat *value);
753 		return gst_tag_list_get_float(gstTagList, Str.toStringz(tag), &value);
754 	}
755 	
756 	/**
757 	 * Gets the value that is at the given index for the given tag in the given
758 	 * list.
759 	 * Params:
760 	 * tag = tag to read out
761 	 * index = number of entry to read out
762 	 * value = location for the result. [out]
763 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
764 	 */
765 	public int getFloatIndex(string tag, uint index, out float value)
766 	{
767 		// gboolean gst_tag_list_get_float_index (const GstTagList *list,  const gchar *tag,  guint index,  gfloat *value);
768 		return gst_tag_list_get_float_index(gstTagList, Str.toStringz(tag), index, &value);
769 	}
770 	
771 	/**
772 	 * Copies the contents for the given tag into the value, merging multiple values
773 	 * into one if multiple values are associated with the tag.
774 	 * Params:
775 	 * tag = tag to read out
776 	 * value = location for the result. [out]
777 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
778 	 */
779 	public int getDouble(string tag, out double value)
780 	{
781 		// gboolean gst_tag_list_get_double (const GstTagList *list,  const gchar *tag,  gdouble *value);
782 		return gst_tag_list_get_double(gstTagList, Str.toStringz(tag), &value);
783 	}
784 	
785 	/**
786 	 * Gets the value that is at the given index for the given tag in the given
787 	 * list.
788 	 * Params:
789 	 * tag = tag to read out
790 	 * index = number of entry to read out
791 	 * value = location for the result. [out]
792 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
793 	 */
794 	public int getDoubleIndex(string tag, uint index, out double value)
795 	{
796 		// gboolean gst_tag_list_get_double_index (const GstTagList *list,  const gchar *tag,  guint index,  gdouble *value);
797 		return gst_tag_list_get_double_index(gstTagList, Str.toStringz(tag), index, &value);
798 	}
799 	
800 	/**
801 	 * Copies the contents for the given tag into the value, possibly merging
802 	 * multiple values into one if multiple values are associated with the tag.
803 	 * Use gst_tag_list_get_string_index (list, tag, 0, value) if you want
804 	 * to retrieve the first string associated with this tag unmodified.
805 	 * The resulting string in value will be in UTF-8 encoding and should be
806 	 * freed by the caller using g_free when no longer needed. The
807 	 * returned string is also guaranteed to be non-NULL and non-empty.
808 	 * Free-function: g_free
809 	 * Params:
810 	 * tag = tag to read out
811 	 * value = location for the result. [out callee-allocates][transfer full]
812 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
813 	 */
814 	public int getString(string tag, out string value)
815 	{
816 		// gboolean gst_tag_list_get_string (const GstTagList *list,  const gchar *tag,  gchar **value);
817 		char* outvalue = null;
818 		
819 		auto p = gst_tag_list_get_string(gstTagList, Str.toStringz(tag), &outvalue);
820 		
821 		value = Str.toString(outvalue);
822 		return p;
823 	}
824 	
825 	/**
826 	 * Gets the value that is at the given index for the given tag in the given
827 	 * list.
828 	 * The resulting string in value will be in UTF-8 encoding and should be
829 	 * freed by the caller using g_free when no longer needed. The
830 	 * returned string is also guaranteed to be non-NULL and non-empty.
831 	 * Free-function: g_free
832 	 * Params:
833 	 * tag = tag to read out
834 	 * index = number of entry to read out
835 	 * value = location for the result. [out callee-allocates][transfer full]
836 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
837 	 */
838 	public int getStringIndex(string tag, uint index, out string value)
839 	{
840 		// gboolean gst_tag_list_get_string_index (const GstTagList *list,  const gchar *tag,  guint index,  gchar **value);
841 		char* outvalue = null;
842 		
843 		auto p = gst_tag_list_get_string_index(gstTagList, Str.toStringz(tag), index, &outvalue);
844 		
845 		value = Str.toString(outvalue);
846 		return p;
847 	}
848 	
849 	/**
850 	 * Peeks at the value that is at the given index for the given tag in the given
851 	 * list.
852 	 * The resulting string in value will be in UTF-8 encoding and doesn't need
853 	 * to be freed by the caller. The returned string is also guaranteed to
854 	 * be non-NULL and non-empty.
855 	 * Params:
856 	 * tag = tag to read out
857 	 * index = number of entry to read out
858 	 * value = location for the result. [out][transfer none]
859 	 * Returns: TRUE, if a value was set, FALSE if the tag didn't exist in the given list.
860 	 */
861 	public int peekStringIndex(string tag, uint index, out string value)
862 	{
863 		// gboolean gst_tag_list_peek_string_index (const GstTagList *list,  const gchar *tag,  guint index,  const gchar **value);
864 		char* outvalue = null;
865 		
866 		auto p = gst_tag_list_peek_string_index(gstTagList, Str.toStringz(tag), index, &outvalue);
867 		
868 		value = Str.toString(outvalue);
869 		return p;
870 	}
871 	
872 	/**
873 	 * Copies the contents for the given tag into the value, merging multiple values
874 	 * into one if multiple values are associated with the tag.
875 	 * Params:
876 	 * tag = tag to read out
877 	 * value = location for the result. [out][transfer none]
878 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
879 	 */
880 	public int getPointer(string tag, out void* value)
881 	{
882 		// gboolean gst_tag_list_get_pointer (const GstTagList *list,  const gchar *tag,  gpointer *value);
883 		return gst_tag_list_get_pointer(gstTagList, Str.toStringz(tag), &value);
884 	}
885 	
886 	/**
887 	 * Gets the value that is at the given index for the given tag in the given
888 	 * list.
889 	 * Params:
890 	 * tag = tag to read out
891 	 * index = number of entry to read out
892 	 * value = location for the result. [out][transfer none]
893 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list.
894 	 */
895 	public int getPointerIndex(string tag, uint index, out void* value)
896 	{
897 		// gboolean gst_tag_list_get_pointer_index (const GstTagList *list,  const gchar *tag,  guint index,  gpointer *value);
898 		return gst_tag_list_get_pointer_index(gstTagList, Str.toStringz(tag), index, &value);
899 	}
900 	
901 	/**
902 	 * Copies the first date for the given tag in the taglist into the variable
903 	 * pointed to by value. Free the date with g_date_free() when it is no longer
904 	 * needed.
905 	 * Free-function: g_date_free
906 	 * Params:
907 	 * tag = tag to read out
908 	 * value = address of a GDate pointer
909 	 * variable to store the result into. [out callee-allocates][transfer full]
910 	 * Returns: TRUE, if a date was copied, FALSE if the tag didn't exist in the given list or if it was NULL.
911 	 */
912 	public int getDate(string tag, out Date value)
913 	{
914 		// gboolean gst_tag_list_get_date (const GstTagList *list,  const gchar *tag,  GDate **value);
915 		GDate* outvalue = null;
916 		
917 		auto p = gst_tag_list_get_date(gstTagList, Str.toStringz(tag), &outvalue);
918 		
919 		value = ObjectG.getDObject!(Date)(outvalue);
920 		return p;
921 	}
922 	
923 	/**
924 	 * Gets the date that is at the given index for the given tag in the given
925 	 * list and copies it into the variable pointed to by value. Free the date
926 	 * with g_date_free() when it is no longer needed.
927 	 * Free-function: g_date_free
928 	 * Params:
929 	 * tag = tag to read out
930 	 * index = number of entry to read out
931 	 * value = location for the result. [out callee-allocates][transfer full]
932 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list or if it was NULL.
933 	 */
934 	public int getDateIndex(string tag, uint index, out Date value)
935 	{
936 		// gboolean gst_tag_list_get_date_index (const GstTagList *list,  const gchar *tag,  guint index,  GDate **value);
937 		GDate* outvalue = null;
938 		
939 		auto p = gst_tag_list_get_date_index(gstTagList, Str.toStringz(tag), index, &outvalue);
940 		
941 		value = ObjectG.getDObject!(Date)(outvalue);
942 		return p;
943 	}
944 	
945 	/**
946 	 * Copies the first datetime for the given tag in the taglist into the variable
947 	 * pointed to by value. Unref the date with gst_date_time_unref() when
948 	 * it is no longer needed.
949 	 * Free-function: gst_date_time_unref
950 	 * Params:
951 	 * tag = tag to read out
952 	 * value = address of a GstDateTime
953 	 * pointer variable to store the result into. [out callee-allocates][transfer full]
954 	 * Returns: TRUE, if a datetime was copied, FALSE if the tag didn't exist in thegiven list or if it was NULL.
955 	 */
956 	public int getDateTime(string tag, out DateTime value)
957 	{
958 		// gboolean gst_tag_list_get_date_time (const GstTagList *list,  const gchar *tag,  GstDateTime **value);
959 		GstDateTime* outvalue = null;
960 		
961 		auto p = gst_tag_list_get_date_time(gstTagList, Str.toStringz(tag), &outvalue);
962 		
963 		value = ObjectG.getDObject!(DateTime)(outvalue);
964 		return p;
965 	}
966 	
967 	/**
968 	 * Gets the datetime that is at the given index for the given tag in the given
969 	 * list and copies it into the variable pointed to by value. Unref the datetime
970 	 * with gst_date_time_unref() when it is no longer needed.
971 	 * Free-function: gst_date_time_unref
972 	 * Params:
973 	 * tag = tag to read out
974 	 * index = number of entry to read out
975 	 * value = location for the result. [out callee-allocates][transfer full]
976 	 * Returns: TRUE, if a value was copied, FALSE if the tag didn't exist in the given list or if it was NULL.
977 	 */
978 	public int getDateTimeIndex(string tag, uint index, out DateTime value)
979 	{
980 		// gboolean gst_tag_list_get_date_time_index (const GstTagList *list,  const gchar *tag,  guint index,  GstDateTime **value);
981 		GstDateTime* outvalue = null;
982 		
983 		auto p = gst_tag_list_get_date_time_index(gstTagList, Str.toStringz(tag), index, &outvalue);
984 		
985 		value = ObjectG.getDObject!(DateTime)(outvalue);
986 		return p;
987 	}
988 	
989 	/**
990 	 * Copies the first sample for the given tag in the taglist into the variable
991 	 * pointed to by sample. Free the sample with gst_sample_unref() when it is
992 	 * no longer needed. You can retrieve the buffer from the sample using
993 	 * gst_sample_get_buffer() and the associated caps (if any) with
994 	 * gst_sample_get_caps().
995 	 * Free-function: gst_sample_unref
996 	 * Params:
997 	 * tag = tag to read out
998 	 * sample = address of a GstSample
999 	 * pointer variable to store the result into. [out callee-allocates][transfer full]
1000 	 * Returns: TRUE, if a sample was returned, FALSE if the tag didn't exist in the given list or if it was NULL.
1001 	 */
1002 	public int getSample(string tag, out Sample sample)
1003 	{
1004 		// gboolean gst_tag_list_get_sample (const GstTagList *list,  const gchar *tag,  GstSample **sample);
1005 		GstSample* outsample = null;
1006 		
1007 		auto p = gst_tag_list_get_sample(gstTagList, Str.toStringz(tag), &outsample);
1008 		
1009 		sample = ObjectG.getDObject!(Sample)(outsample);
1010 		return p;
1011 	}
1012 	
1013 	/**
1014 	 * Gets the sample that is at the given index for the given tag in the given
1015 	 * list and copies it into the variable pointed to by smple. Free the sample
1016 	 * with gst_sample_unref() when it is no longer needed. You can retrieve the
1017 	 * buffer from the sample using gst_sample_get_buffer() and the associated
1018 	 * caps (if any) with gst_sample_get_caps().
1019 	 * Free-function: gst_sample_unref
1020 	 * Params:
1021 	 * tag = tag to read out
1022 	 * index = number of entry to read out
1023 	 * sample = address of a GstSample
1024 	 * pointer variable to store the result into. [out callee-allocates][transfer full]
1025 	 * Returns: TRUE, if a sample was copied, FALSE if the tag didn't exist in the given list or if it was NULL.
1026 	 */
1027 	public int getSampleIndex(string tag, uint index, out Sample sample)
1028 	{
1029 		// gboolean gst_tag_list_get_sample_index (const GstTagList *list,  const gchar *tag,  guint index,  GstSample **sample);
1030 		GstSample* outsample = null;
1031 		
1032 		auto p = gst_tag_list_get_sample_index(gstTagList, Str.toStringz(tag), index, &outsample);
1033 		
1034 		sample = ObjectG.getDObject!(Sample)(outsample);
1035 		return p;
1036 	}
1037 }