videobalance: Make property access threadsafe
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Sun, 18 Apr 2010 20:19:55 +0000 (22:19 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 29 Apr 2010 17:28:20 +0000 (19:28 +0200)
gst/videofilter/gstvideobalance.c

index b20fe3d..cf6aa9b 100644 (file)
@@ -177,9 +177,11 @@ static void
 gst_video_balance_update_properties (GstVideoBalance * videobalance)
 {
   gboolean passthrough = gst_video_balance_is_passthrough (videobalance);
+  GstBaseTransform *base = GST_BASE_TRANSFORM (videobalance);
 
-  gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (videobalance),
-      passthrough);
+  GST_BASE_TRANSFORM_LOCK (base);
+  base->passthrough = passthrough;
+  GST_BASE_TRANSFORM_UNLOCK (base);
 
   if (!passthrough)
     gst_video_balance_update_tables (videobalance);
@@ -317,7 +319,9 @@ gst_video_balance_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
   if (size != videobalance->size)
     goto wrong_size;
 
+  GST_OBJECT_LOCK (videobalance);
   videobalance->process (videobalance, data);
+  GST_OBJECT_UNLOCK (videobalance);
 
 done:
   return GST_FLOW_OK;
@@ -501,6 +505,7 @@ gst_video_balance_colorbalance_set_value (GstColorBalance * balance,
   g_return_if_fail (GST_IS_VIDEO_FILTER (vb));
   g_return_if_fail (channel->label != NULL);
 
+  GST_OBJECT_LOCK (vb);
   if (!g_ascii_strcasecmp (channel->label, "HUE")) {
     new_val = (value + 1000.0) * 2.0 / 2000.0 - 1.0;
     changed = new_val != vb->hue;
@@ -520,6 +525,7 @@ gst_video_balance_colorbalance_set_value (GstColorBalance * balance,
   }
 
   gst_video_balance_update_properties (vb);
+  GST_OBJECT_UNLOCK (vb);
 
   gst_color_balance_value_changed (balance, channel,
       gst_color_balance_get_value (balance, channel));
@@ -580,6 +586,7 @@ gst_video_balance_set_property (GObject * object, guint prop_id,
   gdouble d;
   const gchar *label = NULL;
 
+  GST_OBJECT_LOCK (balance);
   switch (prop_id) {
     case PROP_CONTRAST:
       d = g_value_get_double (value);
@@ -619,6 +626,7 @@ gst_video_balance_set_property (GObject * object, guint prop_id,
   }
 
   gst_video_balance_update_properties (balance);
+  GST_OBJECT_UNLOCK (balance);
 
   if (label) {
     GstColorBalanceChannel *channel =