[Kdenlive-devel] 1. Refactoring Update

Till Theato root at ttill.de
Sun May 13 13:02:58 UTC 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hey guys,

so finally here it is.
I've been working on a new effect system and I think it is now in a
state were I can write about it a bit, at least to the fellow
developers, since there isn't much to see yet. Only the basic
structures are done, but they should allow to add the old
functionality quickly.

The new initEffects, has turned into a much lighter EffectRepository.
Here we look for available filters and Kdenlive XML effect
descriptions. MLT metadata is now only used when no XML effect
description is present so there is no need anymore to blacklist those
effects. The metadata or the XML is then handled by object of the
EffectDescription class. Here information like name, kdenlive id,
tag/mlt name, author, description are extracted and stored. The
parameter elements or MLT properties also have their own objects. All
information about them is processed and stored in classes inheriting
from AbstractEffectDescription. Each parameter type has its own class
so there is for example DoubleParameterDescription, but more about
parameters later on.
So after the initial loading process we don't need any XML DOM
anymore, which means that there is no need for functions spreading
across the whole code to take care of it.

Now, the actual use of effects. Since there are multiple items that
can have effects, currently tracks and clips, there is a class called
EffectDevice which takes care of handling anything effects related. It
has direct access to the MLT service the effects should work on, so it
is responsible for inserting and deleting the effects' filters there.
When an effect should be added its description object is told to
create it. This way no information about it has to be passed around.
The effect object creates an MLT filter and will then handle all
changes which should happen to it. By keeping a pointer to the effect
description object in the repository it is not necessary to duplicate
any information like name, description, ... . The parameters are also
created by their description objects so no knowledge is required about
their type.
All these different levels (from device down to parameter) have
currently 3 different views: the traditional effectstack, now called
properties view (not fix though yet), the timeline view, to draw for
example effect names or keyframes and the monitor view for on monitor
editing.
So when this is all finished we should have a completely
self-contained effect system with very short connections and one that
is also easy to enhance and enlarge.

That was the trigger for some words on the parameter implementation ;).
Parameters are where most specialization is required. They are
therefore now kept as plugins. A .desktop file tells the repository
which types the plugin handles but everything else is plugin internal,
from parameter description to the actual implementation to the
different views.

This however required the introduction of a Kdenlive library since the
parameters are not based on mere interfaces but on abstract base
classes and since they also need to have access to some widgets for
example.
The plan is to expand this library during the refactoring so that in
the end (given that I'm fast enough ;)) almost everything is either in
a plugin or in the library to be accessible by plugins.

As a next stept I want to port some more functionality to the new
effect system and then start working on the timeline, which should be
quite similar though much more complex.


Let me know what you think of all this, whether I missed something
completely, or whatever ;)


regards

Till
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (GNU/Linux)

iEYEARECAAYFAk+vsP8ACgkQzwEyz7QP6nSdxQCgijkxHbGvSiNSycjq9Bhnqg45
x6YAn3danTE2E19n3vWkY7bwxfrADAmx
=fjAI
-----END PGP SIGNATURE-----




More information about the Kdenlive mailing list