1、Camera 及驱动介绍
1.1 驱动版本 Camera 在本文泛指 Rockchip
芯片中的 CIF 或 ISP 及其连接的 Sensor。并且本文描述 CIF 及 ISP 驱动指的是基于 Media Controller, Async sub device 和 vb2、以符合 V4L2 框架标准为 目标的新版本驱动。
1.2 相关概念
● 3A,指自动聚焦(AF),自动曝光(AE)和自动白平衡(AEB)算法,或者算法.so 库
● Async Sub Device,特指在 Media Controller 结构下的 V4L2 子设备
● Bayer Raw,或者 Raw Bayer,表示设备(Sensor 或 ISP)输出的 RGGB,BGGR,GBRG, GRBG 等格式,或该格式的数据帧
●
Buildroot, 特指 Rockchip 基于 Buildroot[2] 发布的一系列 Linux SDK
● CIF,Camera Interface, 即 Camera 接口, 用以接收 Sensor 数据并保存到 Memory 中
● DVP,一种并行接口,即 Digital Video Port
● Entity, 本文指 Media Controller 框架下的各节点
● FCC 或 FourCC,即 Four Character(FCC) codes,指 Linux
kernel 中用 4 个字符表示的图 像格式,详见 FourCC 介绍
● HSYNC,行同步信号
● ISP,Image Signal Processing,用以接收并处理图像
● IOMMU,Input-Output Memory Management Unit,本文指 Rockchip 系列芯片中的 iommu 模块,用于将物理上分散的内存页映射成 cif、isp 可见的连续内存
● Media Controller,Linux kernel 的一种媒体框架
● MIPI,本文指 MIPI 协议
● MIPI-DPHY,本文指 MIPI-DPHY 协议,或 Rockchip 芯片中符合 MIPI-DPHY 协议的控制器
● MP,即 Main Path,指 Rockchip ISP 的一个输出节点,可输出全分辨率图像,一般用来拍照, 抓取 Raw 图
● PCLK,即 Pixel clock
● Pipeline,本文指 media controller 下各个 entity 相互连接形成的链路
● SP,即 Self Path,指 Rockchip ISP 的一个输出节点,最高只能输出 1080p 分辨率,一般用 作预览
● Userspace,即 Linux 用户空间(相对于 Linux 内核空间),本文特指用户层或在用户层执行 的程序
● V4L2,即 Video4Linux2,Linux kernel 的视视频处理模块
● VIP,在 Rockchip 芯片中,即 Video Input Processor, 曾作为 CIF 的别名,已不再使用
● VSYNC,场同步信号
2、v4l-utils 工具及应用
v4l-utils 工具是由 Linuxtv[1] 维护的一个 V4L2 开发套件, 它提供一系列 V4L2 及 media
Framework 相关的工具,用来配置 V4L2 子设备的属性,测试 V4L2 设备,并提供如 libv4l2.so 开发库等等。 这一章主要介绍 v4l-utils 中的两个命令行工具:media-ctl 以及 v4l2-ctl。
● media-ctl, 用以查看、配置拓扑结构
● v4l2-ctl, 用以配置 v4l2 controls,可抓帧,设置 cif,isp,sensor 参数 不同版本的 v4l-utils 所对应的参数,format 代码会有些不同,特别是 mbus-fmt 部分。本文所采 用的版本是集成在 Linux SDK 中的 v4l-utils-1.14.1。
2.1 获取并编译 v4l-utils
在 Rockchip 发布的 Linux SDK 中, 默认已集成了 v4l-utils 包。用户可以通过 buildroot 的 编译开关开启或关闭 v4l-utils 包。如 SDK 目录下, buildroot/configs/rockchip_
PX3SE_defconfig 文件中,如下这一行将 v4l-utils 编译选项打开: BR2_PACKAGE_LIBV4L_UTILS=y 用户也可以在 Linuxtv 的官网获取源码编译,编译请参考 wiki。
V4l-utils 包在 ubuntu 系统下, 也可通过 apt 工具直接安装,如下: $ sudo apt-get install v4l-utils
2.2 FourCC
FourCC,全称 Four Character Codes,它用 4 个字符(即 32bit)来命名图像格式。在 Linux Kernel 中,它是一个宏,定义如下:
#define v4l2_fourcc(a,b,c,d) \
(((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24))
FourCC 所定义的格式, 是图像视频在内存中存储的格式。这点要注意和下文的 mbus-fmt 区分。
2.3 mbus-fmt
Mbus-fmt,全称是 Media Bus Pixel Codes,它描述的是用于在物理总线上传输的格式, 比 如 sensor 通过 mipi dphy 向 isp 传输的图像格式, 或者在 ISP 内部各子模块间传输的格式。特 别需要将 Mbus-fmt 与上一小节的 FourCC 区分, 后者是专指存储在 Memory 中的图像格式。
更多详细内容请下载附件查看