Gstreamer 調度模式

翻譯自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函數

---------------------------

    .......待續

發佈了52 篇原創文章 · 獲贊 15 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章