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.