0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

修改V4L2的Video Pipeline的devicetree

李春梅 ? 來源:chm5 ? 作者:chm5 ? 2022-08-02 08:03 ? 次閱讀

介紹

PetaLinux 能夠根據Vivado的設計,自動生成V4L2的Video Pipeline的devicetree。但是它主要為Xilinx的VCU TRD服務,測試的組合比較少。很多時候,需要根據自己的工程,修改V4L2的Video Pipeline的devicetree。

硬件設計

有項目需要對輸入的視頻,既需要對原始視頻做編解碼,也需要縮放后再做編解碼。于是創(chuàng)建了下面的硬件設計。

axis_data_fifo主要用于暫時緩存數據。axis_broadcaster和vpss之間的axis_data_fifo、axis_register_slice,可以刪除,完全不影響共。

兩個framebuffer_write的tready通過邏輯門的“或”操作,連接到了一起,再連接到前級axis_register_slice的輸入,保證只要有一個framebuffer_write在工作,前面的模塊就能向后輸出數據。

devicetree

對于上述的硬件設計,對應的V4L2的devicetree如下:

&amba_pl {

/delete-node/ axis_broadcasterhdmi_input_axis_broadcaster_0@0;

/* media-ctl prints out each node name of the video pipeline.

hdmi_brdcst_0@0: media-ctl prints it out. */

hdmi_brdcst_0_lb: hdmi_brdcst_0@0 {

compatible = “xlnx,axis-broadcaster-1.1”;

hdmi_brdcst_0_ports: ports {

#address-cells = ;

#size-cells = ;

};

};

/delete-node/ vcapaxis_broad_out1hdmi_input_axis_broadcaster_0;

/delete-node/ vcap_hdmi_input_v_proc_ss_0;

/* vcap_hdmi_brdcst_0: media-ctl prints it out. */

vcap_hdmi_brdcst_0 {

compatible = “xlnx,video”;

dma-names = “port0”, “port1”;

dmas = , ;

/* vcap_hdmi_brdcst_0_ports: Linux prints it out in log. */

vcap_hdmi_brdcst_0_ports: ports {

#address-cells = ;

#size-cells = ;

vcap_broadcaster_0_port1: port@0 {

direction = “input”;

reg = ;

/* Video input pipeline 1:

hdmi_rx_ss --》 broadcaster_0 : 1 --》 v_proc_ss_0 --》 v_frmbuf_wr_1

hdmi_rx_ss : source_to_axis_broad_in0_from_v_hdmi_rx_ss_0

broadcaster_0 : out 1 : port2 :: src_to_vpss0_from_broad_port2_hwout1

v_proc_ss_0 @a0040000 port@0 :: sink_to_vpss0_from_broad_port2_hwout1

v_proc_ss_0 @a0040000 port@1 :: src_to_frmbuf_wr1_from_vpss_0

v_frmbuf_wr_1 @a0080000 :: hdmi_input_v_frmbuf_wr_1

*/

sink_to_frmbuf_wr1_from_vpss_0: endpoint {

remote-endpoint = ;

};

};

vcap_broadcaster_0_port2: port@1 {

direction = “input”;

reg = ;

/* Video input pipeline 0:

hdmi_rx_ss --》 broadcaster_0 : 0 --》 v_frmbuf_wr_0

hdmi_rx_ss : source_to_axis_broad_in0_from_v_hdmi_rx_ss_0

broadcaster_0 : out 0 : port1 :: src_to_frmbuf_wr0_from_broad_port1_hwout0

v_frmbuf_wr_1 @a0010000 :: hdmi_input_v_frmbuf_wr_0

hdmi_input_ v_frmbuf_wr_0 hdmi_input_ axis_broadcaster_0

*/

sink_to_frmbuf_wr0_from_broad_port1_hwout0: endpoint {

remote-endpoint = ;

};

};

};

};

};

/* hdmi_input_v_hdmi_rx_ss_0: v_hdmi_rx_ss@a0000000 */

&hdmirx_porthdmi_input_v_hdmi_rx_ss_0 {

source_to_axis_broad_in0_from_v_hdmi_rx_ss_0: endpoint {

remote-endpoint = ;

};

};

