mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 14:56:36 +00:00
c10690aea2
We currently do a little too much work when we push the first buffer around resulting in excessive caps checking. We can probably make this a little less expensive.
93 lines
4.1 KiB
Text
93 lines
4.1 KiB
Text
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.
|
|
|
|
- add some sort of time/frame stepping functionality, either with a flag on
|
|
the seek event or some new seek event type. The idea would be to operate on
|
|
the current playback position instead of the current configured segment when
|
|
doing the seek.
|
|
Idea is that frame stepping forwards can be done in the sinks, ie, just
|
|
dropping N frames/time, sending more complicated queries upstream which can
|
|
ideally handle those cases more efficiently too. Some ideas are in
|
|
docs/design/draft-framestep.txt
|
|
|
|
- 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
|
|
incrementaly 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?
|
|
|