[MOVED FROM GST-P-FARSIGHT] Fix refcounting issues in prepare_output_buffer
authorsjoerd@luon.net <sjoerd@luon.net>
Tue, 5 Aug 2008 11:30:57 +0000 (11:30 +0000)
committerEdward Hervey <bilboed@bilboed.com>
Tue, 17 Feb 2009 18:29:59 +0000 (19:29 +0100)
20080805113057-be0f2-9dc270781f0a0f21c616ed11dbd1f198fd1b326e.gz

gst/valve/gstvalve.c

index c0f4163..d70f8ba 100644 (file)
@@ -212,18 +212,25 @@ gst_valve_prepare_output_buffer (GstBaseTransform *trans, GstBuffer * in_buf,
   }
   else
   {
+    /* Always return a reffed buffer, which in case of returning the input
+     * buffer means adding an extra ref to it */
     if (valve->discont)
     {
-      *out_buf = gst_buffer_make_metadata_writable (in_buf);
+      if (gst_buffer_is_metadata_writable (in_buf))
+      {
+        *out_buf = gst_buffer_ref (in_buf);
+      }
+      else
+      {
+        *out_buf = gst_buffer_create_sub (in_buf, 0, GST_BUFFER_SIZE (in_buf));
+      }
       GST_BUFFER_FLAG_SET (*out_buf, GST_BUFFER_FLAG_DISCONT);
       valve->discont = FALSE;
-
     }
     else
     {
-      *out_buf = in_buf;
+      *out_buf = gst_buffer_ref(in_buf);
     }
-    gst_buffer_ref (*out_buf);
   }
   GST_OBJECT_UNLOCK (GST_OBJECT (trans));