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