// This file was generated by the Gtk# code generator.
// Any changes made will be lost if regenerated.

namespace Gst {

	using System;
	using System.Collections;
	using System.Collections.Generic;
	using System.Runtime.InteropServices;

#region Autogenerated code
	public partial class TagList : Gst.MiniObject {

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_tag_list_get_type();

		public static new GLib.GType GType { 
			get {
				IntPtr raw_ret = gst_tag_list_get_type();
				GLib.GType ret = new GLib.GType(raw_ret);
				return ret;
			}
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_tag_list_add_value(IntPtr raw, int mode, IntPtr tag, IntPtr value);

		public void AddValue(Gst.TagMergeMode mode, string tag, GLib.Value value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_value = GLib.Marshaller.StructureToPtrAlloc (value);
			gst_tag_list_add_value(Handle, (int) mode, native_tag, native_value);
			GLib.Marshaller.Free (native_tag);
			Marshal.FreeHGlobal (native_value);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_tag_list_copy(IntPtr raw);

		public Gst.TagList Copy() {
			IntPtr raw_ret = gst_tag_list_copy(Handle);
			Gst.TagList ret = raw_ret == IntPtr.Zero ? null : (Gst.TagList) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.TagList), true);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_tag_list_foreach(IntPtr raw, GstSharp.TagForeachFuncNative func, IntPtr user_data);

		public void Foreach(Gst.TagForeachFunc func) {
			GstSharp.TagForeachFuncWrapper func_wrapper = new GstSharp.TagForeachFuncWrapper (func);
			gst_tag_list_foreach(Handle, func_wrapper.NativeDelegate, IntPtr.Zero);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_boolean(IntPtr raw, IntPtr tag, out bool value);

		public bool GetBoolean(string tag, out bool value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_boolean(Handle, native_tag, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_boolean_index(IntPtr raw, IntPtr tag, uint index, out bool value);

		public bool GetBooleanIndex(string tag, uint index, out bool value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_boolean_index(Handle, native_tag, index, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_date(IntPtr raw, IntPtr tag, out IntPtr value);

		public bool GetDate(string tag, out GLib.Date value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_value;
			bool raw_ret = gst_tag_list_get_date(Handle, native_tag, out native_value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			value = new GLib.Date(native_value);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_date_index(IntPtr raw, IntPtr tag, uint index, out IntPtr value);

		public bool GetDateIndex(string tag, uint index, out GLib.Date value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_value;
			bool raw_ret = gst_tag_list_get_date_index(Handle, native_tag, index, out native_value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			value = new GLib.Date(native_value);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_date_time(IntPtr raw, IntPtr tag, out IntPtr value);

		public bool GetDateTime(string tag, out Gst.DateTime value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_value;
			bool raw_ret = gst_tag_list_get_date_time(Handle, native_tag, out native_value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			value = native_value == IntPtr.Zero ? null : (Gst.DateTime) GLib.Opaque.GetOpaque (native_value, typeof (Gst.DateTime), true);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_date_time_index(IntPtr raw, IntPtr tag, uint index, out IntPtr value);

		public bool GetDateTimeIndex(string tag, uint index, out Gst.DateTime value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_value;
			bool raw_ret = gst_tag_list_get_date_time_index(Handle, native_tag, index, out native_value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			value = native_value == IntPtr.Zero ? null : (Gst.DateTime) GLib.Opaque.GetOpaque (native_value, typeof (Gst.DateTime), true);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_double(IntPtr raw, IntPtr tag, out double value);

		public bool GetDouble(string tag, out double value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_double(Handle, native_tag, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_double_index(IntPtr raw, IntPtr tag, uint index, out double value);

		public bool GetDoubleIndex(string tag, uint index, out double value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_double_index(Handle, native_tag, index, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_float(IntPtr raw, IntPtr tag, out float value);

		public bool GetFloat(string tag, out float value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_float(Handle, native_tag, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_float_index(IntPtr raw, IntPtr tag, uint index, out float value);

		public bool GetFloatIndex(string tag, uint index, out float value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_float_index(Handle, native_tag, index, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_int(IntPtr raw, IntPtr tag, out int value);

		public bool GetInt(string tag, out int value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_int(Handle, native_tag, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_int64(IntPtr raw, IntPtr tag, out long value);

		public bool GetInt64(string tag, out long value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_int64(Handle, native_tag, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_int64_index(IntPtr raw, IntPtr tag, uint index, out long value);

		public bool GetInt64Index(string tag, uint index, out long value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_int64_index(Handle, native_tag, index, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_int_index(IntPtr raw, IntPtr tag, uint index, out int value);

		public bool GetIntIndex(string tag, uint index, out int value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_int_index(Handle, native_tag, index, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_pointer(IntPtr raw, IntPtr tag, out IntPtr value);

		public bool GetPointer(string tag, out IntPtr value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_pointer(Handle, native_tag, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_pointer_index(IntPtr raw, IntPtr tag, uint index, out IntPtr value);

		public bool GetPointerIndex(string tag, uint index, out IntPtr value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_pointer_index(Handle, native_tag, index, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_sample(IntPtr raw, IntPtr tag, out IntPtr sample);

		public bool GetSample(string tag, out Gst.Sample sample) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_sample;
			bool raw_ret = gst_tag_list_get_sample(Handle, native_tag, out native_sample);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			sample = native_sample == IntPtr.Zero ? null : (Gst.Sample) GLib.Opaque.GetOpaque (native_sample, typeof (Gst.Sample), true);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_sample_index(IntPtr raw, IntPtr tag, uint index, out IntPtr sample);

		public bool GetSampleIndex(string tag, uint index, out Gst.Sample sample) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_sample;
			bool raw_ret = gst_tag_list_get_sample_index(Handle, native_tag, index, out native_sample);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			sample = native_sample == IntPtr.Zero ? null : (Gst.Sample) GLib.Opaque.GetOpaque (native_sample, typeof (Gst.Sample), true);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern int gst_tag_list_get_scope(IntPtr raw);

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_tag_list_set_scope(IntPtr raw, int scope);

		public Gst.TagScope Scope { 
			get {
				int raw_ret = gst_tag_list_get_scope(Handle);
				Gst.TagScope ret = (Gst.TagScope) raw_ret;
				return ret;
			}
			set {
				gst_tag_list_set_scope(Handle, (int) value);
			}
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_string(IntPtr raw, IntPtr tag, out IntPtr value);

		public bool GetString(string tag, out string value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_value;
			bool raw_ret = gst_tag_list_get_string(Handle, native_tag, out native_value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			value = GLib.Marshaller.PtrToStringGFree(native_value);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_string_index(IntPtr raw, IntPtr tag, uint index, out IntPtr value);

		public bool GetStringIndex(string tag, uint index, out string value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_value;
			bool raw_ret = gst_tag_list_get_string_index(Handle, native_tag, index, out native_value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			value = GLib.Marshaller.PtrToStringGFree(native_value);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern uint gst_tag_list_get_tag_size(IntPtr raw, IntPtr tag);

		public uint GetTagSize(string tag) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			uint raw_ret = gst_tag_list_get_tag_size(Handle, native_tag);
			uint ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_uint(IntPtr raw, IntPtr tag, out uint value);

		public bool GetUint(string tag, out uint value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_uint(Handle, native_tag, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_uint64(IntPtr raw, IntPtr tag, out ulong value);

		public bool GetUint64(string tag, out ulong value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_uint64(Handle, native_tag, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_uint64_index(IntPtr raw, IntPtr tag, uint index, out ulong value);

		public bool GetUint64Index(string tag, uint index, out ulong value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_uint64_index(Handle, native_tag, index, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_get_uint_index(IntPtr raw, IntPtr tag, uint index, out uint value);

		public bool GetUintIndex(string tag, uint index, out uint value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_get_uint_index(Handle, native_tag, index, out value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_tag_list_get_value_index(IntPtr raw, IntPtr tag, uint index);

		public GLib.Value GetValueIndex(string tag, uint index) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr raw_ret = gst_tag_list_get_value_index(Handle, native_tag, index);
			GLib.Value ret = (GLib.Value) Marshal.PtrToStructure (raw_ret, typeof (GLib.Value));
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_tag_list_insert(IntPtr raw, IntPtr from, int mode);

		public void Insert(Gst.TagList from, Gst.TagMergeMode mode) {
			gst_tag_list_insert(Handle, from == null ? IntPtr.Zero : from.Handle, (int) mode);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_is_empty(IntPtr raw);

		public bool IsEmpty { 
			get {
				bool raw_ret = gst_tag_list_is_empty(Handle);
				bool ret = raw_ret;
				return ret;
			}
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_is_equal(IntPtr raw, IntPtr list2);

		public bool IsEqual(Gst.TagList list2) {
			bool raw_ret = gst_tag_list_is_equal(Handle, list2 == null ? IntPtr.Zero : list2.Handle);
			bool ret = raw_ret;
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_tag_list_merge(IntPtr raw, IntPtr list2, int mode);

		public Gst.TagList Merge(Gst.TagList list2, Gst.TagMergeMode mode) {
			IntPtr raw_ret = gst_tag_list_merge(Handle, list2 == null ? IntPtr.Zero : list2.Handle, (int) mode);
			Gst.TagList ret = raw_ret == IntPtr.Zero ? null : (Gst.TagList) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.TagList), true);
			return ret;
		}

		public Gst.TagList Merge(Gst.TagMergeMode mode) {
			return Merge (null, mode);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern int gst_tag_list_n_tags(IntPtr raw);

		public int NTags() {
			int raw_ret = gst_tag_list_n_tags(Handle);
			int ret = raw_ret;
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_tag_list_nth_tag_name(IntPtr raw, uint index);

		public string NthTagName(uint index) {
			IntPtr raw_ret = gst_tag_list_nth_tag_name(Handle, index);
			string ret = GLib.Marshaller.Utf8PtrToString (raw_ret);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_peek_string_index(IntPtr raw, IntPtr tag, uint index, out IntPtr value);

		public bool PeekStringIndex(string tag, uint index, out string value) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			IntPtr native_value;
			bool raw_ret = gst_tag_list_peek_string_index(Handle, native_tag, index, out native_value);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_tag);
			value = GLib.Marshaller.Utf8PtrToString (native_value);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_tag_list_remove_tag(IntPtr raw, IntPtr tag);

		public void RemoveTag(string tag) {
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			gst_tag_list_remove_tag(Handle, native_tag);
			GLib.Marshaller.Free (native_tag);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_tag_list_to_string(IntPtr raw);

		public override string ToString() {
			IntPtr raw_ret = gst_tag_list_to_string(Handle);
			string ret = GLib.Marshaller.PtrToStringGFree(raw_ret);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_copy_value(IntPtr dest, IntPtr list, IntPtr tag);

		public static bool CopyValue(ref GLib.Value dest, Gst.TagList list, string tag) {
			IntPtr native_dest = GLib.Marshaller.StructureToPtrAlloc (dest);
			IntPtr native_tag = GLib.Marshaller.StringToPtrGStrdup (tag);
			bool raw_ret = gst_tag_list_copy_value(native_dest, list == null ? IntPtr.Zero : list.Handle, native_tag);
			bool ret = raw_ret;
			dest = (GLib.Value) Marshal.PtrToStructure (native_dest, typeof (GLib.Value));
			Marshal.FreeHGlobal (native_dest);
			GLib.Marshaller.Free (native_tag);
			return ret;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_replace(ref IntPtr old_taglist, IntPtr new_taglist);

		public static bool Replace(ref Gst.TagList old_taglist, Gst.TagList new_taglist) {
			IntPtr native_old_taglist = old_taglist == null ? IntPtr.Zero : old_taglist.Handle ;
			bool raw_ret = gst_tag_list_replace(ref native_old_taglist, new_taglist == null ? IntPtr.Zero : new_taglist.Handle);
			bool ret = raw_ret;
			old_taglist = native_old_taglist == IntPtr.Zero ? null : (Gst.TagList) GLib.Opaque.GetOpaque (native_old_taglist, typeof (Gst.TagList), true);
			return ret;
		}

		public static bool Replace(ref Gst.TagList old_taglist) {
			return Replace (ref old_taglist, null);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_tag_list_take(ref IntPtr old_taglist, IntPtr new_taglist);

		public static bool Take(ref Gst.TagList old_taglist, Gst.TagList new_taglist) {
			IntPtr native_old_taglist = old_taglist == null ? IntPtr.Zero : old_taglist.Handle ;
			new_taglist.Owned = false;
			bool raw_ret = gst_tag_list_take(ref native_old_taglist, new_taglist == null ? IntPtr.Zero : new_taglist.Handle);
			bool ret = raw_ret;
			old_taglist = native_old_taglist == IntPtr.Zero ? null : (Gst.TagList) GLib.Opaque.GetOpaque (native_old_taglist, typeof (Gst.TagList), true);
			return ret;
		}

		public static bool Take(ref Gst.TagList old_taglist) {
			return Take (ref old_taglist, null);
		}

		public TagList(IntPtr raw) : base(raw) {}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_tag_list_new_empty();

		public TagList () : base (IntPtr.Zero)
		{
			Raw = gst_tag_list_new_empty();
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_tag_list_new_from_string(IntPtr str);

		public TagList (string str) : base (IntPtr.Zero)
		{
			IntPtr native_str = GLib.Marshaller.StringToPtrGStrdup (str);
			Raw = gst_tag_list_new_from_string(native_str);
			GLib.Marshaller.Free (native_str);
		}


		// Internal representation of the wrapped structure ABI.
		static GLib.AbiStruct _abi_info = null;
		static public new GLib.AbiStruct abi_info {
			get {
				if (_abi_info == null)
					_abi_info = new GLib.AbiStruct (Gst.MiniObject.abi_info.Fields);

				return _abi_info;
			}
		}


		// End of the ABI representation.

#endregion
	}
}
