mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 08:17:01 +00:00
docs: rename and delete some design docs
This commit is contained in:
parent
18f5b1a59e
commit
e535c171d6
4 changed files with 0 additions and 108 deletions
|
@ -1,108 +0,0 @@
|
|||
Ghostpads
|
||||
---------
|
||||
|
||||
Status:
|
||||
|
||||
DRAFT. DEPRECATED by better current implementation.
|
||||
|
||||
|
||||
Purpose:
|
||||
|
||||
To create compound elements that look and behave like real elements
|
||||
one needs to be able to expose pads on the element that are not
|
||||
implemented by the element itself but by one of its components.
|
||||
|
||||
ex1:
|
||||
|
||||
Consider an rtp receiver element. It uses 2 UDP input ports to
|
||||
capture RTP and RTCP messages using UDP. These messages are
|
||||
then processed by an rtpsession element, which will reorder, make
|
||||
statistics, and generate the RTP and RTCP messages.
|
||||
|
||||
This element can be build from existing elements as shown in the
|
||||
figure below.
|
||||
|
||||
+------------------------------------+
|
||||
| rtpsrc |
|
||||
| |
|
||||
| +--------+ +---------+ |
|
||||
| | udpsrc | | rtpsess | |
|
||||
| | port1 --- ----------------
|
||||
| +--------+ | | |
|
||||
| +--------+ | | +---------+ |
|
||||
| | udpsrc | | | | udpsink | |
|
||||
| | port2 --- --- port3 | |
|
||||
| +--------+ +---------+ +---------+ |
|
||||
+------------------------------------+
|
||||
|
||||
The element has one output pad that contains the raw RTP data. This
|
||||
pad will be connected to the next element that will decode the RTP
|
||||
data. Since this pad is actually from the rtpsession element, there
|
||||
has to be a way to expose this pad on the rtpsrc element.
|
||||
|
||||
|
||||
Current implementation:
|
||||
|
||||
Version 0.8 creates a new GstGhostPad type that extends GstPad and has
|
||||
a link to the real pad internally.
|
||||
|
||||
Any operation on a pad potentially requires to check if this pad is a
|
||||
GhostPad and if so, follow the pointer to the real pad to perform the
|
||||
pad operation.
|
||||
|
||||
|
||||
Current problem:
|
||||
|
||||
- following the ghostpad to resolve the real pad adds code.
|
||||
- operations on pads are not performed on the ghostpad but on the
|
||||
real pad. This means:
|
||||
- pads are not linked to a ghostpad but to the real pad. For
|
||||
compound objects, the link is not really performed to the
|
||||
pad of the compound element but with some internal pad.
|
||||
- for state changes, it is hard to follow linked elements upstream
|
||||
bacause pads enter bins to the real element.
|
||||
|
||||
|
||||
Proposal:
|
||||
|
||||
- The pad still has one parent, the element that owns (has sinked) the
|
||||
pad. the GST_OBJECT_PARENT() is the real parent.
|
||||
|
||||
- The pad receives a GList of ghostparents. Ghostparents are sorted by depth.
|
||||
|
||||
- When a pad is ghostparented to another element, the element is added to
|
||||
the ghostparent list of the pad. The pad is added to the padlist of the
|
||||
element.
|
||||
|
||||
- A pad cannot be ghostparented to an element that is not a parent of the
|
||||
pad parent element. this ensures that all ghostpads do not skip an hierarchy.
|
||||
|
||||
- When a pad is removed from the parent element, it is also removed from all
|
||||
the ghostparents. This is easy to do as you can follow the ghostparent list of
|
||||
that pad.
|
||||
|
||||
- When an element is removed from another element, all the elements pads
|
||||
ghostparented to parents of the element are removed as well. This is easy
|
||||
to do with the sorted ghostparent list of the pad.
|
||||
|
||||
|
||||
Consequences:
|
||||
|
||||
- All pads are Real pads.
|
||||
- All operations are performed on the real pads. This improves performance
|
||||
and code simplicity
|
||||
- more checks can be done. Linking nested elements can be done sanely.
|
||||
compount elements that expose usable pads must ghostpad them before they
|
||||
can be linked.
|
||||
- All linked pads have a common grandparent.
|
||||
|
||||
|
||||
Issues:
|
||||
|
||||
- Name of ghostpad cannot be changed and is the name of the element. This could
|
||||
be solved by temporarily renaming the pad when ghostpadding. This could then
|
||||
again result in the element being confused about the padnames or the
|
||||
element having two pads with the same name.
|
||||
|
||||
|
||||
|
Loading…
Reference in a new issue