mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
GESTimelineObject: add track_object_added and track_object_removed virtual methods
Those methods are meant to be used in sublassed when needed. They are not doing anything at this time, but will be used to clean some code in GESTimelineObject sublcasses.
This commit is contained in:
parent
6e0d6ba9c5
commit
d5734ab94f
2 changed files with 26 additions and 3 deletions
|
@ -190,6 +190,8 @@ ges_timeline_object_class_init (GESTimelineObjectClass * klass)
|
|||
object_class->get_property = ges_timeline_object_get_property;
|
||||
object_class->set_property = ges_timeline_object_set_property;
|
||||
klass->create_track_objects = ges_timeline_object_create_track_objects_func;
|
||||
klass->track_object_added = NULL;
|
||||
klass->track_object_released = NULL;
|
||||
|
||||
/**
|
||||
* GESTimelineObject:start
|
||||
|
@ -404,6 +406,7 @@ ges_timeline_object_add_track_object (GESTimelineObject * object, GESTrackObject
|
|||
GList *tmp;
|
||||
GESTimelineObjectPrivate *priv = object->priv;
|
||||
gboolean is_effect = GES_IS_TRACK_EFFECT (trobj);
|
||||
GESTimelineObjectClass *klass = GES_TIMELINE_OBJECT_GET_CLASS (object);
|
||||
|
||||
GST_LOG ("Got a TrackObject : %p , setting the timeline object as its"
|
||||
"creator. Is a TrackEffect %i", trobj, is_effect);
|
||||
|
@ -462,6 +465,14 @@ ges_timeline_object_add_track_object (GESTimelineObject * object, GESTrackObject
|
|||
ges_track_object_set_duration (trobj, object->duration);
|
||||
ges_track_object_set_inpoint (trobj, object->inpoint);
|
||||
|
||||
if (klass->track_object_added) {
|
||||
GST_DEBUG ("Calling track_object_added subclass method");
|
||||
klass->track_object_added (object, trobj);
|
||||
} else {
|
||||
GST_DEBUG ("%s doesn't have any track_object_added vfunc implementation",
|
||||
G_OBJECT_CLASS_NAME (klass));
|
||||
}
|
||||
|
||||
/* Listen to all property changes */
|
||||
mapping->start_notifyid =
|
||||
g_signal_connect (G_OBJECT (trobj), "notify::start",
|
||||
|
@ -499,6 +510,7 @@ ges_timeline_object_release_track_object (GESTimelineObject * object,
|
|||
{
|
||||
GList *tmp;
|
||||
ObjectMapping *mapping = NULL;
|
||||
GESTimelineObjectClass *klass = GES_TIMELINE_OBJECT_GET_CLASS (object);
|
||||
|
||||
GST_DEBUG ("object:%p, trackobject:%p", object, trackobject);
|
||||
|
||||
|
@ -507,9 +519,6 @@ ges_timeline_object_release_track_object (GESTimelineObject * object,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* FIXME : Do we need to tell the subclasses ?
|
||||
* If so, add a new virtual-method */
|
||||
|
||||
for (tmp = object->priv->mappings; tmp; tmp = tmp->next) {
|
||||
mapping = (ObjectMapping *) tmp->data;
|
||||
if (mapping->object == trackobject)
|
||||
|
@ -542,6 +551,11 @@ ges_timeline_object_release_track_object (GESTimelineObject * object,
|
|||
|
||||
GST_DEBUG ("Removing reference to track object %p", trackobject);
|
||||
|
||||
if (klass->track_object_released) {
|
||||
GST_DEBUG ("Calling track_object_released subclass method");
|
||||
klass->track_object_released (object, trackobject);
|
||||
}
|
||||
|
||||
g_object_unref (trackobject);
|
||||
|
||||
/* FIXME : resync properties ? */
|
||||
|
|
|
@ -181,6 +181,10 @@ struct _GESTimelineObject {
|
|||
* #GESTrack.
|
||||
* @fill_track_object: method to fill an associated #GESTrackObject.
|
||||
* @need_fill_track: Set to TRUE if @fill_track_object needs to be called.
|
||||
* @track_object_added: Should be overridden by subclasses if they need to perform an
|
||||
* operation when a #GESTrackObject is added.
|
||||
* @track_object_released: Should be overridden by subclassed if they need to perform
|
||||
* action when a #GESTrackObject is released.
|
||||
*
|
||||
* Subclasses can override the @create_track_object and @fill_track_object methods.
|
||||
*/
|
||||
|
@ -192,6 +196,11 @@ struct _GESTimelineObjectClass {
|
|||
GESCreateTrackObjectFunc create_track_object;
|
||||
GESCreateTrackObjectsFunc create_track_objects;
|
||||
|
||||
void (*track_object_added) (GESTimelineObject *object,
|
||||
GESTrackObject *tck_object);
|
||||
void (*track_object_released) (GESTimelineObject *object,
|
||||
GESTrackObject *tck_object);
|
||||
|
||||
/* FIXME : might need a release_track_object */
|
||||
GESFillTrackObjectFunc fill_track_object;
|
||||
gboolean need_fill_track;
|
||||
|
|
Loading…
Reference in a new issue