mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 18:05:37 +00:00
Specs: proposal for effects implementation
This commit is contained in:
parent
63e901ed12
commit
3b33287b04
1 changed files with 98 additions and 0 deletions
98
docs/design/effects.txt
Normal file
98
docs/design/effects.txt
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
Effects
|
||||||
|
-------
|
||||||
|
|
||||||
|
Summary
|
||||||
|
-------
|
||||||
|
1. Basic ideas
|
||||||
|
2. Problems
|
||||||
|
3. Propositions to solve those problems
|
||||||
|
A. The registry
|
||||||
|
B. Effects configurability
|
||||||
|
C. Keyframes
|
||||||
|
4. Use-cases
|
||||||
|
|
||||||
|
The goal of this proposal is to find a simple way to handle effects through an
|
||||||
|
API which would allow developers to handle any use-case
|
||||||
|
|
||||||
|
1. Basic ideas
|
||||||
|
----------------
|
||||||
|
|
||||||
|
* Effects are actually descendant of GESTrackOperation
|
||||||
|
* You can add effects wherever you want
|
||||||
|
* Effects are configurable and those could change during time
|
||||||
|
* We should be able to handle the gnome-video-effects standard
|
||||||
|
* We can implement complexe effects
|
||||||
|
|
||||||
|
2. Problems
|
||||||
|
----------
|
||||||
|
* We should be able to handle list of available effects on the system at
|
||||||
|
runtime.
|
||||||
|
|
||||||
|
* We should be able to configure effects through an API in GES and
|
||||||
|
not directly configuring the corresponding GstElement properties.
|
||||||
|
|
||||||
|
* We should be able to handle complexe effects.
|
||||||
|
|
||||||
|
* We should be able to implement complexe effects directly in GES
|
||||||
|
|
||||||
|
* We should be able to configure effects in the time -> Keyframes without
|
||||||
|
duplicating code from GStreamer
|
||||||
|
|
||||||
|
|
||||||
|
3. Propositions to solve those problems
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
A. The registry
|
||||||
|
|
||||||
|
We could implement a GESEffectRegistry which would actually
|
||||||
|
retrieve elements from the GSTRegistry which actually are effects,
|
||||||
|
as well as effects from gnome-video-effects. This way the developers
|
||||||
|
could have the list of all the effects that are installed on the système
|
||||||
|
pretty easily.
|
||||||
|
|
||||||
|
B. Effects configurability
|
||||||
|
|
||||||
|
The idea to be able to configure effects through a simple API in GES would
|
||||||
|
be to create a class GESEffect which would actually be a mapping between
|
||||||
|
a GESTrackOperation and the properties of the GstElements contained in the
|
||||||
|
GESTrackOperation.
|
||||||
|
Basicly it would allow the retrieving of all configurable elements properties:
|
||||||
|
* names
|
||||||
|
* human readable names
|
||||||
|
* types
|
||||||
|
* possible values
|
||||||
|
* ...
|
||||||
|
We would also have a method to set those properties easily
|
||||||
|
|
||||||
|
The problem which also happens is that in the case of gnome-video-effects,
|
||||||
|
we should be able to allow access to some properties whiches have been
|
||||||
|
specified. We will need to improve the current standard in order to handle
|
||||||
|
this use-case.
|
||||||
|
|
||||||
|
C. Keyframes
|
||||||
|
We may want to handle this use-case directly in GES and for any kind of
|
||||||
|
time related configuration? FIXME
|
||||||
|
=> Special specifications for that?
|
||||||
|
|
||||||
|
4. Use-cases
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The user wants to add an effect to an entire clip => GESTimelineObject new API
|
||||||
|
|
||||||
|
The user wants to add an effect to an entire layer => GESTimelineLayer API.
|
||||||
|
|
||||||
|
The developer wants to allow his users to configure effects => mapping between
|
||||||
|
GESTrackEffect and the configurable properties of elements (GESEffect).
|
||||||
|
|
||||||
|
The user wants to add an effect on a special portion of a clip, we should
|
||||||
|
allow him to configure that thanks to a system of keyframes. FIXME
|
||||||
|
|
||||||
|
We want to implement an effect which isn't only composed by a bin, but is more
|
||||||
|
complexe than that (ex: "effect '24'") => we have the GESTrackOperation
|
||||||
|
which is the base class (abstract) for this kind of implementation. We should
|
||||||
|
also have a GESPropertiesMapping abstract class which would be the base
|
||||||
|
class of GESEffect and could be used in this use-case.
|
||||||
|
|
||||||
|
A developer wants to implement effect which handle music and video at the same
|
||||||
|
time, Would the solution be to implement a GESTimelineEffect to handle this
|
||||||
|
special usecase? FIXME
|
Loading…
Reference in a new issue