A BaseEffect is some operation that applies an effect to the data it receives.
Some operations will change the timing of the stream data they receive in some way. In particular, the Element that they wrap could alter the times of the segment they receive in a SEGMENT event, or the times of a seek they receive in a SEEK event. Such operations would be considered time effects since they translate the times they receive on their source to different times at their sink, and vis versa. This introduces two sets of time coordinates for the event: (internal) sink coordinates and (internal) source coordinates, where segment times are translated from the sink coordinates to the source coordinates, and seek times are translated from the source coordinates to the sink coordinates.
If you use such an effect in GES, you will need to inform GES of the properties that control the timing with register_time_property, and the effect's timing behaviour using set_time_translation_funcs.
Note that a time effect should not have its has_internal_source set to true.
In addition, note that GES only *fully* supports time effects whose mapping from the source to sink coordinates (those applied to seeks) obeys:
+ Maps the time `0` to `0`. So initial time-shifting effects are excluded. + Is monotonically increasing. So reversing effects, and effects that jump backwards in the stream are excluded. + Can handle a reasonable ClockTime, relative to the project. So this would exclude a time effect with an extremely large speed-up that would cause the converted ClockTime seeks to overflow. + Is 'continuously reversible'. This essentially means that for every time in the sink coordinates, we can, to 'good enough' accuracy, calculate the corresponding time in the source coordinates. Moreover, this should correspond to how segment times are translated from sink to source. + Only depends on the registered time properties, rather than the state of the Element or the data it receives. This would exclude, say, an effect that would speedup if there is more red in the image it receives.
Note that a constant-rate-change effect that is not extremely fast or slow would satisfy these conditions. For such effects, you may wish to use register_rate_property.