From 48fc341b067a4766a62d0c414c119b4fc7d167a8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 23 Apr 2009 14:39:50 +0200 Subject: [PATCH] Ref/unref the Src field of Gst.Event/Message when setting it --- gstreamer-sharp/Event.custom | 11 ++++++++++- gstreamer-sharp/Message.custom | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gstreamer-sharp/Event.custom b/gstreamer-sharp/Event.custom index 0233314..704fbf4 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 d48f813..c0b21d0 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); } } } -- 2.7.4