camera、sensor,v4l2基础知识

本文详细介绍了摄像头的工作原理,包括镜头、传感器、ISP和DSP的角色,以及CCM的关键技术。同时,讲解了V4L2驱动的相关内容,如帧同步逻辑、ioctl接口、V4L2驱动中的核心结构体以及V4L2工具的使用方法。还涉及到Media子系统和pipeline的概念,阐述了多媒体设备的链接方式。
摘要由CSDN通过智能技术生成

结构和工作原理

(1)、工作原理:物体通过镜头(lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。

(2)、CCM 包含四大件: 镜头(lens)、传感器(sensor)、软板(FPC)、图像处理芯片(DSP)。决定一个摄像头好坏的重要部件是:镜头(lens)、图像处理芯片 (DSP)、传感器(sensor)。CCM的关键技术为:光学设计技术、非球面镜制作技术、光学镀膜技术。

Cmos内部结构

帧同步的逻辑关系

PCLK:是像素点同步时钟信号。也就是每个PCLK对应一个像素点。

VSYNC:是场同步信号。以高电平有效为例,VSYNC置高直到被拉低,这个区段所输出的所有影像数据组成一个frame。

HSYNC:是行同步信号。就是在告诉接收端:“HSYNC”有效时段内接收端接收到的所有的信号输出属同一行。

若要显示一个640x480的画面,显示不正确的时候,若量PCLK,VSYNC和HSYNC这三个信号,就可以知道这三个信号配置是否有问题,一般来讲,这种情况是有公式的:

VSync = HSYNC x 320;

Hsync = PCLK x 640;

软硬件的完整流程:

1.摄像头的初始化(输出格式、分辨率、输出速率)

2.使能摄像头接入主控板卡中的物理通道(mipi、cif也就是dvp;摄像头的dvp口传输协议和lcd ttl口协议差不多。)

3.使能主控板卡中的ISP(图像信号处理模块)、并让ISP知道当前有效接入的摄像头是哪一个(因为可以多个接入,但只能一个有效)。

4.告诉ISP输进来的数据如何处理(颜色空间转换、缩放、裁剪、旋转等)、经由那个通道输出到内存/显存(MP主通道、SP自身通道)。SP一般用来预览图片,SP图片的最大分辨率比MP低。

5.输出到内存

V4l2的采集过程(应用程序):

1)     打开设备,获得文件描述符;

2)     设置图片格式;

3)     分配缓冲区;

4)     启动采集过程,读取数据;

5)     停止采集,关闭设备。

从V4L2简单框图可以看出,V4L2是一个字符设备,而V4L2的大部分功能都是通过设备文件的ioctl导出的。

一般来说,摄像头驱动需要实现与向核心层提交下面十几个ioctl接口

VIDIOC_REQBUFS:分配内存

VIDIOC_QUERYCAP:查询驱动功能

VIDIOC_ENUM_FMT:获取当前驱动支持的视频格式

VIDIOC_S_FMT:设置当前驱动的频捕获格式

VIDIOC_G_FMT:读取当前驱动的频捕获格式

VIDIOC_TRY_FMT:验证当前驱动的显示格式

VIDIOC_CROPCAP:查询驱动的修剪能力

VIDIOC_S_CROP:设置视频信号的边框

VIDIOC_G_CROP:读取视频信号的边框

VIDIOC_QBUF:把数据放回缓存队列

VIDIOC_DQBUF:把数据从缓存中读取出来

VIDIOC_STREAMON:开始图像捕获

VIDIOC_STREAMOFF:结束图像捕获

1.V4L2 驱动中的核心结构体

v4l2_device;一个v4l2的总设备。

v4l2_sbudev:来描述camera等sensor设备,一般是指挂接在总线(i2c)上的摄像头

video_device:实际和处理器采集口相关的配置,一般该设备会完成注册以/dev/video0,video1的字符设备注册的形式暴露给应用层。

v4l-utils工具包用法

v4l-utils工具包中的:v4l2-ctl实现抓图。

V4l2-ctl 工具则是针对/dev/video0,/dev/video1 等 video设备,它在 video 设备上进行 set_fmt,reqbuf(申请buf),qbuf(送buf回队列),dqbuf(从队列取出buf),stream_on,stream_off 等一系列操作。

n为4的倍数(0,1,2,3...)

/dev/videon+0:视频输出 SP主通道

/dev/videon+1:视频输出 MP自身通道

/dev/videon+2:3A统计

/dev/videon+3:3A参数设置

打开v4l2中的ioctl调用开关:

