summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu.duponchelle@epitech.eu>2013-06-26 23:23:59 +0200
committerThibault Saunier <thibault.saunier@collabora.com>2013-07-12 18:17:00 -0400
commitcc09d0325359a000ea9f4730eeb17eac8d225b6b (patch)
tree0214a24bb19826ecb6c15626ffc3df5116b3d440
parent4addde8d742f1699ba5e9f8977ccca7ace7502f8 (diff)
track: Make it possible to disable the mixing feature
API: ges_track_set_mixing ges_track_get_mixing
-rw-r--r--ges/ges-track.c73
-rw-r--r--ges/ges-track.h2
2 files changed, 72 insertions, 3 deletions
diff --git a/ges/ges-track.c b/ges/ges-track.c
index 8eb8b2a..e95ddf3 100644
--- a/ges/ges-track.c
+++ b/ges/ges-track.c
@@ -67,6 +67,9 @@ struct _GESTrackPrivate
gboolean updating;
+ gboolean mixing;
+ GstElement *mixing_operation;
+
/* Virtual method to create GstElement that fill gaps */
GESCreateElementForGapFunc create_element_for_gaps;
};
@@ -451,11 +454,16 @@ ges_track_constructed (GObject * object)
}
g_object_set (gnlobject, "expandable", TRUE, NULL);
- if (!gst_bin_add (GST_BIN (self->priv->composition), gnlobject)) {
- GST_WARNING_OBJECT (self, "Could not add the mixer to our composition");
+ if (self->priv->mixing) {
+ if (!gst_bin_add (GST_BIN (self->priv->composition), gnlobject)) {
+ GST_WARNING_OBJECT (self, "Could not add the mixer to our composition");
- return;
+ return;
+ }
}
+
+ self->priv->mixing_operation = gst_object_ref (gnlobject);
+
} else {
GST_INFO_OBJECT (self, "No way to create a main mixer");
}
@@ -562,6 +570,7 @@ ges_track_init (GESTrack * self)
g_hash_table_new (g_direct_hash, g_direct_equal);
self->priv->create_element_for_gaps = NULL;
self->priv->gaps = NULL;
+ self->priv->mixing = TRUE;
g_signal_connect (G_OBJECT (self->priv->composition), "notify::duration",
G_CALLBACK (composition_duration_cb), self);
@@ -666,6 +675,48 @@ ges_track_set_caps (GESTrack * track, const GstCaps * caps)
}
/**
+ * ges_track_set_mixing:
+ * @track: a #GESTrack
+ * @mixing: TRUE if the track should be mixing, FALSE otherwise.
+ *
+ * Sets if the #GESTrack should be mixing.
+ */
+void
+ges_track_set_mixing (GESTrack * track, gboolean mixing)
+{
+ g_return_if_fail (GES_IS_TRACK (track));
+
+ if (!track->priv->mixing_operation) {
+ GST_DEBUG_OBJECT (track, "Track will be set to mixing = %d", mixing);
+ track->priv->mixing = mixing;
+ return;
+ }
+
+ if (mixing == track->priv->mixing) {
+ GST_DEBUG_OBJECT (track, "Mixing is already set to the same value");
+ }
+
+ if (mixing) {
+ if (!gst_bin_add (GST_BIN (track->priv->composition),
+ track->priv->mixing_operation)) {
+ GST_WARNING_OBJECT (track, "Could not add the mixer to our composition");
+ return;
+ }
+ } else {
+ if (!gst_bin_remove (GST_BIN (track->priv->composition),
+ track->priv->mixing_operation)) {
+ GST_WARNING_OBJECT (track,
+ "Could not remove the mixer from our composition");
+ return;
+ }
+ }
+
+ track->priv->mixing = mixing;
+
+ GST_DEBUG_OBJECT (track, "The track has been set to mixing = %d", mixing);
+}
+
+/**
* ges_track_add_element:
* @track: a #GESTrack
* @object: (transfer full): the #GESTrackElement to add
@@ -827,6 +878,22 @@ ges_track_get_timeline (GESTrack * track)
}
/**
+ * ges_track_get_mixing:
+ * @track: a #GESTrack
+ *
+ * Gets if the underlying #GnlComposition contains an expandable mixer.
+ *
+ * Returns: #True if there is a mixer, #False otherwise.
+ */
+gboolean
+ges_track_get_mixing (GESTrack * track)
+{
+ g_return_val_if_fail (GES_IS_TRACK (track), FALSE);
+
+ return track->priv->mixing;
+}
+
+/**
* ges_track_commit:
* @track: a #GESTrack
*
diff --git a/ges/ges-track.h b/ges/ges-track.h
index da833af..6a19c23 100644
--- a/ges/ges-track.h
+++ b/ges/ges-track.h
@@ -90,6 +90,8 @@ void ges_track_set_timeline (GESTrack *track, G
gboolean ges_track_add_element (GESTrack *track, GESTrackElement *object);
gboolean ges_track_remove_element (GESTrack *track, GESTrackElement *object);
void ges_track_set_create_element_for_gap_func (GESTrack *track, GESCreateElementForGapFunc func);
+void ges_track_set_mixing (GESTrack *track, gboolean mixing);
+gboolean ges_track_get_mixing (GESTrack *track);
/* standard methods */
GType ges_track_get_type (void);