]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/gstreamer0-10.git/blobdiff - docs/design/part-TODO.txt
MAINTAINERS: Update with new email address.
[glsdk/gstreamer0-10.git] / docs / design / part-TODO.txt
index 599bb0851ad6a7d534e86aa66310955237009cc2..a3813bdc06067fdde80be6d9ea8c7f7704079974 100644 (file)
@@ -1,34 +1,96 @@
+API/ABI
+-------
 
-- changing an object's name after construction is not allowed. Checks are performed
-  when adding objects to parents that no duplicate names are used, changing the name
-  to a duplicate name after adding it is therefore allowed and voids internal
-  consistency.
+- 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.
 
-- 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.
 
-- 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?
+- 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.
+
+- 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().
+
+- keep track of seeks with a counter so that we can match seek events received
+  in the demuxer srcpads. This is needed because a normal seek on a pipeline
+  will send the seek event on all sinks, which results in the demuxer receiving
+  the seek twice. If there is no way to see that the seek is the same, it will
+  perform the seek twice.
+  It would also be nice to have this same sequence number in the segment event
+  that resulted from the seek so that everything seek related can be tracked
+  properly.
+
+- 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.
 
-- implement clock selection as explained in part-gstpipeline.txt. 
+- When an element goes to PAUSED there is no way to figure out the running time
+  when this happened. One could think that we can store this time in the
+  base_time field of the element but that causes problems when the element is
+  still using the base_time before really PAUSING. We seem to need a new element
+  field for this. The running time when an element is paused can be usefull to
+  clip late buffers instead of prerolling on them.
 
-- when a pipeline with a live source goes to PAUSED again, a sample is prerolled
-  in the sinks. This sample should be discarded, possibly with a flush event
-  started from the source.
+- 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).
 
-- implement latency calculation for live sources.
+- Make serialisation of structures more consistent, readable and nicer code-wise.
 
-- implement master/slave clocks.
+- When a seekable live source does a flushing seek, it needs a new base_time to
+  timestamp new data. The pipeline however does not know that there is a live
+  source in the pipeline and thus does not select a new base_time automatically.
+  There needs to be a mechanism for a live source to request a new base_time or
+  pipeline restart.
 
-- implement QOS.
+- 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.
+  * 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.
+
+
+IMPLEMENTATION
+--------------
+
+- implement more QOS, see part-qos.txt.
 
 - implement BUFFERSIZE.
 
-- make bin_bus_handler a vmethod so subclasses can use their own implementation
-  or chain to the parent.
+- 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?
 
-- make it possible to seek on other formats than bytes in basesrc.