diff --git a/gstreamer-sharp/Event.custom b/gstreamer-sharp/Event.custom index 0233314c24..704fbf4e65 100644 --- a/gstreamer-sharp/Event.custom +++ b/gstreamer-sharp/Event.custom @@ -27,6 +27,12 @@ public ulong Timestamp { [DllImport ("gstreamersharpglue-0.10") ] extern static uint gstsharp_gst_event_get_src_offset (); +[DllImport ("gobject-2.0.dll")] +extern static IntPtr g_object_ref (IntPtr handle); + +[DllImport ("gobject-2.0.dll")] +extern static void g_object_unref (IntPtr handle); + static uint src_offset = gstsharp_gst_event_get_src_offset (); public Gst.Object Src { get { @@ -39,9 +45,12 @@ public Gst.Object Src { if (!IsWritable) throw new ApplicationException (); + if (Src != null) + g_object_unref (Src.Handle); + unsafe { IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + src_offset); - *raw_ptr = value == null ? IntPtr.Zero : value.Handle; + *raw_ptr = value == null ? IntPtr.Zero : g_object_ref (value.Handle); } } } diff --git a/gstreamer-sharp/Message.custom b/gstreamer-sharp/Message.custom index d48f8133a3..c0b21d0fb6 100644 --- a/gstreamer-sharp/Message.custom +++ b/gstreamer-sharp/Message.custom @@ -27,6 +27,12 @@ public ulong Timestamp { [DllImport ("gstreamersharpglue-0.10") ] extern static uint gstsharp_gst_message_get_src_offset (); +[DllImport ("gobject-2.0.dll")] +extern static IntPtr g_object_ref (IntPtr handle); + +[DllImport ("gobject-2.0.dll")] +extern static void g_object_unref (IntPtr handle); + static uint src_offset = gstsharp_gst_message_get_src_offset (); public Gst.Object Src { get { @@ -39,9 +45,12 @@ public Gst.Object Src { if (!IsWritable) throw new ApplicationException (); + if (Src != null) + g_object_unref (Src.Handle); + unsafe { IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + src_offset); - *raw_ptr = value == null ? IntPtr.Zero : value.Handle; + *raw_ptr = value == null ? IntPtr.Zero : g_object_ref (value.Handle); } } }