7.16. Rockchip 图像信号处理器 (rkisp1)¶
7.16.1. 简介¶
本文档记录了 Rockchip ISP1 的驱动程序,该驱动程序是 RK3288 和 RK3399 SoC 的一部分。该驱动程序位于 drivers/media/platform/rockchip/ rkisp1 下,并使用媒体控制器 API。
7.16.2. 修订¶
此 ISP 存在多个较小的修订,这些修订在以后的 SoC 中引入。可以在 UAPI 中的枚举 rkisp1_cif_isp_version
中找到修订,并且可以通过 ioctl MEDIA_IOC_DEVICE_INFO 返回的 struct media_device_info 的 hw_revision 字段读取正在运行的 SoC 内的 ISP 修订。
正在使用的版本为
RKISP1_V10:至少在 rk3288 和 rk3399 中使用
RKISP1_V11:在原始供应商代码中声明,但未使用
RKISP1_V12:至少在 rk3326 和 px30 中使用
RKISP1_V13:至少在 rk1808 中使用
7.16.3. 拓扑¶
该驱动程序有 4 个视频设备
rkisp1_mainpath:用于检索图像的捕获设备,通常具有较高的分辨率。
rkisp1_selfpath:用于检索图像的捕获设备。
rkisp1_stats:发送统计信息的元数据捕获设备。
rkisp1_params:接收用户空间参数配置的元数据输出设备。
该驱动程序有 3 个子设备
rkisp1_resizer_mainpath:用于调整大小和下采样 mainpath 捕获设备的帧。
rkisp1_resizer_selfpath:用于调整大小和下采样 selfpath 捕获设备的帧。
rkisp1_isp:连接到传感器,负责所有 ISP 操作。
7.16.3.1. rkisp1_mainpath、rkisp1_selfpath - 帧捕获视频节点¶
这些是捕获帧的 mainpath 和 selfpath 捕获设备。这些实体是将帧写入内存的 DMA 引擎。selfpath 视频设备可以捕获 YUV/RGB 格式。它的输入是 YUV 编码流,并且能够将其转换为 RGB。selfpath 无法捕获拜耳格式。mainpath 可以捕获拜耳和 YUV 格式,但无法捕获 RGB 格式。两个捕获视频都支持 V4L2_CAP_IO_MC
功能。
7.16.3.2. rkisp1_resizer_mainpath、rkisp1_resizer_selfpath - 调整大小器子设备节点¶
这些是 mainpath 和 selfpath 的调整大小器实体。这些实体可以放大和缩小帧,还可以更改 YUV 采样(例如 YUV4:2:2 -> YUV4:2:0)。它们还在接收器焊盘上具有裁剪功能。调整大小器实体只能对 YUV:4:2:2 格式 (MEDIA_BUS_FMT_YUYV8_2X8) 进行操作。mainpath 捕获设备支持以拜耳格式捕获视频。在这种情况下,mainpath 的调整大小器设置为“旁路”模式 - 它只是转发帧而不对其进行操作。
7.16.3.3. rkisp1_isp - 图像信号处理子设备节点¶
这是 ISP 实体。它在接收器焊盘 0 上连接到传感器,并使用 CSI-2 协议接收帧。它负责配置 CSI-2 协议。它在连接到传感器的接收器焊盘 0 上以及连接到调整大小器实体的源焊盘 2 上具有裁剪功能。接收器焊盘 0 上的裁剪定义了来自传感器的图像区域。源焊盘 2 上的裁剪定义了图像稳定器 (IS) 的区域。
7.16.3.4. rkisp1_stats - 统计视频节点¶
统计视频节点输出 3A(自动对焦、自动曝光和自动白平衡)统计信息,以及由 rkisp1 处理的帧的直方图统计信息,以供用户空间应用程序使用。使用这些数据,应用程序可以实现算法,并通过 rkisp_params 节点重新参数化驱动程序,以在视频流期间提高图像质量。缓冲区格式由结构 rkisp1_stat_buffer
定义,用户空间应将 V4L2_META_FMT_RK_ISP1_STAT_3A 设置为数据格式。
7.16.3.5. rkisp1_params - 参数视频节点¶
rkisp1_params 视频节点接收来自用户空间的一组参数,以在视频流期间应用于硬件,允许用户空间动态修改诸如黑电平、串扰校正等值。
ISP 驱动程序支持两种不同的参数配置方法,固定参数格式 或 可扩展参数格式。
当使用 固定参数 方法时,缓冲区格式由结构 rkisp1_params_cfg
定义,用户空间应将 V4L2_META_FMT_RK_ISP1_PARAMS 设置为数据格式。
当使用 可扩展参数 方法时,缓冲区格式由结构 rkisp1_ext_params_cfg
定义,用户空间应将 V4L2_META_FMT_RK_ISP1_EXT_PARAMS 设置为数据格式。
7.16.4. 捕获视频帧示例¶
在以下示例中,连接到“rkisp1_isp”的焊盘 0 的传感器是 imx219。
以下命令可用于从自路径视频节点捕获视频,尺寸为 900x800,平面格式为 YUV 4:2:2。它使用了所有可能的裁剪功能(请参见下面的说明)。
# set the links
"media-ctl" "-d" "platform:rkisp1" "-r"
"media-ctl" "-d" "platform:rkisp1" "-l" "'imx219 4-0010':0 -> 'rkisp1_isp':0 [1]"
"media-ctl" "-d" "platform:rkisp1" "-l" "'rkisp1_isp':2 -> 'rkisp1_resizer_selfpath':0 [1]"
"media-ctl" "-d" "platform:rkisp1" "-l" "'rkisp1_isp':2 -> 'rkisp1_resizer_mainpath':0 [0]"
# set format for imx219 4-0010:0
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1640x1232]'
# set format for rkisp1_isp pads:
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_isp":0 [fmt:SRGGB10_1X10/1640x1232 crop: (0,0)/1600x1200]'
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_isp":2 [fmt:YUYV8_2X8/1600x1200 crop: (0,0)/1500x1100]'
# set format for rkisp1_resizer_selfpath pads:
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_resizer_selfpath":0 [fmt:YUYV8_2X8/1500x1100 crop: (300,400)/1400x1000]'
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_resizer_selfpath":1 [fmt:YUYV8_2X8/900x800]'
# set format for rkisp1_selfpath:
"v4l2-ctl" "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "-v" "width=900,height=800,"
"v4l2-ctl" "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "-v" "pixelformat=422P"
# start streaming:
v4l2-ctl "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "--stream-mmap" "--stream-count" "10"
在上面的示例中,传感器配置为拜耳格式:SRGGB10_1X10/1640x1232。rkisp1_isp:0 pad 应该配置为与传感器相同的 mbus 格式和尺寸,否则流式传输将失败并出现“EPIPE”错误。因此,它也被配置为 SRGGB10_1X10/1640x1232。此外,rkisp1_isp:0 pad 配置为裁剪 (0,0)/1600x1200。
裁剪尺寸会自动传播为 isp 源 pad rkisp1_isp:2 的格式。另一个裁剪操作配置在 isp 源 pad 上:(0,0)/1500x1100。
调整大小器的 sink pad rkisp1_resizer_selfpath 应该配置为格式 YUYV8_2X8/1500x1100,以便与链路另一侧的格式匹配。此外,还配置了一个裁剪 (300,400)/1400x1000。
调整大小器的源 pad rkisp1_resizer_selfpath:1 配置为格式 YUYV8_2X8/900x800。这意味着调整大小器首先从接收到的帧中裁剪一个 (300,400)/1400x100 的窗口,然后将此窗口缩放到尺寸 900x800。
请注意,上面的示例没有使用统计参数控制循环。因此,捕获的帧不会通过 3A 算法,并且可能质量不佳,甚至看起来又黑又绿。
7.16.5. 配置量化¶
该驱动程序支持 YUV 格式的有限和全范围量化,其中有限是默认值。要在两者之间切换,用户空间应使用 isp 的源 pad 2 (rkisp1_isp:2)上的子设备的颜色空间转换 API (CSC)。在此 pad 上配置的量化是主路径和自路径视频节点上捕获的视频帧的量化。请注意,即使在 rkisp1_isp:2 上将量化配置为全范围,调整大小器和捕获实体也将始终报告 V4L2_QUANTIZATION_DEFAULT
。因此,为了获得配置的量化,应用程序应从 pad rkisp1_isp:2 获取它。