Gstreamer的PAD啟用機制

2021-05-26 18:31:17 字數 1253 閱讀 3270

gstreamer的pad啟用機制(翻譯自part-activation.txt)

啟用當狀態改變時,pipeline將按照從sink->source的順序設定它的元素的狀態。當元素從ready -> paused狀態轉變時,它們的pad將被啟用來準備處理資料流,一些pad將開始驅動資料流。

乙個元素按照source pad -> sink pad的順序來啟用它的pad,這將保證當sink pad被啟用正準備接收資料時,source pad就已經準備就緒向下游傳輸資料流。

pad可以有2種被啟用的模式:push和pull。push是預設的模式,souce pad通過呼叫sink pad的gst_pad_push來傳輸資料;pull模式下,sink pad通過呼叫source pad的gst_pad_pull_range來請求資料。

為了啟用pad,核心將呼叫gst_pad_set_active(true)來啟用pad。如果pad已經啟用,不論是push還是pull模式,gst_pad_set_active將直接返回,什麼也不處理;否則將呼叫pad的啟用處理函式。

因為核心不知道按照什麼模式(push還是pull)來啟用pad,核心委託pad的啟用函式activate()來完成這個功能。pad的activate()函式選擇按照push還是pull模式來工作。預設地,activate()函式將呼叫activate_push()來啟用,因為它是預設的資料流傳輸方式。sink pad如果呼叫check_get_range()返回true,將呼叫activate_pull()來啟用;否則呼叫activate_push()來啟用pad。

例如管道:fakesrc ! fakesink,fakesink是按照pull模式工作的,該管道的狀態改變將從最下游的fakesink元素開始,核心將啟用fakesink元素的sink pad。由於fakesink是工作在pull模式,它將實現乙個自定義的activate()函式,呼叫activate_pull()來啟用sink pad。activate_pull()負責啟動從fakesrc的src pad獲取資料的任務。很明顯,fakesrc需要被通知將從它的的src pad上獲取資料,即使pipeline還沒有改變fakesrc的狀態。由於這個原因,activate_pull()在啟動拉資料的任務之前必須先呼叫fakesrc的src pad的activate_pull()函式。

簡而言之,在呼叫了它們source pad的activate_pull()函式後,上游的工作在pull模式的元素在ready狀態就準備產生資料;也就是說,activate_pull()函式的效果將傳播到gst_pad_pull()能夠到達每乙個pad。

Numpy中的pad函式

title numpy中的pad函式 date 2017 07 30 14 25 06 categories 填補乙個陣列。pad array,pad width,mode,kwars 其中array為要填補的陣列 input pad width是在各維度的各個方向上想要填補的長度,如 2,3 4,...

tf的pad函式(填充)

今天用到pad函式,看文件看了老半天,後面終於弄懂了。以下是本人的理解總結 文件的內容 t is 1,2,3 4,5,6 paddings is 1,1,2,2 constant values is 0.rank of t is 2.pad t,paddings,constant 0,0,0,0,0...

via和pad的區別

1 via via稱為過孔,有通孔 盲孔和埋孔之分,主要用於同一網路在不同層的導線的連線,一般不用作焊接元件。其中 1 盲孔是是用於表層線路和內層線路的連線 多層板中才有,就是只能看到孔的乙個頭,另乙個頭沒有穿透板子 2 埋孔是內層線路和內層線路的連線 多層板中才有,在外面不能看到埋孔 3 通孔是穿...