GStreamer status 0.11
wim.taymans at gmail.com
Fri Apr 1 06:36:06 PDT 2011
0.11 status 1-apr-2011
Hello fellow hackers,
This is the very first status update of the 0.11 branch, the branch that
eventually lead to the 1.0 release of GStreamer. I would like to send
a status mail every couple of weeks like we did for the 0.9 series.
how it goes.
One of the first changes since the 0.11 branch was made in december, was to
remove all deprecated symbols that we accumulated. This makes it easier to
focus on only the relevant bits of the API for the next steps. We also
finally use GInitiallyUnowned for the GstObject base class and got rid
of our own FLOATING flag.
The second biggest change was to make the miniobject a simple boxed type
allocated with the slice allocator. Caps could then also be based on
A GstBufferPool object got merged to unify the pool handling in various
such as ximagesink. This object might eventually also be used to
specifics of memory allocation and data passing but that part is not yet
For now it's sitting there as a nice helper object for elements.
In a next step, the buffermeta branches were merged. It took some
experimenting to find an API that looked reasonable. The end result is
now possible to efficiently attach arbitrary extra data to a buffer and have
that extra metadata be taken into account when doing various buffer
The api and functionality looks a bit like dynamic interfaces on buffer
Some elements like v4lsrc and ximagesink in -base were ported to use the
metadata feature to keep track of resources as a replacement for their
Buffer and memory handling
One of the biggest new changes are found in GstBuffer and in how it
memory associated with buffers. It started out with an experiment to use the
metadata features to store the buffer memory. It turned out that this
was not so
easy to use for the many use cases we wanted to solve.
One of the requirements was to merge the GstBufferList group feature
main GstBuffer object. This means that a GstBuffer should be able to contain
multiple chunks of disjoint memory. This feature is really handy when
to construct buffers from different chunks (like prepending headers for
cases). Some hardware devices also store the raw video data in multiple
of memory (for Y and CrCb planes).
A normal result of this was to make the memory handling as a separate system
from the buffers. This resulted in the GstMemory objects that manages a
piece of memory in a refcounted way. The GstBuffer object then has an
these memory blocks as the data member.
Interestingly, this makes it much easier to control writability of the
metadata and the buffer data. Compared to the GstBufferList, it's also much
easier to automatically deal with the disjoint pieces of memory.
This resulted in GstBufferList to degrade to a simple array of buffers
be passed as before. The API is now much easier to handle and faster too.
Docs for all of these new things can be found in the usual places. Some
buffer design still needs to be fleshed out a bit.
Meanwhile, Back At The Ranch
Or, notable activity in the plugins modules. All of the -core and -base
and unit test are updated for these new API changes. Some of the API for
libraries needed to be changed to deal with the new memory objects.
For all you crazy shooters out there, now's the time to put the pistol
the holster and get your hands dirty. Yes, maintainers of -good and -ugly
plugins, it's time to see how it goes with porting your plugins to the
API. A lot of API changed and it would be good to get some feedback.
It's also a good idea to see how far you can get with improving the
libva plugins. The new metadata and memory handling should make things
simple and more performant.
More -base library improvements to deal with the new API. Similarly,
totally doesn't optimize for the different memory chunks in GstBuffer
use some loving.
Next up will be changes to the events to make them sick to pads. It'll
it easier to change the way we handle the timing in the pipeline. The
would be to make it much easier to dynamically change the pipeline.
Allright, that's it for now. Have a very nice weekend.
More information about the gstreamer-devel