GSoC: Final report

Google Summer of Code 2019 has come to an end. This post is part of my final submission. It summarizes my contribution to Pitivi, providing links to my work.

My proposal consisted on a interval time system with different applications for Pitivi video editor. Originally, one of the applications would be to be able to set up markers at selected positions in the timeline, to store user metada.

After the first discussions it was clear that the core of the whole problem would be to implement the markers abstraction in GES (GStreamer Editing Services). They could store the information about position and duration needed. This was the base of my work.

Following are the links to my work. They are two contributions, one in GES and one in Pitivi, with all my code, fully functional. They implement a markers system in Pitivi, easily expandable.

GES markerlist class

My work in GES is co-authored with my mentor, Mathieu Duponchelle. It includes the new classes GESMarkerList and GESMarker, and tests for them. It is already merged.

GESMarkerList allows to have a list of GESMarker in every class that implements GESMetaContainer. Its API includes methods for create, serialize and deserialize a GESMarkerList, and for add, move, get and remove GESMarker. Also include signals to notify this operations.

The class GESMarker implements GESMetacontainer. It has a position property.

A set of new tests checks that everything works fine.

Link: GES markerlist class

Pitivi markers

My work in Pitivi is ready to be merged. It includes the new module ‘’ with the classes MarkersBox, Marker and MarkerPopoper. They uses GESMarkerList and GESMarker to hold the data, and Gtk to build the interface.

The class MarkersBox is used in the timeline. It’s an event box, zoomable, that has a layout to display Markers and supports different operations over them. It has a GESMarkerList.

The class Marker represents an individual marker, with a GESMarker and its interface. MarkerPopover creates a context popup menu that allows the user to insert text data in the GESMarker.

Every operation in this classes is undoable and there is a set of new tests to check everything.

Link: Pitivi markers


I want to keep working on this project. My proposal has revealed more complex that I thought at the beggining, but my skills and knowledge had improved over this time. I worked on very different parts of the project, all connected together. From the library bases to the interface, passing through the testing and the undoable/doable parts. All new matters to me.

I think this work represents a strong base to keep working on and a great approach to how multimedia and video editors work. Next steps would be to go back to GES and implement a duration property in GESMarkers, to be used in Pitivi to define time intervals.

Of course, I have to say thank you to the people in Pitivi, Mathieu Duponchelle, Alexandru “aleb” Băluț and Thibault Saunier for their help, advices and company through this way. Thank you very much specially for giving me this opportunity.

Written on August 25, 2019