gstreamer/gstreamer-sharp/Pad.custom
Khaled Mohammed 610da9b1d9 Added Element.LinkMany and Element.UnlinkMany
git-svn-id: svn://anonsvn.mono-project.com/source/branches/abock/gstreamer-sharp@64347 e3ebcda4-bce8-0310-ba0a-eca2169e7518
2006-08-25 09:49:52 +00:00

113 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;
}