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

namespace GES {

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

#region Autogenerated code
	public partial class Formatter : GLib.InitiallyUnowned, GES.IExtractable {

		protected Formatter (IntPtr raw) : base(raw) {}

		protected Formatter() : base(IntPtr.Zero)
		{
			CreateNativeObject (new string [0], new GLib.Value [0]);
		}


		// Internal representation of the wrapped structure ABI.
		static GLib.AbiStruct _class_abi = null;
		static public new GLib.AbiStruct class_abi {
			get {
				if (_class_abi == null)
					_class_abi = new GLib.AbiStruct (new List<GLib.AbiField>{ 
						new GLib.AbiField("can_load_uri"
							, GLib.Object.class_abi.Fields
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // can_load_uri
							, null
							, "load_from_uri"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("load_from_uri"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // load_from_uri
							, "can_load_uri"
							, "save_to_uri"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("save_to_uri"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // save_to_uri
							, "load_from_uri"
							, "name"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("name"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // name
							, "save_to_uri"
							, "description"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("description"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // description
							, "name"
							, "extension"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("extension"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // extension
							, "description"
							, "mimetype"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("mimetype"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // mimetype
							, "extension"
							, "version"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("version"
							, -1
							, (uint) Marshal.SizeOf(typeof(double)) // version
							, "mimetype"
							, "rank"
							, (long) Marshal.OffsetOf(typeof(GESFormatter_versionAlign), "version")
							, 0
							),
						new GLib.AbiField("rank"
							, -1
							, (uint) Marshal.SizeOf(System.Enum.GetUnderlyingType(typeof(Gst.Rank))) // rank
							, "version"
							, "_ges_reserved"
							, (long) Marshal.OffsetOf(typeof(GESFormatter_rankAlign), "rank")
							, 0
							),
						new GLib.AbiField("_ges_reserved"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) * 4 // _ges_reserved
							, "rank"
							, null
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
					});

				return _class_abi;
			}
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GESFormatter_versionAlign
		{
			sbyte f1;
			private double version;
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GESFormatter_rankAlign
		{
			sbyte f1;
			private Gst.Rank rank;
		}


		// End of the ABI representation.

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern void ges_formatter_class_register_metas(IntPtr name, IntPtr description, IntPtr extensions, IntPtr caps, double version, int rank);

		public static void RegisterMetas(string name, string description, string extensions, string caps, double version, Gst.Rank rank) {
			IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name);
			IntPtr native_description = GLib.Marshaller.StringToPtrGStrdup (description);
			IntPtr native_extensions = GLib.Marshaller.StringToPtrGStrdup (extensions);
			IntPtr native_caps = GLib.Marshaller.StringToPtrGStrdup (caps);
			ges_formatter_class_register_metas(native_name, native_description, native_extensions, native_caps, version, (int) rank);
			GLib.Marshaller.Free (native_name);
			GLib.Marshaller.Free (native_description);
			GLib.Marshaller.Free (native_extensions);
			GLib.Marshaller.Free (native_caps);
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr ges_formatter_get_type();

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

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern unsafe bool ges_formatter_can_load_uri(IntPtr uri, out IntPtr error);

		public static unsafe bool CanLoadUri(string uri) {
			IntPtr native_uri = GLib.Marshaller.StringToPtrGStrdup (uri);
			IntPtr error = IntPtr.Zero;
			bool raw_ret = ges_formatter_can_load_uri(native_uri, out error);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_uri);
			if (error != IntPtr.Zero) throw new GLib.GException (error);
			return ret;
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern unsafe bool ges_formatter_can_save_uri(IntPtr uri, out IntPtr error);

		public static unsafe bool CanSaveUri(string uri) {
			IntPtr native_uri = GLib.Marshaller.StringToPtrGStrdup (uri);
			IntPtr error = IntPtr.Zero;
			bool raw_ret = ges_formatter_can_save_uri(native_uri, out error);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_uri);
			if (error != IntPtr.Zero) throw new GLib.GException (error);
			return ret;
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr ges_formatter_get_default();

		public static GES.Asset Default { 
			get {
				IntPtr raw_ret = ges_formatter_get_default();
				GES.Asset ret = GLib.Object.GetObject(raw_ret) as GES.Asset;
				return ret;
			}
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern unsafe bool ges_formatter_load_from_uri(IntPtr raw, IntPtr timeline, IntPtr uri, out IntPtr error);

		[Obsolete]
		public unsafe bool LoadFromUri(GES.Timeline timeline, string uri) {
			IntPtr native_uri = GLib.Marshaller.StringToPtrGStrdup (uri);
			IntPtr error = IntPtr.Zero;
			bool raw_ret = ges_formatter_load_from_uri(Handle, timeline == null ? IntPtr.Zero : timeline.Handle, native_uri, out error);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_uri);
			if (error != IntPtr.Zero) throw new GLib.GException (error);
			return ret;
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern unsafe bool ges_formatter_save_to_uri(IntPtr raw, IntPtr timeline, IntPtr uri, bool overwrite, out IntPtr error);

		[Obsolete]
		public unsafe bool SaveToUri(GES.Timeline timeline, string uri, bool overwrite) {
			IntPtr native_uri = GLib.Marshaller.StringToPtrGStrdup (uri);
			IntPtr error = IntPtr.Zero;
			bool raw_ret = ges_formatter_save_to_uri(Handle, timeline == null ? IntPtr.Zero : timeline.Handle, native_uri, overwrite, out error);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_uri);
			if (error != IntPtr.Zero) throw new GLib.GException (error);
			return ret;
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr ges_extractable_get_asset(IntPtr raw);

		public GES.Asset Asset { 
			get {
				IntPtr raw_ret = ges_extractable_get_asset(Handle);
				GES.Asset ret = GLib.Object.GetObject(raw_ret) as GES.Asset;
				return ret;
			}
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr ges_extractable_get_id(IntPtr raw);

		public string Id { 
			get {
				IntPtr raw_ret = ges_extractable_get_id(Handle);
				string ret = GLib.Marshaller.PtrToStringGFree(raw_ret);
				return ret;
			}
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern bool ges_extractable_set_asset(IntPtr raw, IntPtr asset);

		public bool SetAsset(GES.Asset asset) {
			bool raw_ret = ges_extractable_set_asset(Handle, asset == null ? IntPtr.Zero : asset.Handle);
			bool ret = raw_ret;
			return ret;
		}


		static Formatter ()
		{
			GtkSharp.GstEditingServices.ObjectManager.Initialize ();
		}

		// 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 (new List<GLib.AbiField>{ 
						new GLib.AbiField("priv"
							, GLib.Object.abi_info.Fields
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // priv
							, null
							, "project"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("project"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // project
							, "priv"
							, "timeline"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("timeline"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // timeline
							, "project"
							, "_ges_reserved"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("_ges_reserved"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) * 4 // _ges_reserved
							, "timeline"
							, null
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
					});

				return _abi_info;
			}
		}


		// End of the ABI representation.

#endregion
	}
}
