[DllImport ("gstreamer-0.10.dll") ] private static extern bool gst_pad_query_position (IntPtr raw, ref Format format, out long cur); public bool QueryPosition (Gst.Format format, out long current) { return gst_pad_query_position (Handle, ref format, out current); } [DllImport ("gstreamer-0.10.dll") ] private static extern bool gst_pad_query_duration (IntPtr raw, ref Format format, out long duration); public bool QueryDuration (Gst.Format format, out long duration) { return gst_pad_query_duration (Handle, ref format, out duration); } public delegate bool BufferProbeDelegate (Pad pad, Gst.Buffer buffer); internal delegate bool BufferProbeNativeDelegate (IntPtr pad, IntPtr buf, IntPtr data); internal class BufferProbeWrapper { internal BufferProbeNativeDelegate NativeFunc; BufferProbeDelegate managedFunc; public BufferProbeWrapper (BufferProbeDelegate func) { managedFunc = func; if (func != null) NativeFunc = new BufferProbeNativeDelegate (BufferProbeMarshaller); } public bool BufferProbeMarshaller (IntPtr raw_pad, IntPtr buf, IntPtr data) { Pad pad = GLib.Object.GetObject (raw_pad) as Pad; Gst.Buffer buffer = GLib.Opaque.GetOpaque (buf, typeof (Gst.Buffer), false) as Gst.Buffer; return (bool) (managedFunc (pad, buffer)); } } [DllImport ("gstreamer-0.10.dll") ] private static extern ulong gst_pad_add_buffer_probe (IntPtr pad, BufferProbeNativeDelegate func, IntPtr data); public ulong AddBufferProbe (BufferProbeDelegate func) { BufferProbeWrapper func_wrapper; if (PersistentData["AddBufferProbe"] != null) { func_wrapper = PersistentData["AddBufferProbe"] as BufferProbeWrapper; } else { func_wrapper = new BufferProbeWrapper (func); PersistentData["AddBufferProbe"] = func_wrapper; } return gst_pad_add_buffer_probe (this.Handle, func_wrapper.NativeFunc, IntPtr.Zero); } [DllImport ("gstreamer-0.10.dll") ] private static extern void gst_pad_remove_buffer_probe (IntPtr pad, uint handler_id); public void RemoveBufferProbe (uint handler_id) { gst_pad_remove_buffer_probe (this.Handle, handler_id); PersistentData["AddBufferProbe"] = null; } public delegate bool DataProbeDelegate (Pad pad, GLib.Opaque miniobject); internal delegate bool DataProbeNativeDelegate (IntPtr pad, IntPtr miniobj, IntPtr data); internal class DataProbeWrapper { internal DataProbeNativeDelegate NativeFunc; DataProbeDelegate ManagedFunc; public DataProbeWrapper (DataProbeDelegate func) { ManagedFunc = func; if (func != null) NativeFunc = new DataProbeNativeDelegate (DataProbeMarshaller); } public bool DataProbeMarshaller (IntPtr raw_pad, IntPtr miniobj, IntPtr data) { Pad pad = GLib.Object.GetObject (raw_pad) as Pad; GLib.Opaque opaque = GLib.Opaque.GetOpaque (miniobj, typeof (GLib.Opaque), true); return ManagedFunc (pad, opaque); } } [DllImport ("gstreamer-0.10.dll") ] static extern uint gst_pad_add_data_probe (IntPtr pad, DataProbeNativeDelegate func, IntPtr data); public uint AddDataProbe (DataProbeDelegate func) { DataProbeWrapper func_wrapper; if (PersistentData["AddDataProbe"] != null) { func_wrapper = PersistentData["AddDataProbe"] as DataProbeWrapper; } else { func_wrapper = new DataProbeWrapper (func); PersistentData["AddDataProbe"] = func_wrapper; } return gst_pad_add_data_probe (this.Handle, func_wrapper.NativeFunc, IntPtr.Zero); } [DllImport ("gstreamer-0.10.dll") ] static extern void gst_pad_remove_data_probe (IntPtr pad, uint handler_id); public void RemoveDataProbe (uint handler_id) { gst_pad_remove_data_probe (this.Handle, handler_id); PersistentData["AddDataProbe"] = null; }