2016-12-05 21:12:24 +00:00
|
|
|
|
# TODO - Future Development
|
|
|
|
|
|
|
|
|
|
## API/ABI
|
|
|
|
|
|
|
|
|
|
- implement return values from events in addition to the gboolean.
|
2016-12-30 08:58:29 +00:00
|
|
|
|
This should be done by making the event contain a `GstStructure` with
|
|
|
|
|
input/output values, similar to `GstQuery`. A typical use case is
|
2016-12-05 21:12:24 +00:00
|
|
|
|
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.
|
|
|
|
|
|
2016-12-30 08:58:29 +00:00
|
|
|
|
- make `_pad_push_event()` return a `GstFlowReturn`
|
2016-12-05 21:12:24 +00:00
|
|
|
|
|
2016-12-30 08:58:29 +00:00
|
|
|
|
- `GstEvent`, `GstMessage` register like `GstFormat` or `GstQuery`.
|
2016-12-05 21:12:24 +00:00
|
|
|
|
|
|
|
|
|
- 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
|
2016-12-30 08:58:29 +00:00
|
|
|
|
need `GstFlowReturn` from `gst_pad_push_event()`. FIXED in 0.11 with
|
2016-12-05 21:12:24 +00:00
|
|
|
|
sticky events.
|
|
|
|
|
|
2016-12-30 08:58:29 +00:00
|
|
|
|
- Optimize negotiation. We currently do a `get_caps()` call when we
|
2016-12-05 21:12:24 +00:00
|
|
|
|
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
|
2016-12-30 08:58:29 +00:00
|
|
|
|
can do this with a `gst_pad_iterate_caps()` call. We also need to
|
2016-12-05 21:12:24 +00:00
|
|
|
|
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
|
2016-12-30 08:58:29 +00:00
|
|
|
|
state (rtspsrc going to `PAUSED` or `READY` is different in that we can
|
|
|
|
|
avoid sending the useless `PAUSED` request).
|
2016-12-05 21:12:24 +00:00
|
|
|
|
|
|
|
|
|
- Make serialisation of structures more consistent, readable and nicer
|
|
|
|
|
code-wise.
|
|
|
|
|
|
|
|
|
|
- pad block has several issues:
|
|
|
|
|
|
2016-12-30 08:58:29 +00:00
|
|
|
|
- can’t block on selected things, like push, pull, `pad_alloc`,
|
2016-12-05 21:12:24 +00:00
|
|
|
|
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
|
2016-12-30 08:58:29 +00:00
|
|
|
|
`pad_alloc` and another a push, the push might be busy while the
|
2016-12-05 21:12:24 +00:00
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
- rethink the way we do upstream renegotiation. Currently it’s done
|
2016-12-30 08:58:29 +00:00
|
|
|
|
with `pad_alloc` but this has many issues such as only being able to
|
2016-12-05 21:12:24 +00:00
|
|
|
|
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. FIXED in 0.11
|
|
|
|
|
|
|
|
|
|
- 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, [qos](design/qos.md).
|
|
|
|
|
|
|
|
|
|
- implement BUFFERSIZE.
|
|
|
|
|
|
|
|
|
|
## DESIGN
|
|
|
|
|
|
2016-12-30 08:58:29 +00:00
|
|
|
|
- unlinking pads in the `PAUSED` state needs to make sure the stream
|
2016-12-05 21:12:24 +00:00
|
|
|
|
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?
|