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.

审核编辑:郭婷

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

    关注

    88

    文章

    11871

    浏览量

    219965
  • 编解码
    +关注

    关注

    1

    文章

    151

    浏览量

    20680
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    VL53L3CX小板开发(2)----修改测距范围及测量频率

    VL53L3CX是一款高度集成的飞行时间(ToF)传感器,广泛应用于距离测量和接近检测。为了满足不同应用场景的需求,合理调整传感器的测量频率至关重要。本文旨在介绍如何在VL53L3CX传感器上修改测量频率,以优化其性能和功耗。
    的头像 发表于 05-30 16:01 955次阅读
    VL53<b class='flag-5'>L</b>3CX小板开发(<b class='flag-5'>2</b>)----<b class='flag-5'>修改</b>测距范围及测量频率

    i.MX8MP在 V4L2 和 OpenGL 之间共享 G2D 缓冲区时出现性能问题求解

    I am facing an issue when sharing a G2D buffer from V4L2 directly to OpenGL (GPU GC7000UL) with a
    发表于 04-22 07:19

    2N7002L2V7002L小信号N沟道MOSFET的全面解析

    2N7002L2V7002L小信号N沟道MOSFET的全面解析 作为电子工程师,在设计电路时,MOSFET是我们常用的器件之一。今天就来详细解析一下 onsemi 公司的 2N7002L
    的头像 发表于 04-21 17:25 657次阅读

    VisionFive 不支持.mp4视频吗?

    。 而且,我安装了Qt V4L2,它可以检测摄像头,但不能显示摄像头的视图。但是 Camorama 网络摄像头查看器可以显示相机的视图。
    发表于 03-31 06:40

    使用 i.MX8MP GStreamer Pipeline 进行 12MP 捕获中的图像伪影,伪影在最终图像中显示为损坏,怎么解决?

    GStreamer 管道: descr = g_strdup_printf("v4l2src name=video_source ""device
    发表于 03-27 07:32

    如何通过HDMI(LT8912)显示OS08A20摄像机拍摄的视频呢?

    GST_PIPELINE grammar.y:1138:gst_parse_perform_link:无法将 v4l2src0 链接到 videoconvert0,这两个元素都不能处理 caps
    发表于 03-10 08:20

    Renesas RZ/G2L, RZ/V2L SMARC模块板硬件设计解析

    Renesas RZ/G2L, RZ/V2L SMARC模块板硬件设计解析 在嵌入式系统开发领域,Renesas的RZ/G2L和RZ/V2L SMARC模块板因其高性能和丰富的功能,成
    的头像 发表于 12-30 09:35 2032次阅读

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

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

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

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

    Hbirdv2移植到Nexys4 DDR和Nexys Video开发板

    : 1. 添加源文件 2. 添加时钟 3. 修改system.v,留下需要的顶层接口 4. 修改约束文件
    发表于 10-31 07:26

    【飞凌OK-MX9596-C开发板试用】②体验WIFI、蓝牙、音频、视频,为AI应用打下基础

    。 安装ffmpeg的方式不再赘述,v4l2系统自带了。 使用以下指令录制视频,按键盘Ctrl + C退出录制。 ffmpeg -f v4l2 -framerate 30 -video
    发表于 10-21 18:17

    【上海晶珩睿莓1开发板试用体验】2、视频监控监控系统

    摄像头可支持的像素格式 / 分辨率 / 帧率 v4l2-ctl --list-formats-ext -d /dev/video0 用 ffmpeg 抓一帧看是否能成功 ffmpeg -f v4l2
    发表于 09-14 19:16

    【HZ-RK3568开发板免费体验】基于USB摄像头拍照

    开发环境: 主机:Ubuntu 20.04 开发板:合众HZ-RK3568开发板 Video for Linuxtwo(Video4Linux2)简称V4L2,是V4L的改进版。
    发表于 08-19 22:07

    FX3 UVC 无法与 Ubuntu 24.04 Cheese 或 Snapshot 相机应用程序配合使用,怎么处理?

    添加了来自 VLC 的日志以供比较。根据日志,似乎 PipeWire 或 UVC 驱动程序存在一些问题。 我一直在做一些调试,发现对于 Ubuntu 视频有 3 个类似的控制视频的组件,V4L2
    发表于 07-16 06:37

    ElfBoard技术贴|如何在ELF 2开发板上部署v4l2loopback

    在嵌入式系统开发领域,虚拟视频设备技术正成为实现多媒体功能创新的关键技术支撑。v4l2loopback作为一款功能强大的Linux内核模块,可以为视频流处理提供灵活的路由架构,在远程协作、实时流媒体
    的头像 发表于 06-05 14:24 2321次阅读
    ElfBoard技术贴|如何在ELF <b class='flag-5'>2</b>开发板上部署<b class='flag-5'>v4l2</b>loopback