+gst_play_sink_video_convert_finalize (GObject * object)
+{
+ GstPlaySinkVideoConvert *self = GST_PLAY_SINK_VIDEO_CONVERT_CAST (object);
+
+ if (self->balance)
+ gst_object_unref (self->balance);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_play_sink_video_convert_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstPlaySinkVideoConvert *self = GST_PLAY_SINK_VIDEO_CONVERT_CAST (object);
+ gboolean v, changed = FALSE;
+
+ GST_PLAY_SINK_CONVERT_BIN_LOCK (self);
+ switch (prop_id) {
+ case PROP_USE_CONVERTERS:
+ v = g_value_get_boolean (value);
+ if (v != self->use_converters) {
+ self->use_converters = v;
+ changed = TRUE;
+ }
+ break;
+ case PROP_USE_BALANCE:
+ v = g_value_get_boolean (value);
+ if (v != self->use_balance) {
+ self->use_balance = v;
+ changed = TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (changed) {
+ GstPlaySinkConvertBin *cbin = GST_PLAY_SINK_CONVERT_BIN (self);
+ GST_DEBUG_OBJECT (self, "Rebuilding converter bin");
+ gst_play_sink_convert_bin_remove_elements (cbin);
+ gst_play_sink_video_convert_add_conversion_elements (self);
+ gst_play_sink_convert_bin_add_identity (cbin);
+ gst_play_sink_convert_bin_cache_converter_caps (cbin);
+ }
+ GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self);
+}
+
+static void
+gst_play_sink_video_convert_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstPlaySinkVideoConvert *self = GST_PLAY_SINK_VIDEO_CONVERT_CAST (object);
+
+ GST_PLAY_SINK_CONVERT_BIN_LOCK (self);
+ switch (prop_id) {
+ case PROP_USE_CONVERTERS:
+ g_value_set_boolean (value, self->use_converters);
+ break;
+ case PROP_USE_BALANCE:
+ g_value_set_boolean (value, self->use_balance);
+ break;
+ default:
+ break;
+ }
+ GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self);
+}
+
+static void