diff options
author | Mathieu Duponchelle <mathieu.duponchelle@epitech.eu> | 2013-06-26 23:23:59 +0200 |
---|---|---|
committer | Thibault Saunier <thibault.saunier@collabora.com> | 2013-07-12 18:17:00 -0400 |
commit | cc09d0325359a000ea9f4730eeb17eac8d225b6b (patch) | |
tree | 0214a24bb19826ecb6c15626ffc3df5116b3d440 | |
parent | 4addde8d742f1699ba5e9f8977ccca7ace7502f8 (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.c | 73 | ||||
-rw-r--r-- | ges/ges-track.h | 2 |
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); |