typefind: don't take object lock for reading the found caps
authorStefan Kost <ensonic@users.sf.net>
Wed, 12 Jan 2011 14:03:30 +0000 (16:03 +0200)
committerStefan Kost <ensonic@users.sf.net>
Fri, 28 Jan 2011 09:17:48 +0000 (11:17 +0200)
Once we switch to normal mode, we're not typefinding anymore and thus the caps
will not change. Therefore can avoid the object lock in the data-flow path.
The locking was added in order to fix bug #608877.

plugins/elements/gsttypefindelement.c

index 0b545e0..baf36c4 100644 (file)
@@ -765,10 +765,9 @@ gst_type_find_element_chain (GstPad * pad, GstBuffer * buffer)
       /* we should already have called GST_ELEMENT_ERROR */
       return GST_FLOW_ERROR;
     case MODE_NORMAL:
-      GST_OBJECT_LOCK (typefind);
+      /* don't take object lock as typefind->caps should not change anymore */
       buffer = gst_buffer_make_metadata_writable (buffer);
       gst_buffer_set_caps (buffer, typefind->caps);
-      GST_OBJECT_UNLOCK (typefind);
       return gst_pad_push (typefind->src, buffer);
     case MODE_TYPEFIND:{
       GST_OBJECT_LOCK (typefind);
@@ -874,11 +873,9 @@ gst_type_find_element_getrange (GstPad * srcpad,
   ret = gst_pad_pull_range (typefind->sink, offset, length, buffer);
 
   if (ret == GST_FLOW_OK && buffer && *buffer) {
-    GST_OBJECT_LOCK (typefind);
-
+    /* don't take object lock as typefind->caps should not change anymore */
     /* we assume that pulled buffers are meta-data writable */
     gst_buffer_set_caps (*buffer, typefind->caps);
-    GST_OBJECT_UNLOCK (typefind);
   }
 
   return ret;