## GESTimelineObject

GESTimelineObject — Base Class for objects in a GESTimelineLayer

## Synopsis

    #include <ges/ges.h>

                        GESTimelineObject;
                        GESTimelineObjectClass;
    GESTrackObject *    (*GESCreateTrackObjectFunc)         (GESTimelineObject *object,
                                                             GESTrack *track);
    gboolean            (*GESCreateTrackObjectsFunc)        (GESTimelineObject *object,
                                                             GESTrack *track);
    gboolean            (*GESFillTrackObjectFunc)           (GESTimelineObject *object,
                                                             GESTrackObject *trobject,
                                                             GstElement *gnlobj);
    void                ges_timeline_object_set_inpoint     (GESTimelineObject *object,
                                                             guint64 inpoint);
    void                ges_timeline_object_set_start       (GESTimelineObject *object,
                                                             guint64 start);
    void                ges_timeline_object_set_duration    (GESTimelineObject *object,
                                                             guint64 duration);
    GESTimelineLayer *  ges_timeline_object_get_layer       (GESTimelineObject *object);
    GESTrackObject *    ges_timeline_object_find_track_object
                                                            (GESTimelineObject *object,
                                                             GESTrack *track,
                                                             GType type);
    gboolean            ges_timeline_object_add_track_object
                                                            (GESTimelineObject *object,
                                                             GESTrackObject *trobj);

## Object Hierarchy

      GObject
       +----GInitiallyUnowned
             +----GESTimelineObject
                   +----GESTimelineSource
                   +----GESTimelineOperation

## Properties

      "duration"                 guint64               : Read / Write
      "height"                   guint                 : Read
      "in-point"                 guint64               : Read / Write
      "layer"                    GESTimelineLayer*     : Read
      "priority"                 guint                 : Read / Write
      "start"                    guint64               : Read / Write

## Description

A GESTimelineObject is a 'natural' object which controls one or more GESTrackObject(s) in one or more GESTrack(s).

Keeps a reference to the GESTrackObject(s) it created and sets/updates their properties.

## Details

### GESTimelineObject

    typedef struct _GESTimelineObject GESTimelineObject;

The GESTimelineObject base class.

### GESTimelineObjectClass

    typedef struct {
      GESCreateTrackObjectFunc create_track_object;
      GESCreateTrackObjectsFunc create_track_objects;

      /* FIXME : might need a release_track_object */
      GESFillTrackObjectFunc  fill_track_object;
      gboolean need_fill_track;
    } GESTimelineObjectClass;

Subclasses can override the `create_track_object` and `fill_track_object` methods.

GESCreateTrackObjectFunc `create_track_object`; | method to create a single GESTrackObject for a given GESTrack.
GESCreateTrackObjectsFunc `create_track_objects`; | method to create multiple GESTrackObjects for a GESTrack.
GESFillTrackObjectFunc `fill_track_object`; | method to fill an associated GESTrackObject.
gboolean `need_fill_track`; | Set to TRUE if `fill_track_object` needs to be called.

### GESCreateTrackObjectFunc ()

    GESTrackObject *    (*GESCreateTrackObjectFunc)         (GESTimelineObject *object,
                                                             GESTrack *track);

Creates the 'primary' track object for this `object`.

Subclasses should implement this method if they only provide a single GESTrackObject per track.

If the subclass needs to create more than one GESTrackObject for a given track, then it should implement the 'create_track_objects' method instead.

The implementer of this function shall return the proper GESTrackObject that should be controlled by `object` for the given `track`.

The returned GESTrackObject will be automatically added to the list of objects controlled by the GESTimelineObject.

`object` : | a GESTimelineObject
`track` : | a GESTrack
Returns : | the GESTrackObject to be used, or `NULL` if it can't provide one for the given `track`.

### GESCreateTrackObjectsFunc ()

    gboolean            (*GESCreateTrackObjectsFunc)        (GESTimelineObject *object,
                                                             GESTrack *track);

Create all track objects this object handles for this type of track.

Subclasses should implement this method if they potentially need to return more than one GESTrackObject(s) for a given GESTrack.

For each object created, the subclass must call `ges_timeline_object_add_track_object()` with the newly created object and provided `track`.