&hdmi_brdcst_0_ports{

/delete-node/ axis_broad_port1hdmi_input_axis_broadcaster_0;

/delete-node/ axis_broad_port2hdmi_input_axis_broadcaster_0;

/delete-node/ axis_broad_port0hdmi_input_axis_broadcaster_0;

axis_broad_port1_hw_output0: port@1 {

reg = ;

src_to_frmbuf_wr0_from_broad_port1_hwout0: endpoint {

remote-endpoint = ;

};

};

axis_broad_port2_hw_output1: port@2 {

reg = ;

src_to_vpss0_from_broad_port2_hwout1: endpoint {

remote-endpoint = ;

};

};

axis_broad_port0_hw_input: port@0 {

reg = ;

sink_to_broad_in0__from_v_hdmi_rx_ss_0: endpoint {

remote-endpoint = ;

};

};

};

&scaler_portshdmi_input_v_proc_ss_0{

/delete-node/ port@0;

/delete-node/ port@1;

scaler_port1_v_proc_ss_0: port@1 {

/* For xlnx,video-format user needs to fill as per their requirement */

reg = ;

xlnx,video-format = ;

xlnx,video-width = ;

src_to_frmbuf_wr1_from_vpss_0: endpoint {

remote-endpoint = ;

};

};

scaler_port0_v_proc_ss_0: port@0 {

/* For xlnx,video-format user needs to fill as per their requirement */

reg = ;

xlnx,video-format = ;

xlnx,video-width = ;

sink_to_vpss0_from_broad_port2_hwout1: endpoint {

remote-endpoint = ;

};

};

};

上述的devicetree,使用了更短更好理解的標簽名稱。

v_proc_ss的devicetree里,port@0是輸入;port@1是輸出。

broadcaster的devicetree里,port@0是輸入;port@1和port@2是輸出。

另外,V4L2的設備號,根據“xlnx,video”設備里的port順序分配。 如果port@0在port@1后面,那么port@0也會被分配video1; 而port@1也會被分配video0.

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11178

    瀏覽量

    208500
  • 編解碼
    +關注

    關注

    1

    文章

    140

    瀏覽量

    19564
