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

		public Gst.MessageType Type {
			get {
				unsafe {
					int* raw_ptr = (int*)(((byte*)Handle) + abi_info.GetFieldOffset("type"));
					return (Gst.MessageType) (*raw_ptr);
				}
			}
			set {
				unsafe {
					int* raw_ptr = (int*)(((byte*)Handle) + abi_info.GetFieldOffset("type"));
					*raw_ptr = (int) value;
				}
			}
		}

		public ulong Timestamp {
			get {
				unsafe {
					ulong* raw_ptr = (ulong*)(((byte*)Handle) + abi_info.GetFieldOffset("timestamp"));
					return (*raw_ptr);
				}
			}
			set {
				unsafe {
					ulong* raw_ptr = (ulong*)(((byte*)Handle) + abi_info.GetFieldOffset("timestamp"));
					*raw_ptr = value;
				}
			}
		}

		public Gst.Object Src {
			get {
				unsafe {
					IntPtr* raw_ptr = (IntPtr*)(((byte*)Handle) + abi_info.GetFieldOffset("src"));
					return GLib.Object.GetObject((*raw_ptr)) as Gst.Object;
				}
			}
			set {
				unsafe {
					IntPtr* raw_ptr = (IntPtr*)(((byte*)Handle) + abi_info.GetFieldOffset("src"));
					*raw_ptr = value == null ? IntPtr.Zero : value.Handle;
				}
			}
		}

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

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

		public uint Seqnum {
			get  {
				uint raw_ret = gst_message_get_seqnum(Handle);
				uint ret = raw_ret;
				return ret;
			}
			set  {
				gst_message_set_seqnum(Handle, value);
			}
		}

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

		public static new GLib.GType GType { 
			get {
				IntPtr raw_ret = gst_message_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_message_add_redirect_entry(IntPtr raw, IntPtr location, IntPtr tag_list, IntPtr entry_struct);

		public void AddRedirectEntry(string location, Gst.TagList tag_list, Gst.Structure entry_struct) {
			IntPtr native_location = GLib.Marshaller.StringToPtrGStrdup (location);
			tag_list.Owned = false;
			entry_struct.Owned = false;
			gst_message_add_redirect_entry(Handle, native_location, tag_list == null ? IntPtr.Zero : tag_list.Handle, entry_struct == null ? IntPtr.Zero : entry_struct.Handle);
			GLib.Marshaller.Free (native_location);
		}

		public void AddRedirectEntry(string location) {
			AddRedirectEntry (location, null, null);
		}

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

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

		public Gst.Structure Details { 
			get {
				IntPtr raw_ret = gst_message_get_details(Handle);
				Gst.Structure ret = raw_ret == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Structure), false);
				return ret;
			}
			set {
				value.Owned = false;
				gst_message_set_details(Handle, value == null ? IntPtr.Zero : value.Handle);
			}
		}

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

		public ulong NumRedirectEntries { 
			get {
				UIntPtr raw_ret = gst_message_get_num_redirect_entries(Handle);
				ulong ret = (ulong) raw_ret;
				return ret;
			}
		}

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

		public Gst.Structure Structure { 
			get {
				IntPtr raw_ret = gst_message_get_structure(Handle);
				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 bool gst_message_has_name(IntPtr raw, IntPtr name);

		public bool HasName(string name) {
			IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name);
			bool raw_ret = gst_message_has_name(Handle, native_name);
			bool ret = raw_ret;
			GLib.Marshaller.Free (native_name);
			return ret;
		}

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

		public ulong ParseAsyncDone() {
			ulong running_time;
			gst_message_parse_async_done(Handle, out running_time);
			return running_time;
		}

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

		public int ParseBuffering() {
			int percent;
			gst_message_parse_buffering(Handle, out percent);
			return percent;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_buffering_stats(IntPtr raw, out int mode, out int avg_in, out int avg_out, out long buffering_left);

		public void ParseBufferingStats(out Gst.BufferingMode mode, out int avg_in, out int avg_out, out long buffering_left) {
			int native_mode;
			gst_message_parse_buffering_stats(Handle, out native_mode, out avg_in, out avg_out, out buffering_left);
			mode = (Gst.BufferingMode) native_mode;
		}

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

		public Gst.Clock ParseClockLost() {
			Gst.Clock clock;
			IntPtr native_clock;
			gst_message_parse_clock_lost(Handle, out native_clock);
			clock = GLib.Object.GetObject(native_clock) as Gst.Clock;
			return clock;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_clock_provide(IntPtr raw, out IntPtr clock, out bool ready);

		public void ParseClockProvide(out Gst.Clock clock, out bool ready) {
			IntPtr native_clock;
			gst_message_parse_clock_provide(Handle, out native_clock, out ready);
			clock = GLib.Object.GetObject(native_clock) as Gst.Clock;
		}

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

		public bool ParseContextType(out string context_type) {
			IntPtr native_context_type;
			bool raw_ret = gst_message_parse_context_type(Handle, out native_context_type);
			bool ret = raw_ret;
			context_type = GLib.Marshaller.Utf8PtrToString (native_context_type);
			return ret;
		}

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

		public Gst.Device ParseDeviceAdded() {
			Gst.Device device;
			IntPtr native_device;
			gst_message_parse_device_added(Handle, out native_device);
			device = GLib.Object.GetObject(native_device, true) as Gst.Device;
			return device;
		}

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

		public void ParseDeviceChanged(out Gst.Device device, out Gst.Device changed_device) {
			IntPtr native_device;
			IntPtr native_changed_device;
			gst_message_parse_device_changed(Handle, out native_device, out native_changed_device);
			device = GLib.Object.GetObject(native_device, true) as Gst.Device;
			changed_device = GLib.Object.GetObject(native_changed_device, true) as Gst.Device;
		}

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

		public Gst.Device ParseDeviceRemoved() {
			Gst.Device device;
			IntPtr native_device;
			gst_message_parse_device_removed(Handle, out native_device);
			device = GLib.Object.GetObject(native_device, true) as Gst.Device;
			return device;
		}

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

		public Gst.Structure ParseErrorDetails() {
			Gst.Structure structure;
			IntPtr native_structure;
			gst_message_parse_error_details(Handle, out native_structure);
			structure = native_structure == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (native_structure, typeof (Gst.Structure), false);
			return structure;
		}

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

		public Gst.Structure ParseErrorWritableDetails() {
			Gst.Structure structure;
			IntPtr native_structure;
			gst_message_parse_error_writable_details(Handle, out native_structure);
			structure = native_structure == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (native_structure, typeof (Gst.Structure), false);
			return structure;
		}

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

		public bool ParseGroupId(out uint group_id) {
			bool raw_ret = gst_message_parse_group_id(Handle, out group_id);
			bool ret = raw_ret;
			return ret;
		}

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

		public Gst.Context ParseHaveContext() {
			Gst.Context context;
			IntPtr native_context = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (Gst.Context)));
			gst_message_parse_have_context(Handle, native_context);
			context = Gst.Context.New (native_context);
			Marshal.FreeHGlobal (native_context);
			return context;
		}

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

		public void ParseInfo(out IntPtr gerror, out string debug) {
			IntPtr native_debug;
			gst_message_parse_info(Handle, out gerror, out native_debug);
			debug = GLib.Marshaller.PtrToStringGFree(native_debug);
		}

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

		public Gst.Structure ParseInfoDetails() {
			Gst.Structure structure;
			IntPtr native_structure;
			gst_message_parse_info_details(Handle, out native_structure);
			structure = native_structure == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (native_structure, typeof (Gst.Structure), false);
			return structure;
		}

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

		public Gst.Structure ParseInfoWritableDetails() {
			Gst.Structure structure;
			IntPtr native_structure;
			gst_message_parse_info_writable_details(Handle, out native_structure);
			structure = native_structure == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (native_structure, typeof (Gst.Structure), false);
			return structure;
		}

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

		public double ParseInstantRateRequest() {
			double rate_multiplier;
			gst_message_parse_instant_rate_request(Handle, out rate_multiplier);
			return rate_multiplier;
		}

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

		public Gst.Clock ParseNewClock() {
			Gst.Clock clock;
			IntPtr native_clock;
			gst_message_parse_new_clock(Handle, out native_clock);
			clock = GLib.Object.GetObject(native_clock) as Gst.Clock;
			return clock;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_progress(IntPtr raw, out int type, out IntPtr code, out IntPtr text);

		public void ParseProgress(out Gst.ProgressType type, out string code, out string text) {
			int native_type;
			IntPtr native_code;
			IntPtr native_text;
			gst_message_parse_progress(Handle, out native_type, out native_code, out native_text);
			type = (Gst.ProgressType) native_type;
			code = GLib.Marshaller.PtrToStringGFree(native_code);
			text = GLib.Marshaller.PtrToStringGFree(native_text);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_property_notify(IntPtr raw, out IntPtr _object, out IntPtr property_name, IntPtr property_value);

		public void ParsePropertyNotify(out Gst.Object _object, out string property_name, out GLib.Value property_value) {
			IntPtr native__object;
			IntPtr native_property_name;
			IntPtr native_property_value = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (GLib.Value)));
			gst_message_parse_property_notify(Handle, out native__object, out native_property_name, native_property_value);
			_object = GLib.Object.GetObject(native__object) as Gst.Object;
			property_name = GLib.Marshaller.Utf8PtrToString (native_property_name);
			property_value = (GLib.Value) Marshal.PtrToStructure (native_property_value, typeof (GLib.Value));
			Marshal.FreeHGlobal (native_property_value);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_qos(IntPtr raw, out bool live, out ulong running_time, out ulong stream_time, out ulong timestamp, out ulong duration);

		public void ParseQos(out bool live, out ulong running_time, out ulong stream_time, out ulong timestamp, out ulong duration) {
			gst_message_parse_qos(Handle, out live, out running_time, out stream_time, out timestamp, out duration);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_qos_stats(IntPtr raw, out int format, out ulong processed, out ulong dropped);

		public void ParseQosStats(out Gst.Format format, out ulong processed, out ulong dropped) {
			int native_format;
			gst_message_parse_qos_stats(Handle, out native_format, out processed, out dropped);
			format = (Gst.Format) native_format;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_qos_values(IntPtr raw, out long jitter, out double proportion, out int quality);

		public void ParseQosValues(out long jitter, out double proportion, out int quality) {
			gst_message_parse_qos_values(Handle, out jitter, out proportion, out quality);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_redirect_entry(IntPtr raw, UIntPtr entry_index, out IntPtr location, out IntPtr tag_list, out IntPtr entry_struct);

		public void ParseRedirectEntry(ulong entry_index, out string location, out Gst.TagList tag_list, out Gst.Structure entry_struct) {
			IntPtr native_location;
			IntPtr native_tag_list;
			IntPtr native_entry_struct;
			gst_message_parse_redirect_entry(Handle, new UIntPtr (entry_index), out native_location, out native_tag_list, out native_entry_struct);
			location = GLib.Marshaller.Utf8PtrToString (native_location);
			tag_list = native_tag_list == IntPtr.Zero ? null : (Gst.TagList) GLib.Opaque.GetOpaque (native_tag_list, typeof (Gst.TagList), false);
			entry_struct = native_entry_struct == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (native_entry_struct, typeof (Gst.Structure), false);
		}

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

		public Gst.State ParseRequestState() {
			Gst.State state;
			int native_state;
			gst_message_parse_request_state(Handle, out native_state);
			state = (Gst.State) native_state;
			return state;
		}

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

		public ulong ParseResetTime() {
			ulong running_time;
			gst_message_parse_reset_time(Handle, out running_time);
			return running_time;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_segment_done(IntPtr raw, out int format, out long position);

		public void ParseSegmentDone(out Gst.Format format, out long position) {
			int native_format;
			gst_message_parse_segment_done(Handle, out native_format, out position);
			format = (Gst.Format) native_format;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_segment_start(IntPtr raw, out int format, out long position);

		public void ParseSegmentStart(out Gst.Format format, out long position) {
			int native_format;
			gst_message_parse_segment_start(Handle, out native_format, out position);
			format = (Gst.Format) native_format;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_state_changed(IntPtr raw, out int oldstate, out int newstate, out int pending);

		public void ParseStateChanged(out Gst.State oldstate, out Gst.State newstate, out Gst.State pending) {
			int native_oldstate;
			int native_newstate;
			int native_pending;
			gst_message_parse_state_changed(Handle, out native_oldstate, out native_newstate, out native_pending);
			oldstate = (Gst.State) native_oldstate;
			newstate = (Gst.State) native_newstate;
			pending = (Gst.State) native_pending;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_step_done(IntPtr raw, out int format, out ulong amount, out double rate, out bool flush, out bool intermediate, out ulong duration, out bool eos);

		public void ParseStepDone(out Gst.Format format, out ulong amount, out double rate, out bool flush, out bool intermediate, out ulong duration, out bool eos) {
			int native_format;
			gst_message_parse_step_done(Handle, out native_format, out amount, out rate, out flush, out intermediate, out duration, out eos);
			format = (Gst.Format) native_format;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_step_start(IntPtr raw, out bool active, out int format, out ulong amount, out double rate, out bool flush, out bool intermediate);

		public void ParseStepStart(out bool active, out Gst.Format format, out ulong amount, out double rate, out bool flush, out bool intermediate) {
			int native_format;
			gst_message_parse_step_start(Handle, out active, out native_format, out amount, out rate, out flush, out intermediate);
			format = (Gst.Format) native_format;
		}

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

		public Gst.StreamCollection ParseStreamCollection() {
			Gst.StreamCollection collection;
			IntPtr native_collection;
			gst_message_parse_stream_collection(Handle, out native_collection);
			collection = GLib.Object.GetObject(native_collection, true) as Gst.StreamCollection;
			return collection;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_stream_status(IntPtr raw, out int type, out IntPtr owner);

		public void ParseStreamStatus(out Gst.StreamStatusType type, out Gst.Element owner) {
			int native_type;
			IntPtr native_owner;
			gst_message_parse_stream_status(Handle, out native_type, out native_owner);
			type = (Gst.StreamStatusType) native_type;
			owner = GLib.Object.GetObject(native_owner) as Gst.Element;
		}

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

		public Gst.StreamCollection ParseStreamsSelected() {
			Gst.StreamCollection collection;
			IntPtr native_collection;
			gst_message_parse_streams_selected(Handle, out native_collection);
			collection = GLib.Object.GetObject(native_collection, true) as Gst.StreamCollection;
			return collection;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_structure_change(IntPtr raw, out int type, out IntPtr owner, out bool busy);

		public void ParseStructureChange(out Gst.StructureChangeType type, out Gst.Element owner, out bool busy) {
			int native_type;
			IntPtr native_owner;
			gst_message_parse_structure_change(Handle, out native_type, out native_owner, out busy);
			type = (Gst.StructureChangeType) native_type;
			owner = GLib.Object.GetObject(native_owner) as Gst.Element;
		}

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

		public Gst.TagList ParseTag() {
			Gst.TagList tag_list;
			IntPtr native_tag_list;
			gst_message_parse_tag(Handle, out native_tag_list);
			tag_list = native_tag_list == IntPtr.Zero ? null : (Gst.TagList) GLib.Opaque.GetOpaque (native_tag_list, typeof (Gst.TagList), true);
			return tag_list;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_parse_toc(IntPtr raw, IntPtr toc, out bool updated);

		public void ParseToc(out Gst.Toc toc, out bool updated) {
			IntPtr native_toc = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (Gst.Toc)));
			gst_message_parse_toc(Handle, native_toc, out updated);
			toc = Gst.Toc.New (native_toc);
			Marshal.FreeHGlobal (native_toc);
		}

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

		public void ParseWarning(out IntPtr gerror, out string debug) {
			IntPtr native_debug;
			gst_message_parse_warning(Handle, out gerror, out native_debug);
			debug = GLib.Marshaller.PtrToStringGFree(native_debug);
		}

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

		public Gst.Structure ParseWarningDetails() {
			Gst.Structure structure;
			IntPtr native_structure;
			gst_message_parse_warning_details(Handle, out native_structure);
			structure = native_structure == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (native_structure, typeof (Gst.Structure), false);
			return structure;
		}

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

		public Gst.Structure ParseWarningWritableDetails() {
			Gst.Structure structure;
			IntPtr native_structure;
			gst_message_parse_warning_writable_details(Handle, out native_structure);
			structure = native_structure == IntPtr.Zero ? null : (Gst.Structure) GLib.Opaque.GetOpaque (native_structure, typeof (Gst.Structure), false);
			return structure;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_set_buffering_stats(IntPtr raw, int mode, int avg_in, int avg_out, long buffering_left);

		public void SetBufferingStats(Gst.BufferingMode mode, int avg_in, int avg_out, long buffering_left) {
			gst_message_set_buffering_stats(Handle, (int) mode, avg_in, avg_out, buffering_left);
		}

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

		public uint GroupId { 
			set {
				gst_message_set_group_id(Handle, value);
			}
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_set_qos_stats(IntPtr raw, int format, ulong processed, ulong dropped);

		public void SetQosStats(Gst.Format format, ulong processed, ulong dropped) {
			gst_message_set_qos_stats(Handle, (int) format, processed, dropped);
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern void gst_message_set_qos_values(IntPtr raw, long jitter, double proportion, int quality);

		public void SetQosValues(long jitter, double proportion, int quality) {
			gst_message_set_qos_values(Handle, jitter, proportion, quality);
		}

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

		public void StreamsSelectedAdd(Gst.Stream stream) {
			gst_message_streams_selected_add(Handle, stream == null ? IntPtr.Zero : stream.Handle);
		}

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

		public uint StreamsSelectedGetSize() {
			uint raw_ret = gst_message_streams_selected_get_size(Handle);
			uint ret = raw_ret;
			return ret;
		}

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

		public Gst.Stream StreamsSelectedGetStream(uint idx) {
			IntPtr raw_ret = gst_message_streams_selected_get_stream(Handle, idx);
			Gst.Stream ret = GLib.Object.GetObject(raw_ret, true) as Gst.Stream;
			return ret;
		}

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

		public Gst.Structure WritableDetails() {
			IntPtr raw_ret = gst_message_writable_details(Handle);
			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_message_writable_structure(IntPtr raw);

		public Gst.Structure WritableStructure() {
			IntPtr raw_ret = gst_message_writable_structure(Handle);
			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 bool gst_message_take(ref IntPtr old_message, IntPtr new_message);

		public static bool Take(ref Gst.Message old_message, Gst.Message new_message) {
			IntPtr native_old_message = old_message == null ? IntPtr.Zero : old_message.Handle ;
			new_message.Owned = false;
			bool raw_ret = gst_message_take(ref native_old_message, new_message == null ? IntPtr.Zero : new_message.Handle);
			bool ret = raw_ret;
			old_message = native_old_message == IntPtr.Zero ? null : (Gst.Message) GLib.Opaque.GetOpaque (native_old_message, typeof (Gst.Message), true);
			return ret;
		}

		public static bool Take(ref Gst.Message old_message) {
			return Take (ref old_message, null);
		}

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

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

		public static Message NewApplication(Gst.Object src, Gst.Structure structure)
		{
			structure.Owned = false;
			Message result = new Message (gst_message_new_application(src == null ? IntPtr.Zero : src.Handle, structure == null ? IntPtr.Zero : structure.Handle));
			return result;
		}

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

		public static Message NewAsyncDone(Gst.Object src, ulong running_time)
		{
			Message result = new Message (gst_message_new_async_done(src == null ? IntPtr.Zero : src.Handle, running_time));
			return result;
		}

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

		public static Message NewAsyncStart(Gst.Object src)
		{
			Message result = new Message (gst_message_new_async_start(src == null ? IntPtr.Zero : src.Handle));
			return result;
		}

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

		public static Message NewBuffering(Gst.Object src, int percent)
		{
			Message result = new Message (gst_message_new_buffering(src == null ? IntPtr.Zero : src.Handle, percent));
			return result;
		}

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

		public static Message NewClockLost(Gst.Object src, Gst.Clock clock)
		{
			Message result = new Message (gst_message_new_clock_lost(src == null ? IntPtr.Zero : src.Handle, clock == null ? IntPtr.Zero : clock.Handle));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_clock_provide(IntPtr src, IntPtr clock, bool ready);

		public static Message NewClockProvide(Gst.Object src, Gst.Clock clock, bool ready)
		{
			Message result = new Message (gst_message_new_clock_provide(src == null ? IntPtr.Zero : src.Handle, clock == null ? IntPtr.Zero : clock.Handle, ready));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_custom(int type, IntPtr src, IntPtr structure);

		public static Message NewCustom(Gst.MessageType type, Gst.Object src, Gst.Structure structure)
		{
			structure.Owned = false;
			Message result = new Message (gst_message_new_custom((int) type, src == null ? IntPtr.Zero : src.Handle, structure == null ? IntPtr.Zero : structure.Handle));
			return result;
		}

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

		public static Message NewDeviceAdded(Gst.Object src, Gst.Device device)
		{
			Message result = new Message (gst_message_new_device_added(src == null ? IntPtr.Zero : src.Handle, device == null ? IntPtr.Zero : device.Handle));
			return result;
		}

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

		public static Message NewDeviceChanged(Gst.Object src, Gst.Device device, Gst.Device changed_device)
		{
			Message result = new Message (gst_message_new_device_changed(src == null ? IntPtr.Zero : src.Handle, device == null ? IntPtr.Zero : device.Handle, changed_device == null ? IntPtr.Zero : changed_device.Handle));
			return result;
		}

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

		public static Message NewDeviceRemoved(Gst.Object src, Gst.Device device)
		{
			Message result = new Message (gst_message_new_device_removed(src == null ? IntPtr.Zero : src.Handle, device == null ? IntPtr.Zero : device.Handle));
			return result;
		}

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

		public static Message NewDurationChanged(Gst.Object src)
		{
			Message result = new Message (gst_message_new_duration_changed(src == null ? IntPtr.Zero : src.Handle));
			return result;
		}

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

		public static Message NewElement(Gst.Object src, Gst.Structure structure)
		{
			structure.Owned = false;
			Message result = new Message (gst_message_new_element(src == null ? IntPtr.Zero : src.Handle, structure == null ? IntPtr.Zero : structure.Handle));
			return result;
		}

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

		public static Message NewEos(Gst.Object src)
		{
			Message result = new Message (gst_message_new_eos(src == null ? IntPtr.Zero : src.Handle));
			return result;
		}

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

		public static Message NewError(Gst.Object src, IntPtr error, string debug)
		{
			IntPtr native_debug = GLib.Marshaller.StringToPtrGStrdup (debug);
			Message result = new Message (gst_message_new_error(src == null ? IntPtr.Zero : src.Handle, error, native_debug));
			GLib.Marshaller.Free (native_debug);
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_error_with_details(IntPtr src, IntPtr error, IntPtr debug, IntPtr details);

		public static Message NewErrorWithDetails(Gst.Object src, IntPtr error, string debug, Gst.Structure details)
		{
			IntPtr native_debug = GLib.Marshaller.StringToPtrGStrdup (debug);
			details.Owned = false;
			Message result = new Message (gst_message_new_error_with_details(src == null ? IntPtr.Zero : src.Handle, error, native_debug, details == null ? IntPtr.Zero : details.Handle));
			GLib.Marshaller.Free (native_debug);
			return result;
		}

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

		public static Message NewHaveContext(Gst.Object src, Gst.Context context)
		{
			IntPtr native_context = GLib.Marshaller.StructureToPtrAlloc (context);
			Message result = new Message (gst_message_new_have_context(src == null ? IntPtr.Zero : src.Handle, native_context));
			Marshal.FreeHGlobal (native_context);
			return result;
		}

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

		public static Message NewInfo(Gst.Object src, IntPtr error, string debug)
		{
			IntPtr native_debug = GLib.Marshaller.StringToPtrGStrdup (debug);
			Message result = new Message (gst_message_new_info(src == null ? IntPtr.Zero : src.Handle, error, native_debug));
			GLib.Marshaller.Free (native_debug);
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_info_with_details(IntPtr src, IntPtr error, IntPtr debug, IntPtr details);

		public static Message NewInfoWithDetails(Gst.Object src, IntPtr error, string debug, Gst.Structure details)
		{
			IntPtr native_debug = GLib.Marshaller.StringToPtrGStrdup (debug);
			details.Owned = false;
			Message result = new Message (gst_message_new_info_with_details(src == null ? IntPtr.Zero : src.Handle, error, native_debug, details == null ? IntPtr.Zero : details.Handle));
			GLib.Marshaller.Free (native_debug);
			return result;
		}

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

		public static Message NewInstantRateRequest(Gst.Object src, double rate_multiplier)
		{
			Message result = new Message (gst_message_new_instant_rate_request(src == null ? IntPtr.Zero : src.Handle, rate_multiplier));
			return result;
		}

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

		public static Message NewLatency(Gst.Object src)
		{
			Message result = new Message (gst_message_new_latency(src == null ? IntPtr.Zero : src.Handle));
			return result;
		}

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

		public static Message NewNeedContext(Gst.Object src, string context_type)
		{
			IntPtr native_context_type = GLib.Marshaller.StringToPtrGStrdup (context_type);
			Message result = new Message (gst_message_new_need_context(src == null ? IntPtr.Zero : src.Handle, native_context_type));
			GLib.Marshaller.Free (native_context_type);
			return result;
		}

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

		public static Message NewNewClock(Gst.Object src, Gst.Clock clock)
		{
			Message result = new Message (gst_message_new_new_clock(src == null ? IntPtr.Zero : src.Handle, clock == null ? IntPtr.Zero : clock.Handle));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_progress(IntPtr src, int type, IntPtr code, IntPtr text);

		public static Message NewProgress(Gst.Object src, Gst.ProgressType type, string code, string text)
		{
			IntPtr native_code = GLib.Marshaller.StringToPtrGStrdup (code);
			IntPtr native_text = GLib.Marshaller.StringToPtrGStrdup (text);
			Message result = new Message (gst_message_new_progress(src == null ? IntPtr.Zero : src.Handle, (int) type, native_code, native_text));
			GLib.Marshaller.Free (native_code);
			GLib.Marshaller.Free (native_text);
			return result;
		}

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

		public static Message NewPropertyNotify(Gst.Object src, string property_name, GLib.Value val)
		{
			IntPtr native_property_name = GLib.Marshaller.StringToPtrGStrdup (property_name);
			IntPtr native_val = GLib.Marshaller.StructureToPtrAlloc (val);
			Message result = new Message (gst_message_new_property_notify(src == null ? IntPtr.Zero : src.Handle, native_property_name, native_val));
			GLib.Marshaller.Free (native_property_name);
			Marshal.FreeHGlobal (native_val);
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_qos(IntPtr src, bool live, ulong running_time, ulong stream_time, ulong timestamp, ulong duration);

		public static Message NewQos(Gst.Object src, bool live, ulong running_time, ulong stream_time, ulong timestamp, ulong duration)
		{
			Message result = new Message (gst_message_new_qos(src == null ? IntPtr.Zero : src.Handle, live, running_time, stream_time, timestamp, duration));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_redirect(IntPtr src, IntPtr location, IntPtr tag_list, IntPtr entry_struct);

		public static Message NewRedirect(Gst.Object src, string location, Gst.TagList tag_list, Gst.Structure entry_struct)
		{
			IntPtr native_location = GLib.Marshaller.StringToPtrGStrdup (location);
			tag_list.Owned = false;
			entry_struct.Owned = false;
			Message result = new Message (gst_message_new_redirect(src == null ? IntPtr.Zero : src.Handle, native_location, tag_list == null ? IntPtr.Zero : tag_list.Handle, entry_struct == null ? IntPtr.Zero : entry_struct.Handle));
			GLib.Marshaller.Free (native_location);
			return result;
		}

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

		public static Message NewRequestState(Gst.Object src, Gst.State state)
		{
			Message result = new Message (gst_message_new_request_state(src == null ? IntPtr.Zero : src.Handle, (int) state));
			return result;
		}

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

		public static Message NewResetTime(Gst.Object src, ulong running_time)
		{
			Message result = new Message (gst_message_new_reset_time(src == null ? IntPtr.Zero : src.Handle, running_time));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_segment_done(IntPtr src, int format, long position);

		public static Message NewSegmentDone(Gst.Object src, Gst.Format format, long position)
		{
			Message result = new Message (gst_message_new_segment_done(src == null ? IntPtr.Zero : src.Handle, (int) format, position));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_segment_start(IntPtr src, int format, long position);

		public static Message NewSegmentStart(Gst.Object src, Gst.Format format, long position)
		{
			Message result = new Message (gst_message_new_segment_start(src == null ? IntPtr.Zero : src.Handle, (int) format, position));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_state_changed(IntPtr src, int oldstate, int newstate, int pending);

		public static Message NewStateChanged(Gst.Object src, Gst.State oldstate, Gst.State newstate, Gst.State pending)
		{
			Message result = new Message (gst_message_new_state_changed(src == null ? IntPtr.Zero : src.Handle, (int) oldstate, (int) newstate, (int) pending));
			return result;
		}

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

		public static Message NewStateDirty(Gst.Object src)
		{
			Message result = new Message (gst_message_new_state_dirty(src == null ? IntPtr.Zero : src.Handle));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_step_done(IntPtr src, int format, ulong amount, double rate, bool flush, bool intermediate, ulong duration, bool eos);

		public static Message NewStepDone(Gst.Object src, Gst.Format format, ulong amount, double rate, bool flush, bool intermediate, ulong duration, bool eos)
		{
			Message result = new Message (gst_message_new_step_done(src == null ? IntPtr.Zero : src.Handle, (int) format, amount, rate, flush, intermediate, duration, eos));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_step_start(IntPtr src, bool active, int format, ulong amount, double rate, bool flush, bool intermediate);

		public static Message NewStepStart(Gst.Object src, bool active, Gst.Format format, ulong amount, double rate, bool flush, bool intermediate)
		{
			Message result = new Message (gst_message_new_step_start(src == null ? IntPtr.Zero : src.Handle, active, (int) format, amount, rate, flush, intermediate));
			return result;
		}

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

		public static Message NewStreamCollection(Gst.Object src, Gst.StreamCollection collection)
		{
			Message result = new Message (gst_message_new_stream_collection(src == null ? IntPtr.Zero : src.Handle, collection == null ? IntPtr.Zero : collection.Handle));
			return result;
		}

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

		public static Message NewStreamStart(Gst.Object src)
		{
			Message result = new Message (gst_message_new_stream_start(src == null ? IntPtr.Zero : src.Handle));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_stream_status(IntPtr src, int type, IntPtr owner);

		public static Message NewStreamStatus(Gst.Object src, Gst.StreamStatusType type, Gst.Element owner)
		{
			Message result = new Message (gst_message_new_stream_status(src == null ? IntPtr.Zero : src.Handle, (int) type, owner == null ? IntPtr.Zero : owner.Handle));
			return result;
		}

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

		public static Message NewStreamsSelected(Gst.Object src, Gst.StreamCollection collection)
		{
			Message result = new Message (gst_message_new_streams_selected(src == null ? IntPtr.Zero : src.Handle, collection == null ? IntPtr.Zero : collection.Handle));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_structure_change(IntPtr src, int type, IntPtr owner, bool busy);

		public static Message NewStructureChange(Gst.Object src, Gst.StructureChangeType type, Gst.Element owner, bool busy)
		{
			Message result = new Message (gst_message_new_structure_change(src == null ? IntPtr.Zero : src.Handle, (int) type, owner == null ? IntPtr.Zero : owner.Handle, busy));
			return result;
		}

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

		public static Message NewTag(Gst.Object src, Gst.TagList tag_list)
		{
			tag_list.Owned = false;
			Message result = new Message (gst_message_new_tag(src == null ? IntPtr.Zero : src.Handle, tag_list == null ? IntPtr.Zero : tag_list.Handle));
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_toc(IntPtr src, IntPtr toc, bool updated);

		public static Message NewToc(Gst.Object src, Gst.Toc toc, bool updated)
		{
			IntPtr native_toc = GLib.Marshaller.StructureToPtrAlloc (toc);
			Message result = new Message (gst_message_new_toc(src == null ? IntPtr.Zero : src.Handle, native_toc, updated));
			Marshal.FreeHGlobal (native_toc);
			return result;
		}

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

		public static Message NewWarning(Gst.Object src, IntPtr error, string debug)
		{
			IntPtr native_debug = GLib.Marshaller.StringToPtrGStrdup (debug);
			Message result = new Message (gst_message_new_warning(src == null ? IntPtr.Zero : src.Handle, error, native_debug));
			GLib.Marshaller.Free (native_debug);
			return result;
		}

		[DllImport("gstreamer-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_message_new_warning_with_details(IntPtr src, IntPtr error, IntPtr debug, IntPtr details);

		public static Message NewWarningWithDetails(Gst.Object src, IntPtr error, string debug, Gst.Structure details)
		{
			IntPtr native_debug = GLib.Marshaller.StringToPtrGStrdup (debug);
			details.Owned = false;
			Message result = new Message (gst_message_new_warning_with_details(src == null ? IntPtr.Zero : src.Handle, error, native_debug, details == null ? IntPtr.Zero : details.Handle));
			GLib.Marshaller.Free (native_debug);
			return result;
		}


		// 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("type"
							, Gst.MiniObject.abi_info.Fields
							, (uint) Marshal.SizeOf(System.Enum.GetUnderlyingType(typeof(Gst.MessageType))) // type
							, null
							, "timestamp"
							, (long) Marshal.OffsetOf(typeof(GstMessage_typeAlign), "type")
							, 0
							),
						new GLib.AbiField("timestamp"
							, -1
							, (uint) Marshal.SizeOf(typeof(ulong)) // timestamp
							, "type"
							, "src"
							, (long) Marshal.OffsetOf(typeof(GstMessage_timestampAlign), "timestamp")
							, 0
							),
						new GLib.AbiField("src"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // src
							, "timestamp"
							, "seqnum"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("seqnum"
							, -1
							, (uint) Marshal.SizeOf(typeof(uint)) // seqnum
							, "src"
							, "lock"
							, (long) Marshal.OffsetOf(typeof(GstMessage_seqnumAlign), "seqnum")
							, 0
							),
						new GLib.AbiField("lock"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // lock
							, "seqnum"
							, "cond"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("cond"
							, -1
							, (uint) Marshal.SizeOf(typeof(GLib.Cond.ABI)) // cond
							, "lock"
							, null
							, (long) Marshal.OffsetOf(typeof(GstMessage_condAlign), "cond")
							, 0
							),
					});

				return _abi_info;
			}
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GstMessage_typeAlign
		{
			sbyte f1;
			private Gst.MessageType type;
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GstMessage_timestampAlign
		{
			sbyte f1;
			private ulong timestamp;
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GstMessage_seqnumAlign
		{
			sbyte f1;
			private uint seqnum;
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GstMessage_condAlign
		{
			sbyte f1;
			private GLib.Cond.ABI cond;
		}


		// End of the ABI representation.

#endregion
	}
}