echo 0x1f > /sys/class/video4linux/video0/dev_debug

echo 0x1f > /sys/class/video4linux/video1/dev_debug

echo 0x1f > /sys/class/video4linux/video2/dev_debug

echo 0x1f > /sys/class/video4linux/video3/dev_debug

设置 fmt 并抓帧:

板端:

v4l2-ctl -d /dev/video0 --set-selection=target=crop,width=1920,height=1080 --set-fmt-video=width=1280,height=720,pixelformat=NV21 \

--stream-mmap=3 --stream-to=mp.out --stream-count=1 --stream-poll

参数的说明:

    -d,指定操作对象为/dev/video0 设备。

    --set-selection=target=crop 设置裁剪功能,width=1920,height=1080 裁剪后的大小1920x1080

    --set-fmt-video,指定了宽高及 pxielformat。NV12,即用 FourCC 表示的 pixelformat。FourCC 编码详见下文 FourCC。

    --stream-mmap,指定 buffer 的类型为 mmap,即由 kernel 分配的物理连续的或经过iommu 映射的 buffer。

    --stream-to,指定帧数据保存的文件路径

    --stream-count,指定抓取的帧数, 不包括--stream-skip 丢弃的数量

--stream-poll,该选项指示 v4l2-ctl 采用异步 IO,即在 dqbuf 前先用 select 等等帧数据完成,从而保证 dqbuf 不阻塞。否则 dqbuf 将会阻塞直到有数据帧到来。

将mp.out推到ubantu上用mplayer打开它。

ubantu端:

W=1280; H=720; mplayer mp.out -loop 0 -demuxer rawvideo -fps 25 -rawvideo w=${W}:h=${H}:size=$((${W}*${H}*3/2)):format=nv21

    注意了抓图操作的pixelformat和mplayer播放的format需要一致。

前提是摄像头驱动和摄像头本身要支持nv12,分辨率也同理。

Media子系统和pipeline汇总

在rk 9.0之前还没有用meidia子系统,为了解决多媒体设备的复杂性和流动性,把多媒体各个模块树状链接,可以很方便的操作各个链接点的格式分辨率等。但是这样需要代码来支持,所以就用了media子系统,虽然增加了大段代码,但是这样操作更加灵活。

Media子系统是一种pipeline形式

Rk从sensor到ddr设定了4个设备如下

sensor —> DPHY —> isp —> stream

其中每个设备都认为是一个entity,是一个节点。每个都包含一个或者多个pads,可以认为是各个分叉,link就是将各个分叉pad链接起来,也就是谁链接谁。谁是源端,谁是目的端。

根据上图:

sensor有ov5695和ov2659,它们只有一个pad,因为只能输出

DPHY 就是mipi dphy 接收sensor数据,输出输出到isp,所有有2个pads

Isp 因为isp除了要接收dphy进来的数据,还要接收input参数,输出统计信息,最后将数据输出到 mainpath和selfpath(这个不清楚是否rkisp独有),4个pads

Mp和sp 接收isp处理好的数据 所以只有一个pad。

QT V4L2是指QT开发平台上的V4L2(Video for Linux 2)视频驱动程序,用于支持Linux平台上的低层次音频和视频设备的接口规范。QT是一款跨平台的C++图形应用程序开发框架,在移动平台、桌面平台、嵌入式系统等各种场景下都得到了广泛应用。V4L2是Linux下用于处理视频设备(例如摄像头)的API,同时也支持音频设备。V4L2可以直接调用Linux内核中的设备驱动程序,实现数据的采集、处理、传输等功能。 QT V4L2 Camera是指两者结合起来,实现在Linux平台上进行摄像头数据采集和实时视频处理的应用。基于QT V4L2 Camera,开发者可以实现各种各样的应用,例如视频监控、视频会议、人脸识别、图像识别等领域。通过QT V4L2 Camera,开发者可以方便地实现数据采集、处理、呈现和存储等功能,并且具有高度的灵活性和可扩展性。 在实际应用中,QT V4L2 Camera的优势不仅在于其功能强大,还在于它跨平台、开放源代码、易学易用、具有丰富的社区支持等方面,大大降低了开发者的开发成本和学习门槛,同时可以保证应用的可移植性和可维护性。 综上所述,QT V4L2 Camera是一款非常重要的视频采集和处理框架,它为开发者提供了丰富的功能和高度的灵活性,同时又具备跨平台、易学易用、开放源代码等优势,是开发基于Linux平台的视频应用的最佳选择之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值