在Xilinx平台使用V4L2框架编程实现视频输入

FPGA开发圈 2022-09-14 15:50
  1. 1、V4L2框架概述

  2. V4L2是Video for Linux2的简称,为Linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写。


  3. 1.1 V4L2设备应用层流程

  4.    注册的设备节点有/dev/video和/dev/v4l2-subdev;其应用层操作video设备主要流程如下:

  5.    1) 通过打开video设备设置video参数;

  6.    2) 设置采集方式;

  7.    3) 将数据取出、处理、放回,可循环处理;

  8.    4) 完成相应的任务后关闭。


  9. 1.2 内核V4L2模块

        应用层流程可以通过打开文件一样打开视频输入设备,并且配置设备相关参数, 这是由于内核相关模块做了很多基础工作。跟V4L2相关的模块如下图所示:

 

                   图1 V4L2基本框架

      1.3 典型捕获管道:

                          图2 Xilinx视频典型捕获管道

  1.   1、硬件视图

  2.       1)多种组合可以开发一个捕获管道;

  3.       2)使用标准化接口(AXI总线接口)在管道中缝合多个IP。

  4.   2、软件视图

  5.       1)复杂性存在于软件级别,以支持多种组合;

  6.       2)由于没有任何标准的方法来配置管道中的不同元素,这给软件开发人员带来了更大的复杂性。


  7.      1.4  具有流媒体和/或内存接口的基于帧的视频管道视频捕获设备:

  8.     1)视频存储器到存储器设备;

  9.     2)视频输出设备(无图形);

  10.     3)DMABUF:0拷贝缓冲区共享Media controller;

  11.     4)描述逻辑拓扑和数据流;

  12.     5)多媒体库 GStreamer、FFMPEG、OpenCV、OpenMAX、LibAV、VLC媒体播放器、MPlayers。


  13.                   图3 V4L2框架对应设备


  14.   2、 Xilinx 视频编解码

     在使用gst命令创建pipeline 完成视频输入到编码输出的过程如下:

           图4 Xilinx 视频输入设备及相关内核模块

     当使用gst 命令处理HDMI视频输入时,我们会使用下面的命令:gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=4 ! video/x-raw\(memory:XLNXLL\), format=NV16_10LE32, width=3840, height=2160, framerate=60/1 ! omxh265enc num-slices=8 periodicity-idr=240 cpb-size=500 gdr-mode=horizontal initial-delay=250 control-rate=low-latency prefetch-buffer=true target-bitrate=25000 gop-mode=low-delay-p ! video/x-h265, alignment=nal ! rtph265pay ! udpsink buffer-size=60000000 host=192.168.25.89 port=5004 async=false max-lateness=-1 qos-dscp=60 max-bitrate=120000000 -v
      其中/dev/video0设备对应我们的HDMI输入,使用omxh265enc进行编码,在使用rtph265pay完成RTP封装后,在通过udpsink使用udp将编码后的码流发送出去。这个实现我们可以通过V4L2接口来完成,本身gst 插件也是调用了V4L2接口完成,下面是使用V4L2接口完成上述工作的过程。
  1.     2.1 应用程序通过V4L2接口采集视频数据步骤

  2.      1)打开视频设备文件,通过视频采集的参数初始化, 通过V4L2接口设置视频图像属性;

  3.      2)申请若干视频采集的帧缓存区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;

  4.      3)将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;

  5.       4)驱动开始视频数据的采集,应用程序从视频采集输出队列中取出帧缓冲区,处理后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据。最后停止视频采集。 

              流程图如下所示

  1.    2.2 V4L2 ioctl控制符

  2.   1)VIDIOC_QUERYCAP    查询设备的属性;

  3.   2)VIDIOC_ENUM_FMT 帧格式;

  4.   3)VIDIOC_S_FMT 设置视频帧格式,对应struct v4l2_format;

  5.   4)VIDIOC_G_FMT 获取视频帧格式等;

  6.   5)VIDIOC_REQBUFS 请求/申请若干个帧缓冲区,一般为不少于3个;

  7.   6)VIDIOC_QUERYBUF 查询帧缓冲区在内核空间的长度和偏移量;

  8.   7)VIDIOC_QBUF 将申请到的帧缓冲区全部放入视频采集输出队列;

  9.   8)VIDIOC_STREAMON 开始视频流数据的采集;

  10.   9)VIDIOC_DQBUF 应用程序从视频采集输出队列中取出已含有采集数据的帧缓冲区;

  11.   10)VIDIOC_STREAMOFF 应用程序将该帧缓冲区重新挂入输入队列。


  12.    2.3 控制字符解析和使用用例:

       1)VIDIOC_QUERYCAP-------->struct v4l2_capability
         例如:
         if ((cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) == V4L2_CAP_VIDEO_CAPTURE)
           {
                    printf("Device %s: supports capture.\n", FILE_VIDEO);
            }
      if ((cap.capabilities & V4L2_CAP_STREAMING) == V4L2_CAP_STREAMING)
         {
          printf("Device %s: supports streaming.\n", FILE_VIDEO);
         }

    2)VIDIOC_ENUM_FMT-------->struct v4l2_fmtdesc

       //通过这个结构体,可以显示对应的摄像头所支持视频帧格式。例如

         struct v4l2_fmtdesc fmtdesc;
         fmtdesc.index = 0;
         fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 
         printf("Supportformat:/n");
         while(ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) != -1)
         {
               printf("/t%d.%s/n",fmtdesc.index+1,fmtdesc.description);
               fmtdesc.index++;
          }
     3)VIDIOC_G_FMT-------->struct v4l2_format 查看视频帧格式
     4)VIDIOC_S_FMT 设置视频帧格式
     5) VIDIOC_CROPCAP-------->struct v4l2_cropcap结构体
     6) 设置Stream信息,主要设置帧率
              VIDIOC_G_PARM&VIDIOC_S_PARM-------->struct v4l2_streamparm
      7)设置Stream信息,主要设置帧率
               VIDIOC_G_PARM&VIDIOC_S_PARM-------->struct v4l2_streamparm
      8)设置Stream信息,主要设置帧率
              VIDIOC_G_PARM&VIDIOC_S_PARM-------->struct v4l2_streamparm
       9)申请和管理缓冲区         
                  VIDIOC_REQBUFS-------->struct v4l2_requestbuffers
      10) 应用程序从视频采集输出队列中取出已含有采集数据的帧缓冲区
          VIDIOC_QUERYBUF-------->struct v4l2_buffer
           应用程序从视频采集输出队列中取出已含有采集数据的帧缓冲区
            intioctl(int fd, VIDIOC_DQBUF, struct v4l2_buffer *argp)
       11) 开始视频采集和关闭视频采集
            VIDIOC_STREAMON&VIDIOC_STREAMOFF
           int ioctl(int fd, VIDIOC_STREAMON, const int *argp)
           int ioctl(int fd, VIDIOC_STREAMOFF, const int *argp)
         12) 应用程序将该帧缓冲区重新挂入输入队列VIDIOC_QBUF
            intioctl(int fd, VIDIOC_QBUF, struct v4l2_buffer *argp)

