0.11 status 1 jun 2011
----------------------

Hello again GStreamer hackers,


Here's another status update from the 0.11 branch. This one is packed
with new stuff because it really took too long between the last 
update, but well..


Misc Core Changes
-----------------

The first set of big core change was done by über hacker Sebastian Dröge.
He removed our special GST_BOILERPLATE macro. Because of some API strangeness
we needed to do actions in the base_init method, which the GST_BOILERPLATE
macro set up for us. The base_init concept is unfortunately not supported
by almost all language bindings so we wanted to clean this up and use the
regular G_DEFINE_TYPE macros. By inheriting metadata and pad templates
from the parent, the GST_BOILERPLATE macro could be removed.


Removal of gst_pad_alloc_buffer
-------------------------------

The next big change was the removal of gst_pad_alloc_buffer along with
all the pad_alloc functions. The pad_alloc function were used to both
implement allocation of buffers and notify upstream elements of new media
formats. The functionality is replace by 3 new things: GstBufferPool (as
noted in the previous status update), a new ALLOCATION query and a new
RECONFIGURE event.

The ALLOCATION query is used to query the downstream elements about the
buffer properties they would like. These properties include the size,
prefix and alignment of the memory. The downstream element can also propose
a GstBufferPool. It is then the upstream element that decides how it
will allocate buffers. This allows us, for example, to make the video
decoders specify their required memory alignment to the videosink. 

Since new format suggestions are no longer piggybacked upstream with the
allocation, something new was needed to notify upstream elements of a
format change. It started with bringing in the new RENEGOTIATE event
that Thiago Santos had been experimenting with in the 0.10 branch. The
new event basically lets upstream elements know that new formats are
possible somewhere downstream and it would make them renegotiate a new
format before pushing a new buffer.

New format changes can also happen when new elements are linked, so
gst_pad_link() will also send this RENEGOTIATE event upstream. As it turns
out, adding new elements could also signal the availability of a new
bufferpool or different ALLOCATION properties. The RENEGOTIATE event was
thus renamed to the more generic RECONFIGURE event.

The most impressive result of these changes is that most of the
complicated code in GstBaseTransform could simply be removed.


Sticky Events
-------------

The idea for the sticky events comes from the observation that a lot of the
serialized downstream events (SEGMENT, EOS, TAGS, ..) are really context
for the buffers that follow. The design called for making these events
sticky on the pads, meaning that they become a property of the pads
they travel over.

The result is that the current timing information (SEGMENT event) or the
current stream medatadata (TAG event) that is handled by the pad are 
directly accessible by looking at the last event that traveled on the pad.

By making the events stick on the pads, we can propagate them downstream
automatically when new pads are linked. This should solve one of the
biggest 0.10 problems when dealing with dynamic pipelines, the loss of
events (mostly NEWSEGMENT events).

It was then only natural to also make the CAPS event a sticky downstream 
serialized event. CAPS are indeed also context for the buffers that follow.
The caps property was also removed from GstBuffer, making caps negotiation
separate from the buffer dataflow again.


GstSegment changes
------------------

For the sticky events to work with SEGMENT events, we needed to change
the SEGMENT event so that it became selfcontained. The complicated segment
accumulation logic of 0.10 was simply removed and replaced with pad offsets.

It is now possible to tweak the timing of the data comming from a pad by
using the pad offset property.


GstCaps optimizations
---------------------

It doesn't look like we'll be able to implement GstCaps iterators to 0.11 so
Sebastian was looking for other ways to improve caps performance. One of the
low hanging fruits was to pass the complete GstCaps structure to the
GstBaseTransform transform_caps method. This allows for better and smarter
implementations of the function at the cost of marginally more complex code.

Sebastian also added a filter caps parameter to the gst_pad_get_caps()
function. This allows the caller to pass preferences and possible caps to
the function. The result is that the pad can make much better negotiation
decisions.

Sebastian also optimized gst_caps_is_subset()in the 0.10 branch and ported
the results to 0.11 as well.

with the still planned caps simplifications later, these changes should
substantially improve caps negotiation speed.


Pad probes
----------

Quite a few iterations were needed to reimplement the pad blocking and pad
probes. The new infrastructure allows you to add callbacks for the various
stages in the data transfer on a pad.

It's now possible to be notified when no data is going over a pad with the
IDLE probe. This should also fix one of the big problems with implementing
dynamic pipelines and the old pad blocking.

Not all features that we want to add to the new probes are implemented yet
but they can be added later without much trouble.


Other gems
----------

A new SCHEDULING query was added to get more information about the upstream
elements scheduling properties. 

Tim-Philipp Müller finally removed our dependency on libxml2. Back in the
day, we used XML for serialization of objects and the registry. Object
serialization had long been deprecated and the XML registry was replaced
with a much faster binary registry.

Tim also removed the unversioned gst-launch, gst-inspect and gst-typefind
scripts. They were always confusing and annoying for packagers and users,
it is just easier

Edward Hervey spent some time keeping the unit tests working and making
sure the API docs are up to data.

GstIterator was made more binding friendly By Johan Dahlin and Sebastian.


And what about the plugins..
----------------------------

As usual, all -base plugins are kept in sync with the core API updates and
the new features. They are always a good place to see how the new API can
be used and how to port things.


What's next
-----------

Almost all of the features laid out in the GStreamer conference last year
are now implemented. We also have quite a few new cool features that
slipped in. Things are shaping up indeed.

The last big missing piece is the redesign of the caps fields for raw audio
and video. We plan to finish that in the next weeks.

There are also a few smaller things we would like to do: use GstQuery
for the various caps functions, do GstFlowReturn for the query/event
functions, ...

Meanwhile we start the stabilization phase and we will do a first prerelease
of 0.11 this week to bring things to a wider audience. Now is the time to
catch up and start porting your plugins to 0.11.

There is still a lot of work to be done to port plugins to 0.11 before we
can release 1.0. I ask everyone again (and especially maintainers) to help
us porting plugins, it's really a lot of work!


Have a nice hacking week,

Wim








