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

namespace Gst.RtspServer {

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

#region Autogenerated code
	public partial class RTSPMediaFactory : GLib.Object {

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

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

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_bind_mcast_address(IntPtr raw, bool bind_mcast_addr);

		[GLib.Property ("bind-mcast-address")]
		public bool BindMcastAddress {
			get {
				GLib.Value val = GetProperty ("bind-mcast-address");
				bool ret = (bool) val;
				val.Dispose ();
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_bind_mcast_address(Handle, value);
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_buffer_size(IntPtr raw, uint size);

		[GLib.Property ("buffer-size")]
		public uint BufferSize {
			get  {
				uint raw_ret = gst_rtsp_media_factory_get_buffer_size(Handle);
				uint ret = raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_buffer_size(Handle, value);
			}
		}

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

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

		[GLib.Property ("clock")]
		public Gst.Clock Clock {
			get  {
				IntPtr raw_ret = gst_rtsp_media_factory_get_clock(Handle);
				Gst.Clock ret = GLib.Object.GetObject(raw_ret, true) as Gst.Clock;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_clock(Handle, value == null ? IntPtr.Zero : value.Handle);
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_dscp_qos(IntPtr raw, int dscp_qos);

		[GLib.Property ("dscp-qos")]
		public int DscpQos {
			get  {
				int raw_ret = gst_rtsp_media_factory_get_dscp_qos(Handle);
				int ret = raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_dscp_qos(Handle, value);
			}
		}

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_enable_rtcp(IntPtr raw, bool enable);

		[GLib.Property ("enable-rtcp")]
		public bool EnableRtcp {
			get {
				GLib.Value val = GetProperty ("enable-rtcp");
				bool ret = (bool) val;
				val.Dispose ();
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_enable_rtcp(Handle, value);
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_ensure_keyunit_on_start(IntPtr raw, bool ensure_keyunit_on_start);

		[GLib.Property ("ensure-keyunit-on-start")]
		public bool EnsureKeyunitOnStart {
			get  {
				bool raw_ret = gst_rtsp_media_factory_get_ensure_keyunit_on_start(Handle);
				bool ret = raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_ensure_keyunit_on_start(Handle, value);
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_ensure_keyunit_on_start_timeout(IntPtr raw, uint timeout);

		[GLib.Property ("ensure-keyunit-on-start-timeout")]
		public uint EnsureKeyunitOnStartTimeout {
			get  {
				uint raw_ret = gst_rtsp_media_factory_get_ensure_keyunit_on_start_timeout(Handle);
				uint ret = raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_ensure_keyunit_on_start_timeout(Handle, value);
			}
		}

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_eos_shutdown(IntPtr raw, bool eos_shutdown);

		[GLib.Property ("eos-shutdown")]
		public bool EosShutdown {
			get {
				GLib.Value val = GetProperty ("eos-shutdown");
				bool ret = (bool) val;
				val.Dispose ();
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_eos_shutdown(Handle, value);
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_latency(IntPtr raw, uint latency);

		[GLib.Property ("latency")]
		public uint Latency {
			get  {
				uint raw_ret = gst_rtsp_media_factory_get_latency(Handle);
				uint ret = raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_latency(Handle, value);
			}
		}

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

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

		[GLib.Property ("launch")]
		public string Launch {
			get  {
				IntPtr raw_ret = gst_rtsp_media_factory_get_launch(Handle);
				string ret = GLib.Marshaller.PtrToStringGFree(raw_ret);
				return ret;
			}
			set  {
				IntPtr native_value = GLib.Marshaller.StringToPtrGStrdup (value);
				gst_rtsp_media_factory_set_launch(Handle, native_value);
				GLib.Marshaller.Free (native_value);
			}
		}

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

		[GLib.Property ("max-mcast-ttl")]
		public uint MaxMcastTtl {
			get  {
				uint raw_ret = gst_rtsp_media_factory_get_max_mcast_ttl(Handle);
				uint ret = raw_ret;
				return ret;
			}
			set {
				GLib.Value val = new GLib.Value(value);
				SetProperty("max-mcast-ttl", val);
				val.Dispose ();
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_profiles(IntPtr raw, int profiles);

		[GLib.Property ("profiles")]
		public Gst.Rtsp.RTSPProfile Profiles {
			get  {
				int raw_ret = gst_rtsp_media_factory_get_profiles(Handle);
				Gst.Rtsp.RTSPProfile ret = (Gst.Rtsp.RTSPProfile) raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_profiles(Handle, (int) value);
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_protocols(IntPtr raw, int protocols);

		[GLib.Property ("protocols")]
		public Gst.Rtsp.RTSPLowerTrans Protocols {
			get  {
				int raw_ret = gst_rtsp_media_factory_get_protocols(Handle);
				Gst.Rtsp.RTSPLowerTrans ret = (Gst.Rtsp.RTSPLowerTrans) raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_protocols(Handle, (int) value);
			}
		}

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_shared(IntPtr raw, bool shared);

		[GLib.Property ("shared")]
		public bool Shared {
			get {
				GLib.Value val = GetProperty ("shared");
				bool ret = (bool) val;
				val.Dispose ();
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_shared(Handle, value);
			}
		}

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_stop_on_disconnect(IntPtr raw, bool stop_on_disconnect);

		[GLib.Property ("stop-on-disconnect")]
		public bool StopOnDisconnect {
			get {
				GLib.Value val = GetProperty ("stop-on-disconnect");
				bool ret = (bool) val;
				val.Dispose ();
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_stop_on_disconnect(Handle, value);
			}
		}

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

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

		[GLib.Property ("suspend-mode")]
		public Gst.RtspServer.RTSPSuspendMode SuspendMode {
			get  {
				int raw_ret = gst_rtsp_media_factory_get_suspend_mode(Handle);
				Gst.RtspServer.RTSPSuspendMode ret = (Gst.RtspServer.RTSPSuspendMode) raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_suspend_mode(Handle, (int) value);
			}
		}

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

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

		[GLib.Property ("transport-mode")]
		public Gst.RtspServer.RTSPTransportMode TransportMode {
			get  {
				int raw_ret = gst_rtsp_media_factory_get_transport_mode(Handle);
				Gst.RtspServer.RTSPTransportMode ret = (Gst.RtspServer.RTSPTransportMode) raw_ret;
				return ret;
			}
			set  {
				gst_rtsp_media_factory_set_transport_mode(Handle, (int) value);
			}
		}

		[GLib.Signal("media-constructed")]
		public event Gst.RtspServer.MediaConstructedHandler MediaConstructed {
			add {
				this.AddSignalHandler ("media-constructed", value, typeof (Gst.RtspServer.MediaConstructedArgs));
			}
			remove {
				this.RemoveSignalHandler ("media-constructed", value);
			}
		}

		[GLib.Signal("media-configure")]
		public event Gst.RtspServer.MediaConfigureHandler MediaConfigure {
			add {
				this.AddSignalHandler ("media-configure", value, typeof (Gst.RtspServer.MediaConfigureArgs));
			}
			remove {
				this.RemoveSignalHandler ("media-configure", value);
			}
		}

		static GenKeyNativeDelegate GenKey_cb_delegate;
		static GenKeyNativeDelegate GenKeyVMCallback {
			get {
				if (GenKey_cb_delegate == null)
					GenKey_cb_delegate = new GenKeyNativeDelegate (GenKey_cb);
				return GenKey_cb_delegate;
			}
		}

		static void OverrideGenKey (GLib.GType gtype)
		{
			OverrideGenKey (gtype, GenKeyVMCallback);
		}

		static void OverrideGenKey (GLib.GType gtype, GenKeyNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("gen_key"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate((Delegate) callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr GenKeyNativeDelegate (IntPtr inst, IntPtr url);

		static IntPtr GenKey_cb (IntPtr inst, IntPtr url)
		{
			try {
				RTSPMediaFactory __obj = GLib.Object.GetObject (inst, false) as RTSPMediaFactory;
				string __result;
				__result = __obj.OnGenKey (Gst.Rtsp.RTSPUrl.New (url));
				return GLib.Marshaller.StringToPtrGStrdup(__result);
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, true);
				// NOTREACHED: above call does not return.
				throw e;
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(Gst.RtspServer.RTSPMediaFactory), ConnectionMethod="OverrideGenKey")]
		protected virtual string OnGenKey (Gst.Rtsp.RTSPUrl url)
		{
			return InternalGenKey (url);
		}

		private string InternalGenKey (Gst.Rtsp.RTSPUrl url)
		{
			GenKeyNativeDelegate unmanaged = null;
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) this.LookupGType().GetThresholdType().GetClassPtr()) + (long) class_abi.GetFieldOffset("gen_key"));
				unmanaged = (GenKeyNativeDelegate) Marshal.GetDelegateForFunctionPointer(*raw_ptr, typeof(GenKeyNativeDelegate));
			}
			if (unmanaged == null) return null;

			IntPtr native_url = GLib.Marshaller.StructureToPtrAlloc (url);
			IntPtr __result = unmanaged (this.Handle, native_url);
			Marshal.FreeHGlobal (native_url);
			return GLib.Marshaller.PtrToStringGFree(__result);
		}

		static CreateElementNativeDelegate CreateElement_cb_delegate;
		static CreateElementNativeDelegate CreateElementVMCallback {
			get {
				if (CreateElement_cb_delegate == null)
					CreateElement_cb_delegate = new CreateElementNativeDelegate (CreateElement_cb);
				return CreateElement_cb_delegate;
			}
		}

		static void OverrideCreateElement (GLib.GType gtype)
		{
			OverrideCreateElement (gtype, CreateElementVMCallback);
		}

		static void OverrideCreateElement (GLib.GType gtype, CreateElementNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("create_element"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate((Delegate) callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr CreateElementNativeDelegate (IntPtr inst, IntPtr url);

		static IntPtr CreateElement_cb (IntPtr inst, IntPtr url)
		{
			try {
				RTSPMediaFactory __obj = GLib.Object.GetObject (inst, false) as RTSPMediaFactory;
				Gst.Element __result;
				__result = __obj.OnCreateElement (Gst.Rtsp.RTSPUrl.New (url));
				return __result == null ? IntPtr.Zero : __result.Handle;
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, true);
				// NOTREACHED: above call does not return.
				throw e;
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(Gst.RtspServer.RTSPMediaFactory), ConnectionMethod="OverrideCreateElement")]
		protected virtual Gst.Element OnCreateElement (Gst.Rtsp.RTSPUrl url)
		{
			return InternalCreateElement (url);
		}

		private Gst.Element InternalCreateElement (Gst.Rtsp.RTSPUrl url)
		{
			CreateElementNativeDelegate unmanaged = null;
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) this.LookupGType().GetThresholdType().GetClassPtr()) + (long) class_abi.GetFieldOffset("create_element"));
				unmanaged = (CreateElementNativeDelegate) Marshal.GetDelegateForFunctionPointer(*raw_ptr, typeof(CreateElementNativeDelegate));
			}
			if (unmanaged == null) return null;

			IntPtr native_url = GLib.Marshaller.StructureToPtrAlloc (url);
			IntPtr __result = unmanaged (this.Handle, native_url);
			Marshal.FreeHGlobal (native_url);
			return GLib.Object.GetObject(__result) as Gst.Element;
		}

		static ConstructNativeDelegate Construct_cb_delegate;
		static ConstructNativeDelegate ConstructVMCallback {
			get {
				if (Construct_cb_delegate == null)
					Construct_cb_delegate = new ConstructNativeDelegate (Construct_cb);
				return Construct_cb_delegate;
			}
		}

		static void OverrideConstruct (GLib.GType gtype)
		{
			OverrideConstruct (gtype, ConstructVMCallback);
		}

		static void OverrideConstruct (GLib.GType gtype, ConstructNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("construct"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate((Delegate) callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr ConstructNativeDelegate (IntPtr inst, IntPtr url);

		static IntPtr Construct_cb (IntPtr inst, IntPtr url)
		{
			try {
				RTSPMediaFactory __obj = GLib.Object.GetObject (inst, false) as RTSPMediaFactory;
				Gst.RtspServer.RTSPMedia __result;
				__result = __obj.OnConstruct (Gst.Rtsp.RTSPUrl.New (url));
				return __result == null ? IntPtr.Zero : __result.OwnedHandle;
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, true);
				// NOTREACHED: above call does not return.
				throw e;
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(Gst.RtspServer.RTSPMediaFactory), ConnectionMethod="OverrideConstruct")]
		protected virtual Gst.RtspServer.RTSPMedia OnConstruct (Gst.Rtsp.RTSPUrl url)
		{
			return InternalConstruct (url);
		}

		private Gst.RtspServer.RTSPMedia InternalConstruct (Gst.Rtsp.RTSPUrl url)
		{
			ConstructNativeDelegate unmanaged = null;
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) this.LookupGType().GetThresholdType().GetClassPtr()) + (long) class_abi.GetFieldOffset("construct"));
				unmanaged = (ConstructNativeDelegate) Marshal.GetDelegateForFunctionPointer(*raw_ptr, typeof(ConstructNativeDelegate));
			}
			if (unmanaged == null) return null;

			IntPtr native_url = GLib.Marshaller.StructureToPtrAlloc (url);
			IntPtr __result = unmanaged (this.Handle, native_url);
			Marshal.FreeHGlobal (native_url);
			return GLib.Object.GetObject(__result, true) as Gst.RtspServer.RTSPMedia;
		}

		static ConfigureNativeDelegate Configure_cb_delegate;
		static ConfigureNativeDelegate ConfigureVMCallback {
			get {
				if (Configure_cb_delegate == null)
					Configure_cb_delegate = new ConfigureNativeDelegate (Configure_cb);
				return Configure_cb_delegate;
			}
		}

		static void OverrideConfigure (GLib.GType gtype)
		{
			OverrideConfigure (gtype, ConfigureVMCallback);
		}

		static void OverrideConfigure (GLib.GType gtype, ConfigureNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("configure"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate((Delegate) callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void ConfigureNativeDelegate (IntPtr inst, IntPtr media);

		static void Configure_cb (IntPtr inst, IntPtr media)
		{
			try {
				RTSPMediaFactory __obj = GLib.Object.GetObject (inst, false) as RTSPMediaFactory;
				__obj.OnConfigure (GLib.Object.GetObject(media) as Gst.RtspServer.RTSPMedia);
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, false);
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(Gst.RtspServer.RTSPMediaFactory), ConnectionMethod="OverrideConfigure")]
		protected virtual void OnConfigure (Gst.RtspServer.RTSPMedia media)
		{
			InternalConfigure (media);
		}

		private void InternalConfigure (Gst.RtspServer.RTSPMedia media)
		{
			ConfigureNativeDelegate unmanaged = null;
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) this.LookupGType().GetThresholdType().GetClassPtr()) + (long) class_abi.GetFieldOffset("configure"));
				unmanaged = (ConfigureNativeDelegate) Marshal.GetDelegateForFunctionPointer(*raw_ptr, typeof(ConfigureNativeDelegate));
			}
			if (unmanaged == null) return;

			unmanaged (this.Handle, media == null ? IntPtr.Zero : media.Handle);
		}

		static MediaConstructedNativeDelegate MediaConstructed_cb_delegate;
		static MediaConstructedNativeDelegate MediaConstructedVMCallback {
			get {
				if (MediaConstructed_cb_delegate == null)
					MediaConstructed_cb_delegate = new MediaConstructedNativeDelegate (MediaConstructed_cb);
				return MediaConstructed_cb_delegate;
			}
		}

		static void OverrideMediaConstructed (GLib.GType gtype)
		{
			OverrideMediaConstructed (gtype, MediaConstructedVMCallback);
		}

		static void OverrideMediaConstructed (GLib.GType gtype, MediaConstructedNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("media_constructed"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate((Delegate) callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void MediaConstructedNativeDelegate (IntPtr inst, IntPtr _object);

		static void MediaConstructed_cb (IntPtr inst, IntPtr _object)
		{
			try {
				RTSPMediaFactory __obj = GLib.Object.GetObject (inst, false) as RTSPMediaFactory;
				__obj.OnMediaConstructed (GLib.Object.GetObject(_object) as Gst.RtspServer.RTSPMedia);
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, false);
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(Gst.RtspServer.RTSPMediaFactory), ConnectionMethod="OverrideMediaConstructed")]
		protected virtual void OnMediaConstructed (Gst.RtspServer.RTSPMedia _object)
		{
			InternalMediaConstructed (_object);
		}

		private void InternalMediaConstructed (Gst.RtspServer.RTSPMedia _object)
		{
			MediaConstructedNativeDelegate unmanaged = null;
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) this.LookupGType().GetThresholdType().GetClassPtr()) + (long) class_abi.GetFieldOffset("media_constructed"));
				unmanaged = (MediaConstructedNativeDelegate) Marshal.GetDelegateForFunctionPointer(*raw_ptr, typeof(MediaConstructedNativeDelegate));
			}
			if (unmanaged == null) return;

			unmanaged (this.Handle, _object == null ? IntPtr.Zero : _object.Handle);
		}

		static MediaConfigureNativeDelegate MediaConfigure_cb_delegate;
		static MediaConfigureNativeDelegate MediaConfigureVMCallback {
			get {
				if (MediaConfigure_cb_delegate == null)
					MediaConfigure_cb_delegate = new MediaConfigureNativeDelegate (MediaConfigure_cb);
				return MediaConfigure_cb_delegate;
			}
		}

		static void OverrideMediaConfigure (GLib.GType gtype)
		{
			OverrideMediaConfigure (gtype, MediaConfigureVMCallback);
		}

		static void OverrideMediaConfigure (GLib.GType gtype, MediaConfigureNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("media_configure"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate((Delegate) callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void MediaConfigureNativeDelegate (IntPtr inst, IntPtr _object);

		static void MediaConfigure_cb (IntPtr inst, IntPtr _object)
		{
			try {
				RTSPMediaFactory __obj = GLib.Object.GetObject (inst, false) as RTSPMediaFactory;
				__obj.OnMediaConfigure (GLib.Object.GetObject(_object) as Gst.RtspServer.RTSPMedia);
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, false);
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(Gst.RtspServer.RTSPMediaFactory), ConnectionMethod="OverrideMediaConfigure")]
		protected virtual void OnMediaConfigure (Gst.RtspServer.RTSPMedia _object)
		{
			InternalMediaConfigure (_object);
		}

		private void InternalMediaConfigure (Gst.RtspServer.RTSPMedia _object)
		{
			MediaConfigureNativeDelegate unmanaged = null;
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) this.LookupGType().GetThresholdType().GetClassPtr()) + (long) class_abi.GetFieldOffset("media_configure"));
				unmanaged = (MediaConfigureNativeDelegate) Marshal.GetDelegateForFunctionPointer(*raw_ptr, typeof(MediaConfigureNativeDelegate));
			}
			if (unmanaged == null) return;

			unmanaged (this.Handle, _object == null ? IntPtr.Zero : _object.Handle);
		}


		// 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("gen_key"
							, GLib.Object.class_abi.Fields
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // gen_key
							, null
							, "create_element"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("create_element"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // create_element
							, "gen_key"
							, "construct"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("construct"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // construct
							, "create_element"
							, "create_pipeline"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("create_pipeline"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // create_pipeline
							, "construct"
							, "configure"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("configure"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // configure
							, "create_pipeline"
							, "media_constructed"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("media_constructed"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // media_constructed
							, "configure"
							, "media_configure"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("media_configure"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // media_configure
							, "media_constructed"
							, "_gst_reserved"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("_gst_reserved"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) * 20 // _gst_reserved
							, "media_configure"
							, null
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
					});

				return _class_abi;
			}
		}


		// End of the ABI representation.

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

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

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

		public void AddRoleFromStructure(Gst.Structure structure) {
			gst_rtsp_media_factory_add_role_from_structure(Handle, structure == null ? IntPtr.Zero : structure.Handle);
		}

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

		public Gst.RtspServer.RTSPMedia Construct(Gst.Rtsp.RTSPUrl url) {
			IntPtr native_url = GLib.Marshaller.StructureToPtrAlloc (url);
			IntPtr raw_ret = gst_rtsp_media_factory_construct(Handle, native_url);
			Gst.RtspServer.RTSPMedia ret = GLib.Object.GetObject(raw_ret, true) as Gst.RtspServer.RTSPMedia;
			Marshal.FreeHGlobal (native_url);
			return ret;
		}

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

		public Gst.Element CreateElement(Gst.Rtsp.RTSPUrl url) {
			IntPtr native_url = GLib.Marshaller.StructureToPtrAlloc (url);
			IntPtr raw_ret = gst_rtsp_media_factory_create_element(Handle, native_url);
			Gst.Element ret = GLib.Object.GetObject(raw_ret) as Gst.Element;
			Marshal.FreeHGlobal (native_url);
			return ret;
		}

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

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

		public Gst.RtspServer.RTSPAddressPool AddressPool { 
			get {
				IntPtr raw_ret = gst_rtsp_media_factory_get_address_pool(Handle);
				Gst.RtspServer.RTSPAddressPool ret = GLib.Object.GetObject(raw_ret, true) as Gst.RtspServer.RTSPAddressPool;
				return ret;
			}
			set {
				gst_rtsp_media_factory_set_address_pool(Handle, value == null ? IntPtr.Zero : value.Handle);
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_do_retransmission(IntPtr raw, bool do_retransmission);

		public bool DoRetransmission { 
			get {
				bool raw_ret = gst_rtsp_media_factory_get_do_retransmission(Handle);
				bool ret = raw_ret;
				return ret;
			}
			set {
				gst_rtsp_media_factory_set_do_retransmission(Handle, value);
			}
		}

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

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

		public GLib.GType MediaGtype { 
			get {
				IntPtr raw_ret = gst_rtsp_media_factory_get_media_gtype(Handle);
				GLib.GType ret = new GLib.GType(raw_ret);
				return ret;
			}
			set {
				gst_rtsp_media_factory_set_media_gtype(Handle, value.Val);
			}
		}

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

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

		public string MulticastIface { 
			get {
				IntPtr raw_ret = gst_rtsp_media_factory_get_multicast_iface(Handle);
				string ret = GLib.Marshaller.PtrToStringGFree(raw_ret);
				return ret;
			}
			set {
				IntPtr native_value = GLib.Marshaller.StringToPtrGStrdup (value);
				gst_rtsp_media_factory_set_multicast_iface(Handle, native_value);
				GLib.Marshaller.Free (native_value);
			}
		}

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

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

		public Gst.RtspServer.RTSPPermissions Permissions { 
			get {
				IntPtr raw_ret = gst_rtsp_media_factory_get_permissions(Handle);
				Gst.RtspServer.RTSPPermissions ret = raw_ret == IntPtr.Zero ? null : (Gst.RtspServer.RTSPPermissions) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.RtspServer.RTSPPermissions), true);
				return ret;
			}
			set {
				gst_rtsp_media_factory_set_permissions(Handle, value == null ? IntPtr.Zero : value.Handle);
			}
		}

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

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

		public Gst.RtspServer.RTSPPublishClockMode PublishClockMode { 
			get {
				int raw_ret = gst_rtsp_media_factory_get_publish_clock_mode(Handle);
				Gst.RtspServer.RTSPPublishClockMode ret = (Gst.RtspServer.RTSPPublishClockMode) raw_ret;
				return ret;
			}
			set {
				gst_rtsp_media_factory_set_publish_clock_mode(Handle, (int) value);
			}
		}

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

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_rtsp_media_factory_set_retransmission_time(IntPtr raw, ulong time);

		public ulong RetransmissionTime { 
			get {
				ulong raw_ret = gst_rtsp_media_factory_get_retransmission_time(Handle);
				ulong ret = raw_ret;
				return ret;
			}
			set {
				gst_rtsp_media_factory_set_retransmission_time(Handle, value);
			}
		}

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

		public bool IsBindMcastAddress { 
			get {
				bool raw_ret = gst_rtsp_media_factory_is_bind_mcast_address(Handle);
				bool ret = raw_ret;
				return ret;
			}
		}

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

		public bool IsEnableRtcp { 
			get {
				bool raw_ret = gst_rtsp_media_factory_is_enable_rtcp(Handle);
				bool ret = raw_ret;
				return ret;
			}
		}

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

		public bool IsEosShutdown { 
			get {
				bool raw_ret = gst_rtsp_media_factory_is_eos_shutdown(Handle);
				bool ret = raw_ret;
				return ret;
			}
		}

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

		public bool IsShared { 
			get {
				bool raw_ret = gst_rtsp_media_factory_is_shared(Handle);
				bool ret = raw_ret;
				return ret;
			}
		}

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

		public bool IsStopOnDisonnect { 
			get {
				bool raw_ret = gst_rtsp_media_factory_is_stop_on_disonnect(Handle);
				bool ret = raw_ret;
				return ret;
			}
		}

		[DllImport("gstrtspserver-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern bool gst_rtsp_media_factory_set_max_mcast_ttl(IntPtr raw, uint ttl);

		public bool SetMaxMcastTtl(uint ttl) {
			bool raw_ret = gst_rtsp_media_factory_set_max_mcast_ttl(Handle, ttl);
			bool ret = raw_ret;
			return ret;
		}


		static RTSPMediaFactory ()
		{
			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("priv"
							, GLib.Object.abi_info.Fields
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // priv
							, null
							, "_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;
			}
		}


		// End of the ABI representation.

#endregion
	}
}