3、Xilinx V4L2 Demo


                     图5:Xilinx V4L2 demo


          图6:Xilinx V4L2 + CTRLSW encode

  1.       3.1 Xilinx使用V4L2实现视频输入的代码

  2.         


  3.       


3.2 应用程序将帧缓冲区重新排入输入队列

       ioctl(fd_v4l2, VIDIOC_QBUF, &buf)


  1.    3.3   开始视频流数据的采集

  2.   ioctl(fd_v4l2, VIDIOC_STREAMON, &type)


   

3.4 应用程序将视频采集输出队列中取出已含有采集数据的帧缓冲区           ioctl(fd_v4l2, VIDIOC_DQBUF, &buf)

  

3.5 停止视频采集
     ioctl(fd_v4l2, VIDIOC_STREAMOFF, &tpe)

上面为主要功能函数介绍,具体代码等等请参考如下链接:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1010303367/Zynq+UltraScale+MPSoC+VCU+TRD+2020.2+-+Xilinx+Low+Latency+PS+DDR+NV12+HDMI+Audio+Video+Capture+and+Display

      如果您在Xilinx Video for Linux (V4L2)方面有问题,欢迎联系:

                 simonyang@comtech.cn

          charlesxu@comtech.cn

FPGA开发圈 这里介绍、交流、有关FPGA开发资料(文档下载,技术解答等),提升FPGA应用能力。
评论
  • 文:杜杰编辑:侯煜当地时间7月28日,美国特朗普政府落地最新科技封锁政策,美国联邦通信委员会(FCC)正式更新《受管制清单》,新增两大类设备——境外生产的先进机器人设备、境外生产的联网电力逆变器。FCC在官方情况说明书中明确,该类境外制造产品,“会对美国国家安全或美国民众的人身安全构成无法承受的风险”。本次新规设置明确豁免机制:经美国国防部(DoW)、电力逆变器品类经美国国土安全部(DHS)审核并授予“有条件批准”,认定对应设备品类不存在重大安全风险,即可获得准入豁免。同时政策严格执行新老划断原
    华尔街科技眼 2026-08-03 21:28 325浏览
  • 摘要在防爆电气设计中,只参照芯数选型而忽略额定载流量,长期满负荷运行会出现插头发热、接触面氧化、IP67 密封受热老化等问题。结合常用 3 针 3 孔、4 芯、5PIN、8PIN 圆形防爆连接器,制作分级电流参数对照表,区分冷压免焊接、焊接两种接线结构的安全载流数值,设置合理电流冗余系数,搭配使用环境修正参数,规范防爆接近开关连接器、防爆法兰插座的选型计算方式。关键词圆形防爆连接器,载流参数表,防爆法兰插座,防爆端子接头,IP67 防爆防水接插件1 产品概述圆形防爆连接器触点载流能力由插针直径、
    kyfbest科迎法电气 2026-08-03 09:18 128642浏览
  • 产品使用18V供电,配套4串锂离子电池,需要设计一个充电器。因为输入18V,电池最高 16.8V,压差仅 1.2V。因为压差太小。使用开关型的充电控制芯片不稳定。尝试自行设计一个。整体采用分立三极管 + TL431架构,分4个功能单元:使能控制回路、限流环路、TL431 精密恒压反馈环路、PNP 功率管主功率输出回路;实现完整锂电池充电逻辑。使能控制回路按键按下:5V 电压经 R12 (2kΩ) 送入 NPN 管 Q3 基极,Q3 饱和导通,对地拉低 R1、R2 组成的分压控制节点电位;该节点直
    southcreek 2026-08-07 13:45 316浏览
  • 在前六期中,我们已经分别讨论了 CRA 的适用范围、整体影响、漏洞通报义务、风险评估与技术文档证据链、第三方组件与 SBOM 供应链治理,以及产品上市后的支持期、安全更新、用户说明和终止支持管理。到这里,企业已经能够回答几个核心问题:产品是否落入 CRA 适用范围,产品由哪些组件构成,企业如何证明自己在设计、开发和上市前采取了必要的安全措施,以及产品上市后如何持续维护和安全下线。但对于真正准备落地 CRA 合规的企业来说,还有一个更现实的问题:CRA 的法规条文相对原则化,企业应当如何把“网络安
    虹科云科技 2026-08-03 16:51 149221浏览
  • 在EMC测试过程中,传导发射(Conducted Emission,CE)超标是工程师最常遇到的问题之一。更令人头疼的是,同样的超标曲线背后,可能对应着完全不同的干扰机理:有的是差模噪声沿电源回路传播,有的是共模电流通过寄生路径耦合,还有些问题甚至并非来自电源本身,而是负载、电缆布局或接地结构引起的连锁反应。 · 150kHz~1MHz 超标:多为差模噪声为主,干扰沿火线-零线回路传输。 · 1MHz~30MHz 超标:通常共模噪声占主导,干扰通过火线/零线对地回路传播。 如果条件允许,用电流探
    誉磁电磁兼容EMC 2026-07-31 18:45 501浏览
  •        很多人只见过封装在SMD外壳里的小尺寸晶振,却不知道一颗2016、1612甚至1210封装的微型石英晶振,从一块巴掌大的石英原矿,到最终能稳定起振的成品,要经过十几道精密工序。它内部的石英晶片厚度最薄不到20微米,比普通A4纸的1/5还薄,整个生产过程里哪怕0.1微米的误差,都会直接废掉整批产品,这也是小尺寸晶振过去长期依赖进口,国内厂商花了十几年才啃下量产硬骨头的核心原因。1. 原石定向切割:0.01度的角度误差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 374浏览
  • 做蓝牙音箱的工程师大概都碰过这个局面。产品要连手机放歌,要本地播开机提示音和按键音,还要接 App 做配网和状态上报。三件事拆开,早先的常规做法是音频蓝牙一颗料、数传蓝牙一颗料、本地播放再挂一颗小 MCU 加一片 Flash。板子越画越大,BOM 越算越贵,待机电流和固件工作量也跟着涨。WT2605C 出来以后,这套需求可以集成到一颗芯片,就是 WT2605C-32N,该芯片采用QFN32 封装,4×4 毫米,把音频蓝牙、BLE 数传和 MP3 本地播放三样全包了。对蓝牙音箱来说,最实在的好处就
    唯创知音语音芯片 2026-08-06 15:14 284浏览
  • 导语在现代高速数字电路设计中,信号的完整性已不仅是理想波形推演,而是一场与物理非理想特性正面博弈的工程实践。滤波器芯片作为净化传输链路的关键屏障,其核心挑战在于:能否有效识别并滤除那些隐匿在电平跳变过程中的亚纳秒级瞬态脉冲干扰,这类干扰持续极短,却足以在高速链路中引发误触发。然而,传统函数发生器受限于采样率与边沿速率,根本无法忠实复现如此狭窄且陡峭的异常波形。针对此困境,德思特TS-AWG7000系列任意波形发生器以17 GS/s采样率与50 ps原生边沿速度,为瞬态脉冲提供精细刻画,配合SPG
    德思特测试测量 2026-08-05 14:06 5浏览
  • 在物联网从“万物互联”迈向“万物智联”的进程中,LTE Cat.1凭借其在速率、成本与网络覆盖之间的完美平衡,正成为中低速物联网市场的绝对主力。随着2G/3G网络的逐步退网以及新国标对终端设备智能化、定位功能的强制要求,Cat.1模组迎来了爆发式的增长窗口。在这一关键节点,基于华为海思Hi2131芯片设计的LTE Cat.1模组,凭借其在能效、射频、架构及物理规格上的底层创新,成功打破了“高性能必高功耗”的传统魔咒,为行业提供了极具竞争力的连接最优解。核心技术优势:重塑Cat.1能效与连接标杆海
    用户1778981989717 2026-08-05 21:04 169浏览
  • ​摘要:低价大流量卡正全面退市,政策收紧已成定局。面对传统号卡的不确定性,随身WiFi凭借稳定连接、多设备共享、独立设备和灵活套餐等优势,成为务实可靠的备选方案。1、流量卡黄金时代要结束了通信行业正迎来一场前所未有的“地震式”调整——曾让无数用户追捧的低价大流量卡,正在全速退出各大平台。这早已不是一次普通的竞合,而是一场趋势性的行业洗牌。回望过去,19元200G的神卡,那时真是“睡着都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像随便刷、随便看,流量自由触手可及。可如今,回头再看,那种
    爱上电路设计 2026-08-03 10:21 128869浏览
  •                                                                        
    广州铁金刚 2026-08-06 17:44 100327浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