翻譯自part-scheduling.txt
調度
------------------------
在Gstreamer中,調度模式是基於pad是主動積極地推送(產生)數據還是從其他的pad拉數據。
推模式(PUSH)
-------------------------
一個Pad能夠產生數據,並且推送給下一個Pad,按這種模式工作的Pad有一個loop函數,loop函數被重複調用直到返回false。Loop函數無論什麼時候需要數據時,可以阻塞。當Pad被取消激活時,loop函數應該取消阻塞。
按Push模式工作的Pad僅僅能夠對有chain函數的Pad推送數據,Chain函數被Push pad調用,參數是Push pad產生的buffer。
Push模式產生數據的方式也被稱爲流模式,因爲數據生產者產生一個穩定的,基本上是恆定速率流數據。
拉模式(PULL)
---------------------------
按Pull模式工作的Pad僅僅能夠從實現了pull_range的pad拉取數據。當從對等Pad拉取了數據後,loop函數將調用push將數據推送給對等pad。
決定調度模式
---------------------------
當Pad被激活時, _activate() 函數被調用。Pad根據上游Pad的能力選擇用push還是pull模式激活自己。Gstreamer默認用push模式激活pad,如果沒有激活函數。
Chain函數
---------------------------
當上遊元素調用 _push()函數,下游Pad的Chain函數被調用,上游的元素可能是chain中一個節點或者是一個Push源。
getrange函數
---------------------------
.......待續