summaryrefslogtreecommitdiff
path: root/docs/design/part-activation.txt
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@gnome.org>2016-12-05 18:16:34 -0300
committerThibault Saunier <tsaunier@gnome.org>2016-12-06 14:08:14 -0300
commitd1c79fc1774c80873b956bfb187ad57042deedbb (patch)
tree3f9a620c1d9acbcd516bbf5e8fa314b6dcf352c0 /docs/design/part-activation.txt
parentdbe3d2b328113b468e19adc2ff39acc22e151069 (diff)
docs: Remove design doc as they have been moved to gst-docs
https://bugzilla.gnome.org/show_bug.cgi?id=775667
Diffstat (limited to 'docs/design/part-activation.txt')
-rw-r--r--docs/design/part-activation.txt93
1 files changed, 0 insertions, 93 deletions
diff --git a/docs/design/part-activation.txt b/docs/design/part-activation.txt
deleted file mode 100644
index bd020e9363..0000000000
--- a/docs/design/part-activation.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-Pad (de)activation
-------------------
-
-Activation
-~~~~~~~~~~
-
-When changing states, a bin will set the state on all of its children in
-sink-to-source order. As elements undergo the READY->PAUSED transition,
-their pads are activated so as to prepare for data flow. Some pads will
-start tasks to drive the data flow.
-
-An element activates its pads from sourcepads to sinkpads. This to make
-sure that when the sinkpads are activated and ready to accept data, the
-sourcepads are already active to pass the data downstream.
-
-Pads can be activated in one of two modes, PUSH and PULL. PUSH pads are
-the normal case, where the source pad in a link sends data to the sink
-pad via gst_pad_push(). PULL pads instead have sink pads request data
-from the source pads via gst_pad_pull_range().
-
-To activate a pad, the core will call gst_pad_set_active() with a TRUE
-argument, indicating that the pad should be active. If the pad is
-already active, be it in a PUSH or PULL mode, gst_pad_set_active() will
-return without doing anything. Otherwise it will call the activation
-function of the pad.
-
-Because the core does not know in which mode to activate a pad (PUSH or
-PULL), it delegates that choice to a method on the pad, activate(). The
-activate() function of a pad should choose whether to operate in PUSH or
-PULL mode. Once the choice is made, it should call activate_mode()
-with the selected activation mode.
-The default activate() function will call activate_mode() with
-#GST_PAD_MODE_PUSH, as it is the default mechanism for data flow.
-A sink pad that supports either mode of operation might call
-activate_mode(PULL) if the SCHEDULING query upstream contains the
-#GST_PAD_MODE_PULL scheduling mode, and activate_mode(PUSH) otherwise.
-
-Consider the case fakesrc ! fakesink, where fakesink is configured to
-operate in PULL mode. State changes in the pipeline will start with
-fakesink, which is the most downstream element. The core will call
-activate() on fakesink's sink pad. For fakesink to go into PULL mode, it
-needs to implement a custom activate() function that will call
-activate_mode(PULL) on its sink pad (because the default is to
-use PUSH mode). activate_mode(PULL) is then responsible for starting
-the task that pulls from fakesrc:src. Clearly, fakesrc needs to be
-notified that fakesrc is about to pull on its src pad, even though the
-pipeline has not yet changed fakesrc's state. For this reason,
-GStreamer will first call call activate_mode(PULL) on fakesink:sink's
-peer before calling activate_mode(PULL) on fakesink:sinks.
-
-In short, upstream elements operating in PULL mode must be ready to
-produce data in READY, after having activate_mode(PULL) called on their
-source pad. Also, a call to activate_mode(PULL) needs to propagate through
-the pipeline to every pad that a gst_pad_pull() will reach. In the case
-fakesrc ! identity ! fakesink, calling activate_mode(PULL) on identity's
-source pad would need to activate its sink pad in pull mode as well,
-which should propagate all the way to fakesrc.
-
-If, on the other hand, fakesrc ! fakesink is operating in PUSH mode, the
-activation sequence is different. First, activate() on fakesink:sink
-calls activate_mode(PUSH) on fakesink:sink. Then fakesrc's pads are
-activated: sources first, then sinks (of which fakesrc has none).
-fakesrc:src's activation function is then called.
-
-Note that it does not make sense to set an activation function on a
-source pad. The peer of a source pad is downstream, meaning it should
-have been activated first. If it was activated in PULL mode, the
-source pad should have already had activate_mode(PULL) called on it, and
-thus needs no further activation. Otherwise it should be in PUSH mode,
-which is the choice of the default activation function.
-
-So, in the PUSH case, the default activation function chooses PUSH mode,
-which calls activate_mode(PUSH), which will then start a task on the source
-pad and begin pushing. In this way PUSH scheduling is a bit easier,
-because it follows the order of state changes in a pipeline. fakesink is
-already in PAUSED with an active sink pad by the time fakesrc starts
-pushing data.
-
-Deactivation
-~~~~~~~~~~~~
-
-Pad deactivation occurs when its parent goes into the READY state or when the
-pad is deactivated explicitly by the application or element.
-gst_pad_set_active() is called with a FALSE argument, which then calls
-activate_mode(PUSH) or activate_mode(PULL) with a FALSE argument, depending
-on the current activation mode of the pad.
-
-Mode switching
-~~~~~~~~~~~~~~
-
-Changing from push to pull modes needs a bit of thought. This is actually
-possible and implemented but not yet documented here.
-