blob: 35699279e64b581ec388e288d210d90d88cb0353 [file] [log] [blame]
Plan for 0.11
First attempt at making a list of tasks in roughly chronological order.
* General cleanup
- Remove deprecated methods
- Cleanup structs + PADDING
- ..
This should allow us to continue expanding later in the same way that 0.10 was
* Review GstCaps fields
- go over caps fields for audio, video, compressed media-type etc
We need to express things with less fields. This would speed up caps, make
them less verbose and speed up some elements.
* Add GstFlowReturn for events (and query)
This would allow us to know more precisely what went wrong.
* add return structure for events and query
Make events return more information. (a seek event might want to return the
final position of the keyframe seek and the accuracy of the seek)
Make bindings easiers. Currently the writability of a query depends on the
refcount being exactly 1. If the query is not writable, it simply cannot be
* Make GstMiniObject a simple boxed type
- Move copy and free function to structure
- convert GstBuffer, GstEvent, GstMessage, GstQuery,
We don't need to subclass miniobjects when we have arbitrary metadata.
Allocation should be more efficient and buffer/metadata/data can be allocated
and pooled in one contiguous memory area.
Typechecking of various types is much more efficient when there is only
one class.
* Convert GstCaps to GstMiniObject
Currently it has its own refcounting and flags.
* GVariant registry
- allow for mmaped registy (tpm)
* Incremental caps
- Remove array from caps ?
- make caps iterator or is the array the cache for iterator ?
We need to perform less caps operations when negotiating formats. One way is
to only handle small caps objects incrementally.
* Make GstBufferMetadata
- Make functions to register metadata
- Make common metadata: timeinfo, memory data, video data
- Remove GstBuffer Fields
- Make methods to add metadata to buffers.
More flexible metadata for buffers.
* Negotiation of metadata
- figure out if we need to negotiate the metadata on the caps or if we can
gracefully degrade when an element doesn't understand the metadata.
We need to avoid that elements put metadata on buffers that is essential in
handling the buffer contents but that is then not understood by other
* Rework reverse negotiation
- upstream event to notify of a downstream caps change
- _alloc_buffer() takes input GstBuffer prototype (or NULL)
- _alloc_buffer() never returns changed caps.
One of the performance problems in 0.10 is that transform elements need to
call gst_pad_alloc_buffer() downstream to check if the caps changed. This
usually also results in a useless memory allocation.
We would make a new upstream event to notify downstream elements that new caps
are possible somewhere downstream.
gst_pad_alloc_buffer() would take a GstBuffer as an input argument to make the
API easier, we can then use metadata to specify additional contraints for the
new buffer (such as strides, etc)
* Incremental event progation
- certain events would be sticky on a pad like for caps
- rules for pushing an event downstream
- right before pushing a buffer
- after link operation
- activate for most serialized downstream events
This would allow an application to have more control over the state of the
dataflow in a pipeline.
* GstSegment changes
- remove segment accumulation
- add accumulated time to the event
- apply segment info to pads
- add method on pads to get/adjust sync offset
- add method on pads to query current running_time
The goal is to make the timing model more comprehensible and thus make dynamic
pipeline plugging easier.