1 修改V4L2的Video Pipeline的devicetree-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取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。

硬件设计

有项目需要对输入的视频,既需要对原始视频做编解码,也需要缩放后再做编解码。于是创建了下面的硬件设计。

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.

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209317
  • 编解码
    +关注

    关注

    1

    文章

    140

    浏览量

    19612
收藏 人收藏

    评论

    相关推荐

    百问网全志系列开发板摄像头V4L2编程步骤详解

    7 摄像头V4L2编程 7.1 V4L2简介 ​Video for Linux two(Video4Linux2)简称V4L2,是
    发表于 08-13 09:45

    ESP32-Lyrat V4.3开发板pipeline_a2dp_source_stream示例项目,蓝牙播放mp3时声音速度过快怎么解决?

    pipeline_a2dp_source_stream播放时,出现如下错误信息和告警信息 E (9558) BT_L2CAP: l2cab is_cong_cback_context E (9588
    发表于 06-28 08:19

    lyrat-mini-v1.2使用例程pipeline_wav_amr_sdcard录音没有声音怎么解决?

    lyrat-mini-v1.2使用例程pipeline_wav_amr_sdcard录音没有声音,SD卡中有文件,但是没有声音怎么解决啊
    发表于 06-28 06:43

    VL53L4CD TOF开发(2)----修改测量频率

    VL53L4CD是一款高度集成的飞行时间(ToF)传感器,广泛应用于距离测量和接近检测。为了满足不同应用场景的需求,合理调整传感器的测量频率至关重要。本文旨在介绍如何在VL53L4CD传感器上修改
    的头像 发表于 06-19 14:50 1147次阅读
    VL53<b class='flag-5'>L4</b>CD TOF开发(<b class='flag-5'>2</b>)----<b class='flag-5'>修改</b>测量频率

    VL53L4CX TOF开发(2)----修改测距范围及测量频率

    最佳性能。本篇文章将介绍如何通过修改VL53L4CX传感器的测距范围和测量频率来满足不同应用场景的需求。
    的头像 发表于 06-19 10:49 915次阅读
    VL53<b class='flag-5'>L4</b>CX TOF开发(<b class='flag-5'>2</b>)----<b class='flag-5'>修改</b>测距范围及测量频率

    让YUV2演示在FX3的内存上运行,启动数据流时却无法正常工作,应用程序会崩溃,为什么?

    效(我看到了我的 4 帧样本),但启动数据流时却无法正常工作,应用程序会崩溃。 在 linux 上运行时,v4L2 报告说它根本不起作用: VIDIOC_STREAMON returned -1
    发表于 05-28 08:18

    深入理解Camera的整体五层架构

    Linux为视频采集设备制定了标准的V4L2接口,并在内核中实现了其基础框架V4L2 Core。用户空间进程可以通过V4L2接口调用相关设备功能,而不用考虑其实现细节。
    的头像 发表于 04-25 14:41 1446次阅读
    深入理解Camera的整体五层架构

    【米尔-芯驰D9360商显板试用评测】使用ffmpeg实现远程视频监控

    (简称V4L2),是linux中关于视频设备的内核驱动 -s 640*480为分辨率 -i /dev/video8为摄像头 -f flv rtmp://192.168.3.180:10035/live为以
    发表于 04-11 13:07

    瑞萨RZ/V2L预训练的人工智能模型

    RZ/V2L还与RZ/G2L封装和引脚兼容。这使得RZ/G2L用户可轻松升级至RZ/V2L,以获得额外的人工智能功能,而无需修改系统配置,从
    发表于 03-21 13:51 401次阅读
    瑞萨RZ/<b class='flag-5'>V2L</b>预训练的人工智能模型

    8路SDI/HDMI/MIPI/PCIe-DMA音视频采集,V4L2驱动应用介绍

    ,在上位机可以使用标准的Linux V4L2视频驱动,实现多路视频信号的采集和显示工作。2 子系统结构 3功能特性1.支持多种视频接口:SDI、Display Port(DP)、HDMI、DVI、VGA
    发表于 03-13 13:59

    什么是pipeline?Go中构建流数据pipeline的技术

    本文介绍了在 Go 中构建流数据pipeline的技术。 处理此类pipeline中的故障很棘手,因为pipeline中的每个阶段可能会阻止尝试向下游发送值,并且下游阶段可能不再关心传入的数据。
    的头像 发表于 03-11 10:16 600次阅读

    全志D1-H开发板USB摄像头拍照Demo

    Video4Linux2(Video for Linux Two, 简称V4L2)是Linux中关于视频设备的驱动框架,为上层访问底层的视频设备提供统一接口。V4L2主要支持三类设
    发表于 03-04 10:48

    V4L2视频采集,基于PCIe的多路视频采集与显示子系统

    实时访问视频显示队列,按照显示定时脉冲输出视频帧。在外部显示定时模式和超带宽显示情况下,支持显示复制帧操作,后续视频可以正常显示。 对于多路视频采集与显示子系统,在上位机可以使用标准的Linux V4L2视频驱动,实现多路视频信号的采集和显示工作。
    的头像 发表于 02-22 20:05 948次阅读
    <b class='flag-5'>V4L2</b>视频采集,基于PCIe的多路视频采集与显示子系统

    【飞凌OK113i-S开发板试用】基于飞凌嵌入式OK113i网页视频监控项目

    freetype-2.4.10]$ make &amp;&amp; make install5.V4L2摄像头编程 V4L2Video for linux2
    发表于 01-09 11:31

    如何在zcu102板卡上创建pipeline呢?

    DisplayPort 1.4 Tx Subsystem core的最简pipeline就是如它的linux driver wiki page里的figure-4那样,framebuffer_read+DP+video_phy。
    的头像 发表于 12-29 10:09 528次阅读