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

namespace Gst.Audio {

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

#region Autogenerated code
	public partial class AudioRingBufferSpec : GLib.Opaque {

		public Gst.Caps Caps {
			get {
				unsafe {
					IntPtr* raw_ptr = (IntPtr*)(((byte*)Handle) + abi_info.GetFieldOffset("caps"));
					return (*raw_ptr) == IntPtr.Zero ? null : (Gst.Caps) GLib.Opaque.GetOpaque ((*raw_ptr), typeof (Gst.Caps), false);
				}
			}
			set {
				unsafe {
					IntPtr* raw_ptr = (IntPtr*)(((byte*)Handle) + abi_info.GetFieldOffset("caps"));
					*raw_ptr = value == null ? IntPtr.Zero : value.Handle;
				}
			}
		}

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

		public Gst.Audio.AudioInfo Info {
			get {
				unsafe {
					IntPtr* raw_ptr = (IntPtr*)(((byte*)Handle) + abi_info.GetFieldOffset("info"));
					return (*raw_ptr) == IntPtr.Zero ? null : (Gst.Audio.AudioInfo) GLib.Opaque.GetOpaque ((*raw_ptr), typeof (Gst.Audio.AudioInfo), false);
				}
			}
			set {
				unsafe {
					IntPtr* raw_ptr = (IntPtr*)(((byte*)Handle) + abi_info.GetFieldOffset("info"));
					*raw_ptr = value == null ? IntPtr.Zero : value.Handle;
				}
			}
		}

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

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

		public int Segsize {
			get {
				unsafe {
					int* raw_ptr = (int*)(((byte*)Handle) + abi_info.GetFieldOffset("segsize"));
					return (*raw_ptr);
				}
			}
			set {
				unsafe {
					int* raw_ptr = (int*)(((byte*)Handle) + abi_info.GetFieldOffset("segsize"));
					*raw_ptr = value;
				}
			}
		}

		public int Segtotal {
			get {
				unsafe {
					int* raw_ptr = (int*)(((byte*)Handle) + abi_info.GetFieldOffset("segtotal"));
					return (*raw_ptr);
				}
			}
			set {
				unsafe {
					int* raw_ptr = (int*)(((byte*)Handle) + abi_info.GetFieldOffset("segtotal"));
					*raw_ptr = value;
				}
			}
		}

		public int Seglatency {
			get {
				unsafe {
					int* raw_ptr = (int*)(((byte*)Handle) + abi_info.GetFieldOffset("seglatency"));
					return (*raw_ptr);
				}
			}
			set {
				unsafe {
					int* raw_ptr = (int*)(((byte*)Handle) + abi_info.GetFieldOffset("seglatency"));
					*raw_ptr = value;
				}
			}
		}

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


		// Internal representation of the wrapped structure ABI.
		static GLib.AbiStruct _abi_info = null;
		static public GLib.AbiStruct abi_info {
			get {
				if (_abi_info == null)
					_abi_info = new GLib.AbiStruct (new List<GLib.AbiField>{ 
						new GLib.AbiField("caps"
							, 0
							, (uint) Marshal.SizeOf(typeof(IntPtr)) // caps
							, null
							, "type"
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
						new GLib.AbiField("type"
							, -1
							, (uint) Marshal.SizeOf(System.Enum.GetUnderlyingType(typeof(Gst.Audio.AudioRingBufferFormatType))) // type
							, "caps"
							, "info"
							, (long) Marshal.OffsetOf(typeof(GstAudioRingBufferSpec_typeAlign), "type")
							, 0
							),
						new GLib.AbiField("info"
							, -1
							, Gst.Audio.AudioInfo.abi_info.Size // info
							, "type"
							, "latency_time"
							, Gst.Audio.AudioInfo.abi_info.Align
							, 0
							),
						new GLib.AbiField("latency_time"
							, -1
							, (uint) Marshal.SizeOf(typeof(ulong)) // latency_time
							, "info"
							, "buffer_time"
							, (long) Marshal.OffsetOf(typeof(GstAudioRingBufferSpec_latency_timeAlign), "latency_time")
							, 0
							),
						new GLib.AbiField("buffer_time"
							, -1
							, (uint) Marshal.SizeOf(typeof(ulong)) // buffer_time
							, "latency_time"
							, "segsize"
							, (long) Marshal.OffsetOf(typeof(GstAudioRingBufferSpec_buffer_timeAlign), "buffer_time")
							, 0
							),
						new GLib.AbiField("segsize"
							, -1
							, (uint) Marshal.SizeOf(typeof(int)) // segsize
							, "buffer_time"
							, "segtotal"
							, (long) Marshal.OffsetOf(typeof(GstAudioRingBufferSpec_segsizeAlign), "segsize")
							, 0
							),
						new GLib.AbiField("segtotal"
							, -1
							, (uint) Marshal.SizeOf(typeof(int)) // segtotal
							, "segsize"
							, "seglatency"
							, (long) Marshal.OffsetOf(typeof(GstAudioRingBufferSpec_segtotalAlign), "segtotal")
							, 0
							),
						new GLib.AbiField("seglatency"
							, -1
							, (uint) Marshal.SizeOf(typeof(int)) // seglatency
							, "segtotal"
							, "_gst_reserved"
							, (long) Marshal.OffsetOf(typeof(GstAudioRingBufferSpec_seglatencyAlign), "seglatency")
							, 0
							),
						new GLib.AbiField("_gst_reserved"
							, -1
							, (uint) Marshal.SizeOf(typeof(IntPtr)) * 4 // _gst_reserved
							, "seglatency"
							, null
							, (uint) Marshal.SizeOf(typeof(IntPtr))
							, 0
							),
					});

				return _abi_info;
			}
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GstAudioRingBufferSpec_typeAlign
		{
			sbyte f1;
			private Gst.Audio.AudioRingBufferFormatType type;
		}

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

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

		[StructLayout(LayoutKind.Sequential)]
		public struct GstAudioRingBufferSpec_segsizeAlign
		{
			sbyte f1;
			private int segsize;
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GstAudioRingBufferSpec_segtotalAlign
		{
			sbyte f1;
			private int segtotal;
		}

		[StructLayout(LayoutKind.Sequential)]
		public struct GstAudioRingBufferSpec_seglatencyAlign
		{
			sbyte f1;
			private int seglatency;
		}


		// End of the ABI representation.

#endregion
	}
}
