pipeline處於playing狀態時,如果要動態替換element元件,而又不從新停止pipeline,開始pipeline,則會用到下面的動態替換element元件。
element元件包括ending element和filter element,所以包括如下2類:
一、filter element替換:
【原理】 處於非ending point的element元件,在替換某元件時,在unlink舊的元件,link新的元件之前,需要新增probe eos探針,eos訊號給被替換元件的sinkpad,srcpad獲取eos訊號後才能進行element的remove.
具體的**上面的鏈結中也給出了。
具體意思就是:通過g_timeout_add_seconds()函式新增定時器,每秒實現effect裡面的element的元件替換。
二、ending element替換:
ending point element元件替換,包括src element和sink element元件。這裡以src element元件為例說明:
「imxv4l2videosrc device=/dev/video1 ! overlaysink show-preroll-frame=false」
我想動態修改imxv4l2videosrc的屬性,crop-meta-width和crop-meta-height,以實現電子倍焦的功能。但是自己通過g_object_set()的方式修改playing狀態下的該屬性,不能work。
(後面通過閱讀imxv4l2videosrc的該外掛程式原始碼,知道了crop-meta-width和crop-meta-height在init的時候約定了mem_pool的大小,後面playing後沒有作用)
所以只能通過replace imxv4l2videosrc的crop-meta-width=xx crop-meta-height=xx來實現該效果。
【原理】
(1)、gst_element_set_state(pipeline, gst_state_paused);
(2)、gst_pad_add_probe(element, probe_type_block_downstream) ==> 阻塞element的src-pad
(3)、remove_element() ==>unlink_element() remove_element()
(4)、create_element() ==> create_element() gst_bin_add_element()
(5)、gst_element_set_state(data->src, gst_state_playing);
【**】
Gstreamer應用開發手冊9 動態控制引數
gstreamer屬性通常是使用g object set 設定的,但是想實時地呼叫來更改流幾乎是不可能的。控制器子系統提供了一種輕量級的方法來在流執行時調整gobject屬性。控制器要考慮到時間影響,它通過gstcontrolsource控制項來修改屬性。控制源提供0.0到1.0的範圍的時間戳的值。...
外掛程式的「動態替換」
assembly.loadfrom addinfilepath 現在,我們需要轉個彎 assembly asm null 先將外掛程式拷貝到記憶體緩衝 byte addinstream null if filehelper.readfiletobuff addinfilepath outaddins...
c excel vsto 批註公式動態替換
設定注釋公式賦給作價表 public static void setcommentformula worksheet worksheet regexoptions.ignorecase matchcollection matches regex.matches comtext var result ...