收藏 人收藏

    評論

    相關推薦

    百問網全志系列開發(fā)板攝像頭V4L2編程步驟詳解

    7 攝像頭V4L2編程 7.1 V4L2簡介 ?Video for Linux two(Video4Linux2)簡稱V4L2,是
    發(fā)表于 08-13 09:45

    ESP32-Lyrat V4.3開發(fā)板pipeline_a2dp_source_stream示例項目,藍牙播放mp3時聲音速度過快怎么解決?

    pipeline_a2dp_source_stream播放時,出現(xiàn)如下錯誤信息和告警信息 E (9558) BT_L2CAP: l2cab is_cong_cback_context E (9588
    發(fā)表于 06-28 08:19

    VL53L4CD TOF開發(fā)(2)----修改測量頻率

    VL53L4CD是一款高度集成的飛行時間(ToF)傳感器,廣泛應用于距離測量和接近檢測。為了滿足不同應用場景的需求,合理調整傳感器的測量頻率至關重要。本文旨在介紹如何在VL53L4CD傳感器上修改
    的頭像 發(fā)表于 06-19 14:50 ?1015次閱讀
    VL53<b class='flag-5'>L4</b>CD TOF開發(fā)(<b class='flag-5'>2</b>)----<b class='flag-5'>修改</b>測量頻率

    VL53L4CX TOF開發(fā)(2)----修改測距范圍及測量頻率

    最佳性能。本篇文章將介紹如何通過修改VL53L4CX傳感器的測距范圍和測量頻率來滿足不同應用場景的需求。
    的頭像 發(fā)表于 06-19 10:49 ?806次閱讀
    VL53<b class='flag-5'>L4</b>CX TOF開發(fā)(<b class='flag-5'>2</b>)----<b class='flag-5'>修改</b>測距范圍及測量頻率

    深入理解Camera的整體五層架構

    Linux為視頻采集設備制定了標準的V4L2接口,并在內核中實現(xiàn)了其基礎框架V4L2 Core。用戶空間進程可以通過V4L2接口調用相關設備功能,而不用考慮其實現(xiàn)細節(jié)。
    的頭像 發(fā)表于 04-25 14:41 ?924次閱讀
    深入理解Camera的整體五層架構

    瑞薩RZ/V2L預訓練的人工智能模型

    RZ/V2L還與RZ/G2L封裝和引腳兼容。這使得RZ/G2L用戶可輕松升級至RZ/V2L,以獲得額外的人工智能功能,而無需修改系統(tǒng)配置,從
    發(fā)表于 03-21 13:51 ?350次閱讀
    瑞薩RZ/<b class='flag-5'>V2L</b>預訓練的人工智能模型

    8路SDI/HDMI/MIPI/PCIe-DMA音視頻采集,V4L2驅動應用介紹

    ,在上位機可以使用標準的Linux V4L2視頻驅動,實現(xiàn)多路視頻信號的采集和顯示工作。2 子系統(tǒng)結構 3功能特性1.支持多種視頻接口:SDI、Display Port(DP)、HDMI、DVI、VGA
    發(fā)表于 03-13 13:59

    什么是pipeline?Go中構建流數據pipeline的技術

    本文介紹了在 Go 中構建流數據pipeline的技術。 處理此類pipeline中的故障很棘手,因為pipeline中的每個階段可能會阻止嘗試向下游發(fā)送值,并且下游階段可能不再關心傳入的數據。
    的頭像 發(fā)表于 03-11 10:16 ?506次閱讀

    V4L2視頻采集,基于PCIe的多路視頻采集與顯示子系統(tǒng)

    實時訪問視頻顯示隊列,按照顯示定時脈沖輸出視頻幀。在外部顯示定時模式和超帶寬顯示情況下,支持顯示復制幀操作,后續(xù)視頻可以正常顯示。 對于多路視頻采集與顯示子系統(tǒng),在上位機可以使用標準的Linux V4L2視頻驅動,實現(xiàn)多路視頻信號的采集和顯示工作。
    的頭像 發(fā)表于 02-22 20:05 ?794次閱讀
    <b class='flag-5'>V4L2</b>視頻采集,基于PCIe的多路視頻采集與顯示子系統(tǒng)

    如何在zcu102板卡上創(chuàng)建pipeline呢?

    DisplayPort 1.4 Tx Subsystem core的最簡pipeline就是如它的linux driver wiki page里的figure-4那樣,framebuffer_read+DP+video_phy。
    的頭像 發(fā)表于 12-29 10:09 ?464次閱讀

    【ELF 1開發(fā)板試用】板載資源測試3:OV5640 攝像頭測試

    )OV5640 攝像頭在開發(fā)板的位置如圖。 (2)命令行執(zhí)行v4l2-ctl-d /dev/video0 --all,顯示攝像頭參數(如下圖)。這里,V4L2(
    發(fā)表于 12-15 22:49

    基于STM32CUBEMX驅動TOF模塊VL53l0x(2)----修改設備地址

    本章主要介紹如何修改VL53L0X傳感器的I2C地址,并成功驅動設備以使用新的地址。VL53L0X是一種多功能、高性能的接近和環(huán)境光傳感器,常用于測量物體與傳感器之間的距離、檢測物體的
    的頭像 發(fā)表于 12-01 15:46 ?1243次閱讀
    基于STM32CUBEMX驅動TOF模塊VL53<b class='flag-5'>l</b>0x(<b class='flag-5'>2</b>)----<b class='flag-5'>修改</b>設備地址

    【昉·星光 2 高性能RISC-V單板計算機體驗】+5、UVC攝像頭圖像采集

    USB org標準之一。V853開發(fā)板內核沒有開啟UVC驅動,需要自行開啟,重新編譯。V4L2Video for linux2的簡稱,為linux中關于視頻設備的內核驅動。在Linu
    發(fā)表于 11-30 21:05

    【昉·星光 2 高性能RISC-V單板計算機體驗】攝像頭體驗

    系統(tǒng)下我們可以直接下載v4l2-utils。 插入USB攝像頭,沒有任何提示,不過通過v4l2命令可以進行測試。我這里看到多了一個media0的設備。 手冊中也有提到是怎么回事。 然后看我們設備
    發(fā)表于 11-15 22:01

    深入學習Linux攝像頭v4l2應用編程

    vl42是video for Linux 2的縮寫,是一套Linux內核視頻設備的驅動框架,該驅動框架為應用層提供一套統(tǒng)一的操作接口(一系列的ioctl)
    的頭像 發(fā)表于 11-15 09:28 ?1394次閱讀
    深入學習Linux攝像頭<b class='flag-5'>v4l2</b>應用編程