track-element: Add method to remove control binding
authorThibault Saunier <tsaunier@gnome.org>
Tue, 16 Jun 2015 13:02:18 +0000 (15:02 +0200)
committerThibault Saunier <tsaunier@gnome.org>
Fri, 3 Jul 2015 09:20:54 +0000 (11:20 +0200)
API:
  ges_track_element_remove_control_binding

docs/libs/ges-sections.txt
ges/ges-pipeline.c
ges/ges-track-element.c
ges/ges-track-element.h

index b2a1706..bdf124b 100644 (file)
@@ -152,6 +152,7 @@ ges_track_element_edit
 ges_track_element_set_control_source
 ges_track_element_get_control_binding
 ges_track_element_get_all_control_bindings
+ges_track_element_remove_control_binding
 <SUBSECTION Standard>
 GESTrackElementPrivate
 ges_track_element_set_track
index 79849e6..7485248 100644 (file)
@@ -1079,7 +1079,7 @@ ges_pipeline_set_mode (GESPipeline * pipeline, GESPipelineFlags mode)
   GList *tmp;
   g_return_val_if_fail (GES_IS_PIPELINE (pipeline), FALSE);
 
-  GST_ERROR_OBJECT (pipeline, "current mode : %d, mode : %d",
+  GST_DEBUG_OBJECT (pipeline, "current mode : %d, mode : %d",
       pipeline->priv->mode, mode);
 
   /* fast-path, nothing to change */
index 3ad6a2a..f4a68a4 100644 (file)
@@ -86,6 +86,7 @@ static GParamSpec *properties[PROP_LAST];
 enum
 {
   CONTROL_BINDING_ADDED,
+  CONTROL_BINDING_REMOVED,
   LAST_SIGNAL
 };
 
@@ -261,6 +262,19 @@ ges_track_element_class_init (GESTrackElementClass * klass)
       G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_generic,
       G_TYPE_NONE, 1, GST_TYPE_CONTROL_BINDING);
 
+  /**
+   * GESTrackElement::control-binding-added:
+   * @track_element: a #GESTrackElement
+   * @control_binding: the #GstControlBinding that has been added
+   *
+   * The control-bunding-added  is emitted each time a control binding
+   * is added for a child property of @track_element
+   */
+  ges_track_element_signals[CONTROL_BINDING_REMOVED] =
+      g_signal_new ("control-binding-reomved", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_generic,
+      G_TYPE_NONE, 1, GST_TYPE_CONTROL_BINDING);
+
   element_class->set_start = _set_start;
   element_class->set_duration = _set_duration;
   element_class->set_inpoint = _set_inpoint;
@@ -1404,6 +1418,52 @@ ges_track_element_edit (GESTrackElement * object,
   return TRUE;
 }
 
+/**
+ * ges_track_element_remove_control_binding:
+ * @object: the #GESTrackElement on which to set a control binding
+ * @property_name: The name of the property to control.
+ * @binding_type: The type of binding to create. Only "direct" is available for now.
+ *
+ * Removes a #GstControlBinding from @object.
+ *
+ * Returns: %TRUE if the binding could be removed, %FALSE if an error
+ * occured
+ */
+gboolean
+ges_track_element_remove_control_binding (GESTrackElement * object,
+    const gchar * property_name)
+{
+  GESTrackElementPrivate *priv;
+  GstControlBinding *binding;
+  GstObject *target;
+
+  g_return_val_if_fail (GES_IS_TRACK_ELEMENT (object), FALSE);
+
+  priv = GES_TRACK_ELEMENT (object)->priv;
+  binding =
+      (GstControlBinding *) g_hash_table_lookup (priv->bindings_hashtable,
+      property_name);
+
+  if (binding) {
+    g_object_get (binding, "object", &target, NULL);
+    GST_DEBUG_OBJECT (object, "Removing binding %p for property %s", binding,
+        property_name);
+
+    gst_object_ref (binding);
+    gst_object_remove_control_binding (target, binding);
+
+    g_signal_emit (object, ges_track_element_signals[CONTROL_BINDING_REMOVED],
+        0, binding);
+
+    gst_object_unref (target);
+    gst_object_unref (binding);
+    g_hash_table_remove (priv->bindings_hashtable, property_name);
+
+    return TRUE;
+  }
+
+  return FALSE;
+}
 
 /**
  * ges_track_element_set_control_source:
index f6e7237..906df7b 100644 (file)
@@ -209,6 +209,9 @@ ges_track_element_add_children_props          (GESTrackElement *self,
                                                const gchar **blacklist,
                                                const gchar **whitelist);
 GHashTable *
-ges_track_element_get_all_control_bindings (GESTrackElement * trackelement);
+ges_track_element_get_all_control_bindings    (GESTrackElement * trackelement);
+gboolean
+ges_track_element_remove_control_binding      (GESTrackElement * object,
+                                               const gchar * property_name);
 G_END_DECLS
 #endif /* _GES_TRACK_ELEMENT */