`object` : | a GESTimelineObject
`track` : | a GESTrack
Returns : | `TRUE` on success `FALSE` on failure.

### GESFillTrackObjectFunc ()

    gboolean            (*GESFillTrackObjectFunc)           (GESTimelineObject *object,
                                                             GESTrackObject *trobject,
                                                             GstElement *gnlobj);

A function that will be called when the GNonLin object of a corresponding track object needs to be filled.

The implementer of this function shall add the proper GstElement to `gnlobj` using `gst_bin_add()`.

`object` : | the GESTimelineObject controlling the track object
`trobject` : | the GESTrackObject
`gnlobj` : | the GNonLin object that needs to be filled.
Returns : | TRUE if the implementer succesfully filled the `gnlobj`, else FALSE.

### ges_timeline_object_set_inpoint ()

    void                ges_timeline_object_set_inpoint     (GESTimelineObject *object,
                                                             guint64 inpoint);

Set the in-point, that is the moment at which the `object` will start outputting data from its contents.

`object` : | a GESTimelineObject
`inpoint` : | the in-point in GstClockTime

### ges_timeline_object_set_start ()

    void                ges_timeline_object_set_start       (GESTimelineObject *object,
                                                             guint64 start);

Set the position of the object in its containing layer

`object` : | a GESTimelineObject
`start` : | the position in GstClockTime

### ges_timeline_object_set_duration ()

    void                ges_timeline_object_set_duration    (GESTimelineObject *object,
                                                             guint64 duration);

Set the duration of the object

`object` : | a GESTimelineObject
`duration` : | the duration in GstClockTime

### ges_timeline_object_get_layer ()

    GESTimelineLayer *  ges_timeline_object_get_layer       (GESTimelineObject *object);

Note: The reference count of the returned GESTimelineLayer will be increased, The user is responsible for unreffing it.

`object` : | a GESTimelineObject
Returns : | The GESTimelineLayer where this `object` is being used, NULL if it is not used on any layer. [transfer full]

### ges_timeline_object_find_track_object ()

    GESTrackObject *    ges_timeline_object_find_track_object
                                                            (GESTimelineObject *object,
                                                             GESTrack *track,
                                                             GType type);

Finds the GESTrackObject controlled by `object` that is used in `track`. You may optionally specify a GType to further narrow search criteria.

Note: The reference count of the returned GESTrackObject will be increased, unref when done with it.

`object` : | a GESTimelineObject
`track` : | a GESTrack or NULL
`type` : | a GType indicating the type of track object you are looking for or `G_TYPE_NONE` if you do not care about the track type.
Returns : | The GESTrackObject used by `track`, else NULL. [transfer full]

### ges_timeline_object_add_track_object ()

    gboolean            ges_timeline_object_add_track_object
                                                            (GESTimelineObject *object,
                                                             GESTrackObject *trobj);

Add a track object to the timeline object. Should only be called by subclasses implementing the create_track_objects (plural) vmethod.

Takes a reference on `trobj`.

`object` : | a GESTimelineObject
`trobj` : | the GESTrackObject
Returns : | `TRUE` on success, `FALSE` on failure.

## Property Details

### The `"duration"` property

      "duration"                 guint64               : Read / Write

The duration (in nanoseconds) which will be used in the container GESTrack starting from 'in-point'.

Default value: 18446744073709551615

### The `"height"` property

      "height"                   guint                 : Read

The span of layer priorities which this object occupies.

Default value: 1

### The `"in-point"` property

      "in-point"                 guint64               : Read / Write

The in-point at which this GESTimelineObject will start outputting data from its contents (in nanoseconds).

Ex : an in-point of 5 seconds means that the first outputted buffer will be the one located 5 seconds in the controlled resource.

Default value: 0

### The `"layer"` property

      "layer"                    GESTimelineLayer*     : Read

The GESTimelineLayer where this object is being used.

### The `"priority"` property

      "priority"                 guint                 : Read / Write

The layer priority of the timeline object.

Default value: 0

### The `"start"` property

      "start"                    guint64               : Read / Write

The position of the object in the GESTimelineLayer (in nanoseconds).

Default value: 0