mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-03 23:16:38 +00:00
101 lines
3.6 KiB
Text
101 lines
3.6 KiB
Text
|
|
[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;
|
|
}
|