Gstreamer PUSH和PULL模式

gstreamer PUSH和PULL模式,翻譯自part-push-pull.txt

PUSH-PULL
--------------
    通暢情況下,一個source element用gst_pad_push()方法推送(push)數據到下游的element。下游對應的pad(sink pad)用chain函數來接收buffer。在PUSH模式下,source element是管道里面數據流的原動力。
    從上游的元素拉取(PULL)數據流也是可以的。下游的元素通過在它的sink pad上的gst_pad_pull_range()函數實現這個功能。
    處在正確的狀態來處理push()和pull_range()是至關重要的。對於PUSH模式下,所有下游的元素應該處於正確的狀態;對於PULL模式下,所有上游的元素處於正確的狀態。
    大部分情況下,sink pad實現一個chain函數;sink pad實現一個loop函數將是一個例外;同樣的,src pad實現一個getrange函數將是一個例外。

狀態改變
------------
    GstBin設置所有sink element的狀態,這些元素沒有source pads。
    設置一個元素的狀態將首先激活所有的src pads,然後是sink pads。對於每一個sink pad,gst_pad_check_pull_range()函數被執行,如果sink pad支持loop function並且對應的pad調用GstPadCheckPullRange函數返回TRUE,則對應的pad先被激活,因爲在調用_pull_range()函數前它必須處於正確的狀態。需要注意的是,當前element的狀態改變還沒執行,僅僅是在src pads上的激活函數被調用了,這就意味着,實現了getrange函數的元素在調用改變狀態的函數之前必須調用激活函數。

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