Hi all you GStreamer hackers and lurkers,
This is to announce that another 0.11 status updated has landed in you mailbox.
It's also just about the perfect moment, we did our first developer preview
release of the 0.11 branch and soon we're all heading to the Berlin Desktop
Summit to hang out and bathe in barrels of German Beer for a week or so.
Good times indeed. Let's get to it before we pass out.
Misc core changes
-----------------
Long term GStreamer hacker Tim-Philipp Müller started with removing some of the
older deprecated tools like gst-feedback and gst-xmlinspect. This then opened
the door to finally remove our dependency on libxml2. XML load and save of
elements was something fashionable 10 years ago but never really worked so well.
Tim-Philipp also cunningly removed the unversioned versions of the tools. They
were always quite confusing. Using the unversioned gst-launch, for example could
spawn a 0.10 or 0.11 version of the tool depending on what looks like the
phase of the moon. Also exchanging pipelines between version is just simply not
going to work so well because elements changed or properties got renamed.
As part of some more cleanups, Tim-Philipp also update our awkward query API. We
used to make it possible for elements answering the query to update the format.
That feature has however never been used in 10 years of GStreamer and the API is
not very nice to use. This change requires a whole bunch of elements to be
updated.
Memory allocation
-----------------
0.11 turns out be very focused around improving the memory management and
allocation strategies and so further improvements were done on the
allocation of buffers and memory. First of all, the ALLOCATION query can
now let upstream elements know about the preferred allocators to use. This would
make it possible to make a filesrc write directly into allocated memory from an
element downstream. We could do this in 0.10 with the pad_alloc calls but since
now, there is also a way to do the same (but more powerful) in 0.11.
The base classes got support for negotiation the allocation methods to use. This
can be using a bufferpool or a custom allocator. Subclasses can also influence
the allocator selection. With some more changes to basesrc, we can now make the
source element write into buffers allocated from a downstream bufferpool.
Bufferpool options
------------------
The last bit of changes were done on the bufferpools. The bufferpools are used
to negotiate and setup the buffers that elements will exchange between
eachother. It is now possible to expose extra options on the bufferpool that the
user can enable. This allows us to specify arbitrary extra properties that are
used to allocate memory.
A good example was implemented in the gst-ffmpeg plugin and the xvimagesink
element. ffmpeg can operate at higher performance when it is given buffers with
exactly the right padding of the image and alignment of the strides.
Using the new bufferpool option, ffmpeg can configure those extra constraints in
the bufferpool after it checked if the bufferpool that it got from xvimagesink
supports this. Then xvimagesink will allocate the right kind of buffers from X
shared memory.
And the plug-ins?
-----------------
All the -base plugins were kept up-to-date with the changes. Some of the plugins
got support for new features, either because of the baseclass improvements or
because we made them use the new core features.
We renamed decodebin2 to decodebin and playbin2 to playbin, effectively removing
the old versions.
The ffmpegcolorspace was removed and replace by the more powerful and faster
videoconvert element. The new videoconvert element uses ORC to automatically
generate optimized conversion code for the cpu.
One of the biggest changes was the addition of the shiny new video helper API.
Functions to inspect color formats and deal with video frames were added. These
helper functions automatically deal with extra metadata to specify special
strides and buffers. Most of the elements in -base were updated to use these new
functions.
In -good, Mark Nauwelarts went on a porting spree. He ported like 14 plugins and
we all owe him a beer or two now :)
What's next
-----------
Now we start stabilizing and port plugins. There are a couple of blocking things
that need fixing such as a caps intersection bug and race conditions in various
plugins after the 0.11 porting.
We'll be doing some more 0.11 releases as we go. There is still a fair amount of
work to do but we're pretty much on track for 1.0.
But.. first things first and lets get ready for the Desktop Summit! There will
be a talk of yours truly and Edward Hervey about GStreamer 1.0 for those who are
interested in such things.
See you all there and if you're not going, have a super nice weekend.
Wim