| 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 |
| expanded. |
| |
| |
| * 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. |
| |
| http://cgit.freedesktop.org/~wtay/gstreamer/log/?h=events2 |
| |
| |
| * 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 |
| answered. |
| |
| |
| * 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. |
| |
| http://cgit.freedesktop.org/~wtay/gstreamer/log/?h=miniobject2 |
| |
| |
| * Convert GstCaps to GstMiniObject |
| |
| Currently it has its own refcounting and flags. |
| |
| http://cgit.freedesktop.org/~wtay/gstreamer/log/?h=miniobject2 |
| |
| |
| * 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. |
| |
| http://cgit.freedesktop.org/~ensonic/gstreamer/log/?h=lazycaps |
| |
| |
| * 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. |
| |
| http://cgit.freedesktop.org/~wtay/gstreamer/log/?h=buffermeta |
| |
| |
| * 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 |
| elements. |
| |
| |
| * 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. |
| |