Thursday, January 19, 2012

Quick Description of Modules (PiTiVi) - and do I see them used-

Core

GLib
low-level - Provides us with the implementation of fundamental types and algorithms. It is a base upon which, everything is constructed.
-In PiTiVi, I see the GLib basic types (gboolean, gchar, gint, gfloat, gdouble etc)-

GObject
With the GObject, GLib provides us with the implementation of an object-oriented framework for C.
-In PiTiVi, I see the gobject functions (http://www.pygtk.org/pygtk2reference/gobject-functions.html)-

GStreamer
A multimedia framework that allows us to do anything multimedia-related. It is very flexible and uses elements
that are packaged in the form of plugins.
These elements can be codecs/demuxers/lmuxer/effects etc.
One set of these plugins are the GNonLin plugins, which are the ones who implement anything related to the logic
of video editing in GStreamer. Mainly, handle the timing of reading different multimedia files.

GES (GStreamer Editing Services)
A library created on top of GNonLin plugins, making the use of GNonLin plugins easier to use. It wraps the
GNonLin elements by offering an API of higher level.

In Pitivi, the GNonLin plugins were used directly, up to now and this is why the porting to GES will facilitate
a lot the design of the project.
So, we are using GStreamer via GES and the most objects used are GES ones (even if they come from GStreamer classes).

UI

GTK+
Toolkit for creating graphical user interfaces. Providing standard widgets and event handling. Based also in GLib.

GooCanvas
One of GTK+ widgets, used for drawing.

All of these components are based in GLib and communicate through it and its signals.


So, if I just want to add quickly GES in the PiTiVi' s wiki diagram (https://wiki.pitivi.org/wiki/Architecture), I would add it here:





Friday, January 13, 2012

Pitivi: Undo / Redo Functionality (GES Porting)


So, after spending some days "beating around the bush", trying to integrate myself to the project by following the team' s work, getting to understand the backbone of the project' s code, I get deep into my task, the undo/ redo functionality.

Firstly, I thought of checking about the undo/redo philosophy in applications in general, which helped me get what was implemented in Pitivi_0.15, undo/redo with a stack approach: (en gros) Having an undo stack where every action taken by the user is logged and saved, so every time he wants to return to the previous state, the undo stack is popped. For redo also, the current state is being saved into the redo stack, before an undo is being performed. So, if we regretted having "undone", the redo stack is popped and the new current state is pushed to the undo stack.

What helps me a lot in understanding the logic of the undo implementation in pitivi_0.15 is to check the code at this version while the undo is still working. Now, with the new restructurate version of the project though, the undo classes and code are grouped together under a specific /undo folder.

While Thiblahute was helping me to get started with my task, he already gave a patch which enables the undo/redo functionality in the MediaLibrary:

http://git.pitivi.org/?p=pitivi.git;a=commit;h=418f71b3f7805270df760ec10cb5ed0a7027786e

(which had to do with the use of GstDiscovererInfo in the place of PitiviFactory, information that I have but I don't actually understand what it implies, so I should get more informed about it.....Hmm, if there will be things related to that that don' t allow undo to work now).

And now I am looking for the next step which will be the undo in the Timeline.

In order to work better, I am getting used to the debug system, setting breakpoints and even just printing.