TODO - Future Development
-------------------------

API/ABI
~~~~~~~

- implement return values from events in addition to the gboolean. This should
  be done by making the event contain a GstStructure with input/output values,
  similar to GstQuery. A typical use case is performing a non-accurate seek to a
  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

- GstEvent, GstMessage register like GstFormat or GstQuery.

- query POSITION/DURATION return accuracy. Just a flag or accuracy percentage.

- use | instead of + as divider in serialization of Flags
  (gstvalue/gststructure)

- rethink how we handle dynamic replugging wrt segments and other events that
  already got pushed and need to be pushed again. Might need GstFlowReturn from
  gst_pad_push_event(). FIXED in 0.11 with sticky events.

- Optimize negotiation. We currently do a get_caps() call when we link pads,
  which could potentially generate a huge list of caps and all their
  combinations, we need to avoid generating these huge lists by generating them
  We also need to incrementally return intersections etc, for this. somewhat
  incrementally when needed. We can do this with a gst_pad_iterate_caps() call.
  We also need to incrementally return intersections etc, for this.
  FIXED in 0.11 with a filter on getcaps functions.

- Elements in a bin have no clue about the final state of the parent element
  since the bin sets the target state on its children in small steps. This
  causes problems for elements that like to know the final state (rtspsrc going
  to PAUSED or READY is different in that we can avoid sending the useless
  PAUSED request).

- Make serialisation of structures more consistent, readable and nicer code-wise.

- pad block has several issues: 
  * can't block on selected things, like push, pull, pad_alloc, events, ...
  * can't check why the block happened. We should also be able to get the item/
    reason that blocked the pad. 
  * it only blocks on datapassing. When EOS, the block never happens but ideally
    should because pad block should inform the app when there is no dataflow.
  * the same goes for segment seeks that don't push in-band EOS events. Maybe
    segment seeks should also send an EOS event when they're done.
  * blocking should only happen from one thread. If one thread does pad_alloc
    and another a push, the push might be busy while the block callback is done.
  * maybe this name is overloaded. We need to look at some more use cases before
    trying to fix this.
  FIXED in 0.11 with BLOCKING probes. Not everything is implemented yet, though.

- rethink the way we do upstream renegotiation. Currently it's done with
  pad_alloc but this has many issues such as only being able to suggest 1 format
  and the need to allocate a buffer of this suggested format (some elements such
  as capsfilter only know about the format, not the size). We would ideally like
  to let upstream renegotiate a new format just like it did when it started.
  This could, for example, easily be triggered with a RENEGOTIATE event.
  FIXED in 0.11 with RECONFIGURE events.

- Remove the result format value in queries.

- Try to minimize the amount of acceptcaps calls when pushing buffers around.
  The element pushing the buffer usually negotiated already and decided on the
  format.
  The element receiving the buffer usually has to accept the caps anyway.


IMPLEMENTATION
~~~~~~~~~~~~~~

- implement more QOS, see part-qos.txt.

- implement BUFFERSIZE.


DESIGN
~~~~~~

- unlinking pads in the PAUSED state needs to make sure the stream thread is not
  executing code. Can this be done with a flush to unlock all downstream chain
  functions? Do we do this automatically or let the app handle this?

