ges: Some memory management fixes setting track mixing

Also fix 'mixing' property notifies
This commit is contained in:
Thibault Saunier 2020-02-28 17:53:55 -03:00
parent e6e05be88a
commit b93caf362c

View file

@ -533,6 +533,7 @@ ges_track_dispose (GObject * object)
g_list_free_full (priv->gaps, (GDestroyNotify) free_gap); g_list_free_full (priv->gaps, (GDestroyNotify) free_gap);
ges_nle_object_commit (track->priv->composition, TRUE); ges_nle_object_commit (track->priv->composition, TRUE);
gst_clear_object (&track->priv->mixing_operation);
if (priv->composition) { if (priv->composition) {
gst_element_remove_pad (GST_ELEMENT (track), priv->srcpad); gst_element_remove_pad (GST_ELEMENT (track), priv->srcpad);
gst_bin_remove (GST_BIN (object), priv->composition); gst_bin_remove (GST_BIN (object), priv->composition);
@ -623,7 +624,7 @@ ges_track_constructed (GObject * object)
} }
} }
self->priv->mixing_operation = nleobject; self->priv->mixing_operation = gst_object_ref (nleobject);
} else { } else {
GST_INFO_OBJECT (self, "No way to create a main mixer"); GST_INFO_OBJECT (self, "No way to create a main mixer");
@ -737,7 +738,7 @@ ges_track_class_init (GESTrackClass * klass)
*/ */
properties[ARG_MIXING] = g_param_spec_boolean ("mixing", "Mixing", properties[ARG_MIXING] = g_param_spec_boolean ("mixing", "Mixing",
"Whether layer mixing is activated on the track or not", "Whether layer mixing is activated on the track or not",
TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_property (object_class, ARG_MIXING, g_object_class_install_property (object_class, ARG_MIXING,
properties[ARG_MIXING]); properties[ARG_MIXING]);
@ -1043,14 +1044,15 @@ ges_track_set_mixing (GESTrack * track, gboolean mixing)
g_return_if_fail (GES_IS_TRACK (track)); g_return_if_fail (GES_IS_TRACK (track));
CHECK_THREAD (track); CHECK_THREAD (track);
if (!track->priv->mixing_operation) { if (mixing == track->priv->mixing) {
GST_DEBUG_OBJECT (track, "Track will be set to mixing = %d", mixing); GST_DEBUG_OBJECT (track, "Mixing is already set to the same value");
track->priv->mixing = mixing;
return; return;
} }
if (mixing == track->priv->mixing) { if (!track->priv->mixing_operation) {
GST_DEBUG_OBJECT (track, "Mixing is already set to the same value"); GST_DEBUG_OBJECT (track, "Track will be set to mixing = %d", mixing);
goto notify;
} }
if (mixing) { if (mixing) {
@ -1068,8 +1070,11 @@ ges_track_set_mixing (GESTrack * track, gboolean mixing)
} }
} }
notify:
track->priv->mixing = mixing; track->priv->mixing = mixing;
g_object_notify_by_pspec (G_OBJECT (track), properties[ARG_MIXING]);
GST_DEBUG_OBJECT (track, "The track has been set to mixing = %d", mixing); GST_DEBUG_OBJECT (track, "The track has been set to mixing = %d", mixing);
} }