protected MiniObject () : base () { } public MiniObject (GLib.Value val) : base () { Raw = gst_value_dup_mini_object (ref val); } public static explicit operator GLib.Value (MiniObject o) { GLib.Value val = new GLib.Value (new GLib.GType (gstsharp_g_type_from_instance (o.Handle))); gst_value_set_mini_object (ref val, o.Handle); return val; } public void SetGValue (ref GLib.Value val) { gst_value_set_mini_object (ref val, Handle); } [DllImport ("gstreamersharpglue-0.10.dll") ] private static extern IntPtr gstsharp_g_type_from_instance (IntPtr o); [DllImport ("gstreamer-0.10.dll") ] private static extern IntPtr gst_value_dup_mini_object (ref GLib.Value v); [DllImport ("gstreamer-0.10.dll") ] private static extern void gst_value_set_mini_object (ref GLib.Value v, IntPtr o); /* FIXME: This is not optimal! */ public void MakeWritable() { if (IsWritable) return; IntPtr copy = gst_mini_object_copy (Raw); Raw = copy; /* ^--- Takes a second ref, not good */ Unref (Raw); /* ^--- Sets Owned = false, wrong! */ Owned = true; } [DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_mini_object_copy (IntPtr raw); public Gst.MiniObject Copy() { IntPtr raw_ret = gst_mini_object_copy (Handle); GLib.GType type = new GLib.GType (gstsharp_g_type_from_instance (raw_ret)); Gst.MiniObject ret = raw_ret == IntPtr.Zero ? null : (Gst.MiniObject) GLib.Opaque.GetOpaque (raw_ret, (Type) type, true); return ret; }