mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 20:59:44 +00:00
Some notes about pad disconnect
Original commit message from CVS: Some notes about pad disconnect
This commit is contained in:
parent
8d1e6c52c1
commit
f8546d1f79
1 changed files with 50 additions and 2 deletions
|
@ -398,7 +398,7 @@ NOTES:
|
||||||
- We probably need to set a limit on the maximum number of
|
- We probably need to set a limit on the maximum number of
|
||||||
recursions and size of the bufpen list.
|
recursions and size of the bufpen list.
|
||||||
|
|
||||||
- elements run non-preemtively, a group is done scheduling when all
|
- elements run non-preemptively, a group is done scheduling when all
|
||||||
elements in that group complete their chain/loop function.
|
elements in that group complete their chain/loop function.
|
||||||
|
|
||||||
- can we only have a stack overflow when there is a loop in the
|
- can we only have a stack overflow when there is a loop in the
|
||||||
|
@ -424,12 +424,60 @@ NOTES:
|
||||||
The time it takes for the first buffer to arrive at osssink equals
|
The time it takes for the first buffer to arrive at osssink equals
|
||||||
the time needed to decode the N-1 other buffers.
|
the time needed to decode the N-1 other buffers.
|
||||||
|
|
||||||
Of course, given the right buffersize for filesrc N can be reduced
|
Of course, given the right buffersize for filesrc, N can be reduced
|
||||||
to 1. mad can also suggest a buffersize to filesrc with the
|
to 1. mad can also suggest a buffersize to filesrc with the
|
||||||
BUFFER_SIZE event.
|
BUFFER_SIZE event.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Ungrouping
|
||||||
|
----------
|
||||||
|
|
||||||
|
Ungrouping might be the hardest part. especially in the case where
|
||||||
|
an element is still running (state changes and pipeline modifications
|
||||||
|
in element callbacks).
|
||||||
|
|
||||||
|
Ungrouping involves two tasks:
|
||||||
|
|
||||||
|
- breaking up groups. This can happen when a pad connection is broken
|
||||||
|
so that the group contains two clusters of unconnected elements.
|
||||||
|
- breaking up chains. This happens when a pad connection is broken
|
||||||
|
so that the chains contains two clusters of unconnected groups.
|
||||||
|
|
||||||
|
|
||||||
|
case1
|
||||||
|
-----
|
||||||
|
|
||||||
|
The most simple case is where two elements are disconnected and one
|
||||||
|
of the elements does not belong to a group. In this case, we don't need
|
||||||
|
to do anything at all.
|
||||||
|
|
||||||
|
case2
|
||||||
|
-----
|
||||||
|
|
||||||
|
if the elements are part of different groups, we need to check if the
|
||||||
|
chain needs to be broken. A chain is broken if it contains two sets
|
||||||
|
of unconnected groups.
|
||||||
|
|
||||||
|
To test this case, we will create a new chain and recursively move
|
||||||
|
one of the groups with all of its connected groups to it. If the
|
||||||
|
origial chain is empty after this operation, there was still a connection
|
||||||
|
and the new chain replaces the old one, else we end up with two chains.
|
||||||
|
|
||||||
|
case3
|
||||||
|
-----
|
||||||
|
|
||||||
|
When the elements are part of the same group we check if both elements
|
||||||
|
still have a connection to some other element in that group. The elements
|
||||||
|
without connections are removed from the group.
|
||||||
|
|
||||||
|
It is possible that when an element still has a connection with some other
|
||||||
|
element in the group, the group has to be split up anyway. This can happen
|
||||||
|
in fakesrc ! indentity ! identity ! fakesink when we break the connection
|
||||||
|
between the two identity elements. We have to be careful here in the cothread
|
||||||
|
case that we don't take away the running cothread from under the elements.
|
||||||
|
In the non-cothread case we can just move the elements to another new group.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue