// 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 Caps : Gst.MiniObject {

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

		public static GLib.GType GType { 
			get {
				IntPtr raw_ret = gst_caps_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_caps_append(IntPtr raw, IntPtr caps2);

		public void Append(Gst.Caps caps2) {
			caps2.Owned = false;
			gst_caps_append(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle);
		}

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

		public void AppendStructure(Gst.Structure structure) {
			structure.Owned = false;
			gst_caps_append_structure(Handle, structure == null ? IntPtr.Zero : structure.Handle);
		}

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

		public void AppendStructureFull(Gst.Structure structure, Gst.CapsFeatures features) {
			structure.Owned = false;
			IntPtr native_features = GLib.Marshaller.StructureToPtrAlloc (features);
			gst_caps_append_structure_full(Handle, structure == null ? IntPtr.Zero : structure.Handle, native_features);
			Marshal.FreeHGlobal (native_features);
		}

		public void AppendStructureFull(Gst.Structure structure) {
			AppendStructureFull (structure, Gst.CapsFeatures.Zero);
		}

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

		public bool CanIntersect(Gst.Caps caps2) {
			bool raw_ret = gst_caps_can_intersect(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle);
			bool ret = raw_ret;
			return ret;
		}

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

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

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

		public Gst.Caps CopyNth(uint nth) {
			IntPtr raw_ret = gst_caps_copy_nth(Handle, nth);
			Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
			return ret;
		}

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

		public void FilterAndMapInPlace(Gst.CapsFilterMapFunc func) {
			GstSharp.CapsFilterMapFuncWrapper func_wrapper = new GstSharp.CapsFilterMapFuncWrapper (func);
			gst_caps_filter_and_map_in_place(Handle, func_wrapper.NativeDelegate, IntPtr.Zero);
		}

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

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

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

		public bool Foreach(Gst.CapsForeachFunc func) {
			GstSharp.CapsForeachFuncWrapper func_wrapper = new GstSharp.CapsForeachFuncWrapper (func);
			bool raw_ret = gst_caps_foreach(Handle, func_wrapper.NativeDelegate, IntPtr.Zero);
			bool ret = raw_ret;
			return ret;
		}

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

		public Gst.CapsFeatures GetFeatures(uint index) {
			IntPtr raw_ret = gst_caps_get_features(Handle, index);
			Gst.CapsFeatures ret = Gst.CapsFeatures.New (raw_ret);
			return ret;
		}

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

		public uint Size { 
			get {
				uint raw_ret = gst_caps_get_size(Handle);
				uint ret = raw_ret;
				return ret;
			}
		}

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

		public Gst.Structure GetStructure(uint index) {
			IntPtr raw_ret = gst_caps_get_structure(Handle, index);
			Gst.Structure ret = raw_ret == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Structure), false);
			return ret;
		}

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

		public Gst.Caps Intersect(Gst.Caps caps2) {
			IntPtr raw_ret = gst_caps_intersect(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle);
			Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
			return ret;
		}

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

		public Gst.Caps IntersectFull(Gst.Caps caps2, Gst.CapsIntersectMode mode) {
			IntPtr raw_ret = gst_caps_intersect_full(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle, (int) mode);
			Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
			return ret;
		}

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

		public bool IsAlwaysCompatible(Gst.Caps caps2) {
			bool raw_ret = gst_caps_is_always_compatible(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle);
			bool ret = raw_ret;
			return ret;
		}

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

		public bool IsAny { 
			get {
				bool raw_ret = gst_caps_is_any(Handle);
				bool ret = raw_ret;
				return ret;
			}
		}

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

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

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

		public bool IsEqual(Gst.Caps caps2) {
			bool raw_ret = gst_caps_is_equal(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle);
			bool ret = raw_ret;
			return ret;
		}

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

		public bool IsEqualFixed(Gst.Caps caps2) {
			bool raw_ret = gst_caps_is_equal_fixed(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle);
			bool ret = raw_ret;
			return ret;
		}

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

		public bool IsFixed { 
			get {
				bool raw_ret = gst_caps_is_fixed(Handle);
				bool ret = raw_ret;
				return ret;
			}
		}

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

		public bool IsStrictlyEqual(Gst.Caps caps2) {
			bool raw_ret = gst_caps_is_strictly_equal(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle);
			bool ret = raw_ret;
			return ret;
		}

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

		public bool IsSubset(Gst.Caps superset) {
			bool raw_ret = gst_caps_is_subset(Handle, superset == null ? IntPtr.Zero : superset.Handle);
			bool ret = raw_ret;
			return ret;
		}

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

		public bool IsSubsetStructure(Gst.Structure structure) {
			bool raw_ret = gst_caps_is_subset_structure(Handle, structure == null ? IntPtr.Zero : structure.Handle);
			bool ret = raw_ret;
			return ret;
		}

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

		public bool IsSubsetStructureFull(Gst.Structure structure, Gst.CapsFeatures features) {
			IntPtr native_features = GLib.Marshaller.StructureToPtrAlloc (features);
			bool raw_ret = gst_caps_is_subset_structure_full(Handle, structure == null ? IntPtr.Zero : structure.Handle, native_features);
			bool ret = raw_ret;
			Marshal.FreeHGlobal (native_features);
			return ret;
		}

		public bool IsSubsetStructureFull(Gst.Structure structure) {
			return IsSubsetStructureFull (structure, Gst.CapsFeatures.Zero);
		}

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

		public bool MapInPlace(Gst.CapsMapFunc func) {
			GstSharp.CapsMapFuncWrapper func_wrapper = new GstSharp.CapsMapFuncWrapper (func);
			bool raw_ret = gst_caps_map_in_place(Handle, func_wrapper.NativeDelegate, IntPtr.Zero);
			bool ret = raw_ret;
			return ret;
		}

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

		public Gst.Caps Merge(Gst.Caps caps2) {
			caps2.Owned = false;
			IntPtr raw_ret = gst_caps_merge(Handle, caps2 == null ? IntPtr.Zero : caps2.Handle);
			Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
			return ret;
		}

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

		public Gst.Caps MergeStructure(Gst.Structure structure) {
			structure.Owned = false;
			IntPtr raw_ret = gst_caps_merge_structure(Handle, structure == null ? IntPtr.Zero : structure.Handle);
			Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
			return ret;
		}

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

		public Gst.Caps MergeStructureFull(Gst.Structure structure, Gst.CapsFeatures features) {
			structure.Owned = false;
			IntPtr native_features = GLib.Marshaller.StructureToPtrAlloc (features);
			IntPtr raw_ret = gst_caps_merge_structure_full(Handle, structure == null ? IntPtr.Zero : structure.Handle, native_features);
			Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
			Marshal.FreeHGlobal (native_features);
			return ret;
		}

		public Gst.Caps MergeStructureFull(Gst.Structure structure) {
			return MergeStructureFull (structure, Gst.CapsFeatures.Zero);
		}

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

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

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

		public void RemoveStructure(uint idx) {
			gst_caps_remove_structure(Handle, idx);
		}

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

		public void SetFeatures(uint index, Gst.CapsFeatures features) {
			IntPtr native_features = GLib.Marshaller.StructureToPtrAlloc (features);
			gst_caps_set_features(Handle, index, native_features);
			Marshal.FreeHGlobal (native_features);
		}

		public void SetFeatures(uint index) {
			SetFeatures (index, Gst.CapsFeatures.Zero);
		}

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

		public Gst.CapsFeatures FeaturesSimple { 
			set {
				IntPtr native_value = GLib.Marshaller.StructureToPtrAlloc (value);
				gst_caps_set_features_simple(Handle, native_value);
				Marshal.FreeHGlobal (native_value);
			}
		}

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

		public void SetValue(string field, GLib.Value value) {
			IntPtr native_field = GLib.Marshaller.StringToPtrGStrdup (field);
			IntPtr native_value = GLib.Marshaller.StructureToPtrAlloc (value);
			gst_caps_set_value(Handle, native_field, native_value);
			GLib.Marshaller.Free (native_field);
			Marshal.FreeHGlobal (native_value);
		}

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

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

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

		public Gst.Structure StealStructure(uint index) {
			IntPtr raw_ret = gst_caps_steal_structure(Handle, index);
			Gst.Structure ret = raw_ret == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Structure), true);
			return ret;
		}

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

		public Gst.Caps Subtract(Gst.Caps subtrahend) {
			IntPtr raw_ret = gst_caps_subtract(Handle, subtrahend == null ? IntPtr.Zero : subtrahend.Handle);
			Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
			return ret;
		}

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

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

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

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

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

		public static Gst.Caps FromString(string str1ng) {
			IntPtr native_str1ng = GLib.Marshaller.StringToPtrGStrdup (str1ng);
			IntPtr raw_ret = gst_caps_from_string(native_str1ng);
			Gst.Caps ret = raw_ret == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
			GLib.Marshaller.Free (native_str1ng);
			return ret;
		}

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

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

		public Caps () 
		{
			Raw = gst_caps_new_empty();
		}

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

		public Caps (string media_type) 
		{
			IntPtr native_media_type = GLib.Marshaller.StringToPtrGStrdup (media_type);
			Raw = gst_caps_new_empty_simple(native_media_type);
			GLib.Marshaller.Free (native_media_type);
		}

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

		public static Caps NewAny()
		{
			Caps result = new Caps (gst_caps_new_any());
			return result;
		}

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

		protected override void Ref (IntPtr raw)
		{
			if (!Owned) {
				gst_caps_ref (raw);
				Owned = true;
			}
		}

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

		protected override void Unref (IntPtr raw)
		{
			if (Owned) {
				gst_caps_unref (raw);
				Owned = false;
			}
		}

		protected override Action<IntPtr> DisposeUnmanagedFunc {
			get {
				return gst_caps_unref;
			}
		}


		// 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
	}
}
