mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-12 11:26:39 +00:00
610da9b1d9
git-svn-id: svn://anonsvn.mono-project.com/source/branches/abock/gstreamer-sharp@64347 e3ebcda4-bce8-0310-ba0a-eca2169e7518
113 lines
3.6 KiB
Text
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;
|
|
}
|