val);
GST_OBJECT_LOCK (gamma);
gamma->gamma = val;
- gst_gamma_calculate_tables (gamma);
GST_OBJECT_UNLOCK (gamma);
+ gst_gamma_calculate_tables (gamma);
break;
}
default:
gint n;
gdouble val;
gdouble exp;
+ gboolean passthrough = FALSE;
+ GST_OBJECT_LOCK (gamma);
if (gamma->gamma == 1.0) {
- gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (gamma), TRUE);
- return;
- }
- gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (gamma), FALSE);
-
- exp = 1.0 / gamma->gamma;
- for (n = 0; n < 256; n++) {
- val = n / 255.0;
- val = pow (val, exp);
- val = 255.0 * val;
- gamma->gamma_table[n] = (guint8) floor (val + 0.5);
+ passthrough = TRUE;
+ } else {
+ exp = 1.0 / gamma->gamma;
+ for (n = 0; n < 256; n++) {
+ val = n / 255.0;
+ val = pow (val, exp);
+ val = 255.0 * val;
+ gamma->gamma_table[n] = (guint8) floor (val + 0.5);
+ }
}
+ GST_OBJECT_UNLOCK (gamma);
+
+ gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (gamma), passthrough);
}
static void
static void
gst_video_balance_update_properties (GstVideoBalance * videobalance)
{
- gboolean passthrough = gst_video_balance_is_passthrough (videobalance);
+ gboolean passthrough;
GstBaseTransform *base = GST_BASE_TRANSFORM (videobalance);
- gst_base_transform_set_passthrough (base, passthrough);
-
+ GST_OBJECT_LOCK (videobalance);
+ passthrough = gst_video_balance_is_passthrough (videobalance);
if (!passthrough)
gst_video_balance_update_tables (videobalance);
+ GST_OBJECT_UNLOCK (videobalance);
+
+ gst_base_transform_set_passthrough (base, passthrough);
}
static void
break;
}
- gst_video_balance_update_properties (balance);
GST_OBJECT_UNLOCK (balance);
+ gst_video_balance_update_properties (balance);
if (label) {
GstColorBalanceChannel *channel =