tee: Check for the removed pad flag also in the slow pushing path
[platform/upstream/gstreamer.git] / docs / random / plan-0.11.txt
1 Plan for 0.11
2 =============
3
4 First attempt at making a list of tasks in roughly chronological order.
5
6 * General cleanup
7
8   - Remove deprecated methods
9   - Cleanup structs + PADDING
10   - ..
11   
12   This should allow us to continue expanding later in the same way that 0.10 was
13   expanded.
14
15
16 * Review GstCaps fields
17
18   - go over caps fields for audio, video, compressed media-type etc
19
20   We need to express things with less fields. This would speed up caps, make
21   them less verbose and speed up some elements.
22
23
24 * Add GstFlowReturn for events (and query)
25
26   This would allow us to know more precisely what went wrong.
27
28   http://cgit.freedesktop.org/~wtay/gstreamer/log/?h=events2
29
30
31 * add return structure for events and query
32
33   Make events return more information. (a seek event might want to return the
34   final position of the keyframe seek and the accuracy of the seek)
35
36   Make bindings easiers. Currently the writability of a query depends on the
37   refcount being exactly 1. If the query is not writable, it simply cannot be
38   answered.
39
40
41 * Make GstMiniObject a simple boxed type
42
43   - Move copy and free function to structure
44   - convert GstBuffer, GstEvent, GstMessage, GstQuery,
45
46   We don't need to subclass miniobjects when we have arbitrary metadata. 
47
48   Allocation should be more efficient and buffer/metadata/data can be allocated
49   and pooled in one contiguous memory area.
50
51   Typechecking of various types is much more efficient when there is only
52   one class.
53
54   http://cgit.freedesktop.org/~wtay/gstreamer/log/?h=miniobject2
55
56
57 * Convert GstCaps to GstMiniObject
58
59   Currently it has its own refcounting and flags.
60
61   http://cgit.freedesktop.org/~wtay/gstreamer/log/?h=miniobject2
62
63
64 * GVariant registry
65
66   - allow for mmaped registy (tpm)
67
68 * Incremental caps
69
70   - Remove array from caps ?
71   - make caps iterator or is the array the cache for iterator ?
72
73   We need to perform less caps operations when negotiating formats. One way is
74   to only handle small caps objects incrementally.
75
76   http://cgit.freedesktop.org/~ensonic/gstreamer/log/?h=lazycaps
77
78
79 * Make GstBufferMetadata
80
81   - Make functions to register metadata
82   - Make common metadata: timeinfo, memory data, video data
83   - Remove GstBuffer Fields
84   - Make methods to add metadata to buffers.
85   
86   More flexible metadata for buffers.
87
88   http://cgit.freedesktop.org/~wtay/gstreamer/log/?h=buffermeta
89
90
91 * Negotiation of metadata
92
93   - figure out if we need to negotiate the metadata on the caps or if we can
94     gracefully degrade when an element doesn't understand the metadata.
95
96   We need to avoid that elements put metadata on buffers that is essential in
97   handling the buffer contents but that is then not understood by other
98   elements.
99
100
101 * Rework reverse negotiation
102
103   - upstream event to notify of a downstream caps change
104   - _alloc_buffer() takes input GstBuffer prototype (or NULL)
105   - _alloc_buffer() never returns changed caps.
106
107   One of the performance problems in 0.10 is that transform elements need to
108   call gst_pad_alloc_buffer() downstream to check if the caps changed. This
109   usually also results in a useless memory allocation. 
110   
111   We would make a new upstream event to notify downstream elements that new caps
112   are possible somewhere downstream.
113
114   gst_pad_alloc_buffer() would take a GstBuffer as an input argument to make the
115   API easier, we can then use metadata to specify additional constraints for the
116   new buffer (such as strides, etc)
117   
118
119 * Incremental event progation
120
121   - certain events would be sticky on a pad like for caps
122   - rules for pushing an event downstream
123      - right before pushing a buffer
124      - after link operation
125   - activate for most serialized downstream events
126
127   This would allow an application to have more control over the state of the
128   dataflow in a pipeline. 
129
130
131 * GstSegment changes
132
133   - remove segment accumulation
134   - add accumulated time to the event
135   - apply segment info to pads
136   - add method on pads to get/adjust sync offset
137   - add method on pads to query current running_time 
138
139   The goal is to make the timing model more comprehensible and thus make dynamic
140   pipeline plugging easier.
141