一 概述

V4L2(全称Video For Linux Two)是Linux下的视频驱动框架,为Linux视频驱动和应用程序提供统一的编程规范。

V4L2硬件系统包含两部分:SoC视频模块和外部Decoder

SoC视频模块主要功能:采集并且处理视频信号,通过DMA引擎传输数据到DDR

外部Decoder主要功能:转换视频信号,比如将HDMI信号转换为BT1120信号

注意:外部Decoder通常挂载到主芯片I2C总线或者SPI总线上。

二 V4L2实例重要属性

slave-mode 设置device工作模式为从模式,通常将SoC视频模块设置为slave-mode,外部Decoder设置为master-mode,由外部Decoder输出同步信号给SoC视频模块

bus-width 数字信号位宽,常用值:8,16,24

注意:bus-width属性只适用于并行数字信号

hsync-active 行同步信号有效电平,0表示低电平有效,1表示高电平有效

vsync-active 帧同步信号有效电平,0表示低电平有效,1表示高电平有效

field-even-active 表示传输偶场数据时,FID信号电平

0表示传输偶场数据时,FID信号为低电平

1表示传输偶场数据时,FID信号为高电平

data-active 数据使能信号有效电平,1表示数据使能信号高电平有效,0表示数据使能信号低电平有效

pclk-sample 表示像素时钟下降沿采样数据还是上升沿采样数据

0表示下降沿采样数据,1表示上升沿采样数据

channels 输入端口视频流ID

注意:

1使用分离同步信号采集视频,需要指定hsync-active、vsync-active、field-even-active中任意一个属性

2使用内嵌同步信号采集视频,需要指定channels属性

三 具体实例详解

V4L2典型实例1:使用分离同步信号采集视频

设备树之V4L2实例

                 图1

设备树之V4L2实例

                 图2

上图1为SoC视频模块设备树结点信息,工作模式为从模式

上图2为外部Decoder设备树结点信息,工作模式为主模式

即由adv7842芯片输出分离同步信号给vin5a。

由于外部Decoder通常挂载到主芯片I2C总线或者SPI总线上,因此adv7842结点是I2C结点的子结点。

hsync-active = <1>; 表示行同步信号高电平有效

vsync-active = <1>; 表示帧同步信号高电平有效

data-active = <1>; 表示数据使能信号高电平有效

pclk-sample = <0>; 表示像素时钟下降沿采样数据

V4L2典型实例2:使用内嵌同步信号采集视频

设备树之V4L2实例

                图3

设备树之V4L2实例

                图4

上图3为SoC视频模块设备树结点信息,工作模式为从模式

上图4为外部Decoder设备树结点信息,工作模式为主模式

即由tvp5158芯片输出内嵌同步信号给vin6a。

channels属性表示输入端口视频流ID,从上图4可知vin6a端口包含4个视频流,ID为0、2、4、6。

那么问题来了,如果vin6a端口只包含1个视频流,如何配置channels属性?

答:

channels = <0>;

详细实例如下图所示:

设备树之V4L2实例

                 图5