mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 11:11:08 +00:00
143 lines
5.2 KiB
Text
143 lines
5.2 KiB
Text
SCENARIOS
|
|
|
|
* Adding a TimelineObject to a TimelineLayer
|
|
--------------------------------------------
|
|
|
|
* Create a Timeline
|
|
|
|
* Create a Track
|
|
|
|
* Add the track to the Timeline (==> ges_timeline_add_track (track);)
|
|
The Timeline adds the Track to itself (i.e. gst_bin_add())
|
|
'track-added' is emitted
|
|
|
|
* Create a TimelineLayer
|
|
|
|
* Add the TimelineLayer to the Timeline (ges_timeline_add_layer (layer);)
|
|
The Timeline takes a reference on the layer and stores it
|
|
The Timeline tells the TimelineLayer that it now belongs to the given Timeline (weak reference)
|
|
==> ges_timeline_layer_set_timeline ();
|
|
'layer-added' is emitted
|
|
|
|
* Create a TimelineObject
|
|
|
|
* Add the TimelineObject to the TimelineLayer (ges_timeline_layer_add_object (object);)
|
|
The TimelineLayer takes a reference on the TimelineObject and stores it
|
|
The timelineLayer tells the TimelineObject that it now belongs to the given layer (weak reference)
|
|
==> ges_timeline_object_set_layer ();
|
|
'object-added' is emitted by TimelineLayer
|
|
The Timeline requests a new TrackObject from the new TimelineObject for each Track
|
|
==> ges_timeline_object_create_track_object (track)
|
|
The TimelineObject calls the 'create_track_object' virtual method with the given track
|
|
Example implementation
|
|
Create a GESTrackSource
|
|
(GESTimelineObject is a constructor property of track objects)
|
|
A GESTrackObject CAN NOT EXIST WITHOUT A GESTimelineObject !
|
|
The Timeline adds the newly created TrackObject to the Track
|
|
==> ges_track_add_object (track, trackobject);
|
|
Set the track on the TrackObject
|
|
==> ges_track_object_set_track (track)
|
|
The GESTrackObject can create the NleObject
|
|
|
|
|
|
|
|
Methods
|
|
-------
|
|
|
|
[ GESTimeline ]
|
|
|
|
* gboolean
|
|
ges_timeline_add_track (GESTimeline * timeline, GESTrack * track);
|
|
|
|
* The Timeline adds the track to itself (gst_bin_add ()) # reference implicitely taken
|
|
* The Timeline adds the track to its list of tracked tracks
|
|
* The Timeline sets the Timeline on the track
|
|
=> ges_track_set_timeline (GESTrack * track, GESTimeline * timeline);
|
|
Just sets the timeline field of the track.
|
|
* emits 'track-added'
|
|
|
|
|
|
* gboolean
|
|
ges_timeline_add_layer (GESTimeline * timeline, GESTimelineLayer * layer);
|
|
|
|
* The Timeline takes a reference on the layer and stores it
|
|
* The Timeline tells the Layer that it now belongs to the given Timeline
|
|
=> ges_timeline_layer_set_timeline (GESTimelineLayer * layer, GESTimeline * timeline);
|
|
Just sets the timeline field of the layer.
|
|
* Connect to the layer's 'object-added' signal
|
|
* emits 'layer-added'
|
|
|
|
|
|
* GESTimeline's
|
|
callback for GESTimelineLayer::object-added (GESTimelineLayer * layer, GESTimelineObject * object);
|
|
|
|
* For each GESTrack in the Timeline:
|
|
* The timeline requests a new TrackObject for the new TimelineObject for each Track
|
|
trackobj = ges_timeline_object_create_track_object (timelineobj, track);
|
|
* The timeline adds the newly created TrackObject to the track
|
|
ges_track_add_object (track, trackobj);
|
|
|
|
[ GESTimelineLayer ]
|
|
|
|
* gboolean
|
|
ges_timeline_layer_add_object (GESTimelineLayer * layer, GESTimelineObject * object);
|
|
|
|
* The TimelineLayer takes a reference on the TimelineObject and stores it
|
|
* The TimelineLayer tells the TimelineObject it now belongs to the given Layer
|
|
=> ges_timeline_object_set_layer (GESTimelineObject * object, GESTimelineLayer * layer);
|
|
Just sets the layer field of the timeline object.
|
|
* emits 'object-added'
|
|
|
|
|
|
[ GESTimelineObject ]
|
|
|
|
* GESTrackObject *
|
|
ges_timeline_object_create_track_object (GESTimelineObject * object, GESTrack * track);
|
|
|
|
* The TimelineObject calls the 'create_track_object' virtual method
|
|
* The TimelineObject sets the TimelineObject on the new TrackObject
|
|
=> ges_track_object_set_timeline_object (track_object, timeline_object);
|
|
Just sets the timeline-object field of the TrackObject
|
|
* Return the newly created GESTrackObject
|
|
|
|
|
|
* Virtual-method for GESTimelineObject::create_track_object (GESTimelineObject * object, GESTrack * track);
|
|
|
|
* Create a track object of the proper type
|
|
Ex (for a source) :
|
|
return ges_track_source_new();
|
|
|
|
* gboolean
|
|
ges_timeline_object_fill_track_object (GESTimelineObject *tlo, GESTrackObject *tro, GstElement *nleobj);
|
|
|
|
* up to the implementation :)
|
|
|
|
|
|
[ GESTrack ]
|
|
|
|
* gboolean
|
|
ges_track_add_object (GESTrack * track, GESTrackObject * object);
|
|
|
|
* Set the track on the track_object
|
|
ges_track_object_set_track (object, track);
|
|
* Add the NleObject of the TrackObject to the composition
|
|
gst_bin_add (track->composition, object->nleobject);
|
|
|
|
|
|
[ GESTrackObject ]
|
|
|
|
* gboolean
|
|
ges_track_object_set_track (GESTrackObject * object, GESTrack * track);
|
|
|
|
* Set the track field of the TrackObject
|
|
* if no NleObject is available yet:
|
|
* Call the 'create_gnl_object' virtual method
|
|
|
|
|
|
* Virtual-method for GESTrackObject::create_gnl_object
|
|
|
|
* Create a NleObject of the proper type
|
|
Ex : nleobject = gst_element_factory_make("nlesource", NULL);
|
|
* Ask the TimelineObject to fill in the NleObject
|
|
=> ges_timeline_object_fill_track_object (GESTimelineObject * tlo, GESTrackObject * tro, GstElement * nleobj);
|
|
|