mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-29 19:50:40 +00:00
87 lines
3.6 KiB
Text
87 lines
3.6 KiB
Text
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 so that we can resend
|
|
NEWSEGMENT and other events.
|
|
|
|
- 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().
|
|
|
|
- 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
|
|
incrementally when needed. We can do this with a gst_pad_iterate_caps() call.
|
|
We also need to incrementally return intersections etc, for this.
|
|
|
|
- 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.
|
|
|
|
- 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.
|
|
|
|
- Remove the XML serialisation stuff.
|
|
|
|
- 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.
|
|
|
|
- implement pad_block with probes? see above.
|
|
|
|
|
|
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?
|
|
|