mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
docs: update docs
This commit is contained in:
parent
1ea2722180
commit
44d45e0b63
2 changed files with 193 additions and 2 deletions
|
@ -10,8 +10,7 @@ API/ABI
|
|||
keyframe, after the seek you want to get the new stream time that will
|
||||
actually be used to update the slider bar.
|
||||
|
||||
- make gst_pad_push_event() return a GstFlowReturn so that we can resend
|
||||
NEWSEGMENT and other events.
|
||||
- make gst_pad_push_event() return a GstFlowReturn
|
||||
|
||||
- GstEvent, GstMessage register like GstFormat or GstQuery.
|
||||
|
||||
|
|
192
docs/random/status-0.11-14-jun-2011.txt
Normal file
192
docs/random/status-0.11-14-jun-2011.txt
Normal file
|
@ -0,0 +1,192 @@
|
|||
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
|
||||
lowhanging 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in a new issue