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

namespace Gst.Base {

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

#region Autogenerated code
	public partial class CollectPads : Gst.Object {

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

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

		public CollectPads () : base (IntPtr.Zero)
		{
			if (GetType () != typeof (CollectPads)) {
				CreateNativeObject (new string [0], new GLib.Value[0]);
				return;
			}
			Raw = gst_collect_pads_new();
		}

		public GLib.SList Data {
			get {
				unsafe {
					IntPtr* raw_ptr = (IntPtr*)(((byte*)Handle) + abi_info.GetFieldOffset("data"));
					return new GLib.SList((*raw_ptr));
				}
			}
		}


		// 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("_gst_reserved"
							, Gst.Object.class_abi.Fields
							, (uint) Marshal.SizeOf(typeof(IntPtr)) * 4 // _gst_reserved
							, null
							, null
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
					});

				return _class_abi;
			}
		}


		// End of the ABI representation.

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

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

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_collect_pads_add_pad(IntPtr raw, IntPtr pad, uint size, Gst.BaseSharp.CollectDataDestroyNotifyNative destroy_notify, bool _lock);

		public Gst.Base.CollectData AddPad(Gst.Pad pad, uint size, Gst.Base.CollectDataDestroyNotify destroy_notify, bool _lock) {
			Gst.BaseSharp.CollectDataDestroyNotifyWrapper destroy_notify_wrapper = new Gst.BaseSharp.CollectDataDestroyNotifyWrapper (destroy_notify);
			destroy_notify_wrapper.PersistUntilCalled ();
			IntPtr raw_ret = gst_collect_pads_add_pad(Handle, pad == null ? IntPtr.Zero : pad.Handle, size, destroy_notify_wrapper.NativeDelegate, _lock);
			Gst.Base.CollectData ret = Gst.Base.CollectData.New (raw_ret);
			return ret;
		}

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

		public uint Available() {
			uint raw_ret = gst_collect_pads_available(Handle);
			uint ret = raw_ret;
			return ret;
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern int gst_collect_pads_clip_running_time(IntPtr raw, IntPtr cdata, IntPtr buf, out IntPtr outbuf, IntPtr user_data);

		public Gst.FlowReturn ClipRunningTime(Gst.Base.CollectData cdata, Gst.Buffer buf, out Gst.Buffer outbuf, IntPtr user_data) {
			IntPtr native_cdata = GLib.Marshaller.StructureToPtrAlloc (cdata);
			IntPtr native_outbuf;
			int raw_ret = gst_collect_pads_clip_running_time(Handle, native_cdata, buf == null ? IntPtr.Zero : buf.Handle, out native_outbuf, user_data);
			Gst.FlowReturn ret = (Gst.FlowReturn) raw_ret;
			Marshal.FreeHGlobal (native_cdata);
			outbuf = native_outbuf == IntPtr.Zero ? null : (Gst.Buffer) GLib.Opaque.GetOpaque (native_outbuf, typeof (Gst.Buffer), true);
			return ret;
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_collect_pads_event_default(IntPtr raw, IntPtr data, IntPtr evnt, bool discard);

		public bool EventDefault(Gst.Base.CollectData data, Gst.Event evnt, bool discard) {
			IntPtr native_data = GLib.Marshaller.StructureToPtrAlloc (data);
			bool raw_ret = gst_collect_pads_event_default(Handle, native_data, evnt == null ? IntPtr.Zero : evnt.Handle, discard);
			bool ret = raw_ret;
			Marshal.FreeHGlobal (native_data);
			return ret;
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern uint gst_collect_pads_flush(IntPtr raw, IntPtr data, uint size);

		public uint Flush(Gst.Base.CollectData data, uint size) {
			IntPtr native_data = GLib.Marshaller.StructureToPtrAlloc (data);
			uint raw_ret = gst_collect_pads_flush(Handle, native_data, size);
			uint ret = raw_ret;
			Marshal.FreeHGlobal (native_data);
			return ret;
		}

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

		public Gst.Buffer Peek(Gst.Base.CollectData data) {
			IntPtr native_data = GLib.Marshaller.StructureToPtrAlloc (data);
			IntPtr raw_ret = gst_collect_pads_peek(Handle, native_data);
			Gst.Buffer ret = raw_ret == IntPtr.Zero ? null : (Gst.Buffer) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Buffer), true);
			Marshal.FreeHGlobal (native_data);
			return ret;
		}

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

		public Gst.Buffer Pop(Gst.Base.CollectData data) {
			IntPtr native_data = GLib.Marshaller.StructureToPtrAlloc (data);
			IntPtr raw_ret = gst_collect_pads_pop(Handle, native_data);
			Gst.Buffer ret = raw_ret == IntPtr.Zero ? null : (Gst.Buffer) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Buffer), true);
			Marshal.FreeHGlobal (native_data);
			return ret;
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_collect_pads_query_default(IntPtr raw, IntPtr data, IntPtr query, bool discard);

		public bool QueryDefault(Gst.Base.CollectData data, Gst.Query query, bool discard) {
			IntPtr native_data = GLib.Marshaller.StructureToPtrAlloc (data);
			bool raw_ret = gst_collect_pads_query_default(Handle, native_data, query == null ? IntPtr.Zero : query.Handle, discard);
			bool ret = raw_ret;
			Marshal.FreeHGlobal (native_data);
			return ret;
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_collect_pads_read_buffer(IntPtr raw, IntPtr data, uint size);

		public Gst.Buffer ReadBuffer(Gst.Base.CollectData data, uint size) {
			IntPtr native_data = GLib.Marshaller.StructureToPtrAlloc (data);
			IntPtr raw_ret = gst_collect_pads_read_buffer(Handle, native_data, size);
			Gst.Buffer ret = raw_ret == IntPtr.Zero ? null : (Gst.Buffer) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Buffer), true);
			Marshal.FreeHGlobal (native_data);
			return ret;
		}

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

		public bool RemovePad(Gst.Pad pad) {
			bool raw_ret = gst_collect_pads_remove_pad(Handle, pad == null ? IntPtr.Zero : pad.Handle);
			bool ret = raw_ret;
			return ret;
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_buffer_function(IntPtr raw, Gst.BaseSharp.CollectPadsBufferFunctionNative func, IntPtr user_data);

		public Gst.Base.CollectPadsBufferFunction BufferFunction { 
			set {
				Gst.BaseSharp.CollectPadsBufferFunctionWrapper value_wrapper = new Gst.BaseSharp.CollectPadsBufferFunctionWrapper (value);
				gst_collect_pads_set_buffer_function(Handle, value_wrapper.NativeDelegate, IntPtr.Zero);
			}
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_clip_function(IntPtr raw, Gst.BaseSharp.CollectPadsClipFunctionNative clipfunc, IntPtr user_data);

		public Gst.Base.CollectPadsClipFunction ClipFunction { 
			set {
				Gst.BaseSharp.CollectPadsClipFunctionWrapper value_wrapper = new Gst.BaseSharp.CollectPadsClipFunctionWrapper (value);
				gst_collect_pads_set_clip_function(Handle, value_wrapper.NativeDelegate, IntPtr.Zero);
			}
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_compare_function(IntPtr raw, Gst.BaseSharp.CollectPadsCompareFunctionNative func, IntPtr user_data);

		public Gst.Base.CollectPadsCompareFunction CompareFunction { 
			set {
				Gst.BaseSharp.CollectPadsCompareFunctionWrapper value_wrapper = new Gst.BaseSharp.CollectPadsCompareFunctionWrapper (value);
				gst_collect_pads_set_compare_function(Handle, value_wrapper.NativeDelegate, IntPtr.Zero);
			}
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_event_function(IntPtr raw, Gst.BaseSharp.CollectPadsEventFunctionNative func, IntPtr user_data);

		public Gst.Base.CollectPadsEventFunction EventFunction { 
			set {
				Gst.BaseSharp.CollectPadsEventFunctionWrapper value_wrapper = new Gst.BaseSharp.CollectPadsEventFunctionWrapper (value);
				gst_collect_pads_set_event_function(Handle, value_wrapper.NativeDelegate, IntPtr.Zero);
			}
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_flush_function(IntPtr raw, Gst.BaseSharp.CollectPadsFlushFunctionNative func, IntPtr user_data);

		public Gst.Base.CollectPadsFlushFunction FlushFunction { 
			set {
				Gst.BaseSharp.CollectPadsFlushFunctionWrapper value_wrapper = new Gst.BaseSharp.CollectPadsFlushFunctionWrapper (value);
				gst_collect_pads_set_flush_function(Handle, value_wrapper.NativeDelegate, IntPtr.Zero);
			}
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_flushing(IntPtr raw, bool flushing);

		public bool Flushing { 
			set {
				gst_collect_pads_set_flushing(Handle, value);
			}
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_function(IntPtr raw, Gst.BaseSharp.CollectPadsFunctionNative func, IntPtr user_data);

		public Gst.Base.CollectPadsFunction Function { 
			set {
				Gst.BaseSharp.CollectPadsFunctionWrapper value_wrapper = new Gst.BaseSharp.CollectPadsFunctionWrapper (value);
				gst_collect_pads_set_function(Handle, value_wrapper.NativeDelegate, IntPtr.Zero);
			}
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_query_function(IntPtr raw, Gst.BaseSharp.CollectPadsQueryFunctionNative func, IntPtr user_data);

		public Gst.Base.CollectPadsQueryFunction QueryFunction { 
			set {
				Gst.BaseSharp.CollectPadsQueryFunctionWrapper value_wrapper = new Gst.BaseSharp.CollectPadsQueryFunctionWrapper (value);
				gst_collect_pads_set_query_function(Handle, value_wrapper.NativeDelegate, IntPtr.Zero);
			}
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_collect_pads_set_waiting(IntPtr raw, IntPtr data, bool waiting);

		public void SetWaiting(Gst.Base.CollectData data, bool waiting) {
			IntPtr native_data = GLib.Marshaller.StructureToPtrAlloc (data);
			gst_collect_pads_set_waiting(Handle, native_data, waiting);
			Marshal.FreeHGlobal (native_data);
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_collect_pads_src_event_default(IntPtr raw, IntPtr pad, IntPtr evnt);

		public bool SrcEventDefault(Gst.Pad pad, Gst.Event evnt) {
			bool raw_ret = gst_collect_pads_src_event_default(Handle, pad == null ? IntPtr.Zero : pad.Handle, evnt == null ? IntPtr.Zero : evnt.Handle);
			bool ret = raw_ret;
			return ret;
		}

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

		public void Start() {
			gst_collect_pads_start(Handle);
		}

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

		public void Stop() {
			gst_collect_pads_stop(Handle);
		}

		[DllImport("gstbase-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_collect_pads_take_buffer(IntPtr raw, IntPtr data, uint size);

		public Gst.Buffer TakeBuffer(Gst.Base.CollectData data, uint size) {
			IntPtr native_data = GLib.Marshaller.StructureToPtrAlloc (data);
			IntPtr raw_ret = gst_collect_pads_take_buffer(Handle, native_data, size);
			Gst.Buffer ret = raw_ret == IntPtr.Zero ? null : (Gst.Buffer) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Buffer), true);
			Marshal.FreeHGlobal (native_data);
			return ret;
		}


		static CollectPads ()
		{
			GtkSharp.GstreamerSharp.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("data"
							, Gst.Object.abi_info.Fields
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // data
							, null
							, "stream_lock"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("stream_lock"
							, -1
							, (uint) Marshal.SizeOf(typeof(GLib.RecMutex.ABI)) // stream_lock
							, "data"
							, "priv"
							, (long) Marshal.OffsetOf(typeof(GstCollectPads_stream_lockAlign), "stream_lock")
							, 0
							),
						new GLib.AbiField("priv"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // priv
							, "stream_lock"
							, "_gst_reserved"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("_gst_reserved"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) * 4 // _gst_reserved
							, "priv"
							, null
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
					});

				return _abi_info;
			}
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GstCollectPads_stream_lockAlign
		{
			sbyte f1;
			private GLib.RecMutex.ABI stream_lock;
		}


		// End of the ABI representation.

#endregion
	}
}
