一 概述
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:使用分离同步信号采集视频
图1
图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:使用内嵌同步信号采集视频
图3
图4
上图3为SoC视频模块设备树结点信息,工作模式为从模式
上图4为外部Decoder设备树结点信息,工作模式为主模式
即由tvp5158芯片输出内嵌同步信号给vin6a。
channels属性表示输入端口视频流ID,从上图4可知vin6a端口包含4个视频流,ID为0、2、4、6。
那么问题来了,如果vin6a端口只包含1个视频流,如何配置channels属性?
答:
channels = <0>;
详细实例如下图所示:
图5