7.17. Rockchip 图像信号处理器 (rkisp1)

7.17.1. 简介

此文件记录了用于 RK3288 和 RK3399 SoC 的 Rockchip ISP1 的驱动程序。该驱动程序位于 drivers/media/platform/rockchip/ rkisp1 下,并使用媒体控制器 API。

7.17.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.17.3. 拓扑

Diagram of the default media pipeline topology

该驱动程序有 4 个视频设备

  • rkisp1_mainpath:用于检索图像的捕获设备,通常具有较高的分辨率。

  • rkisp1_selfpath:用于检索图像的捕获设备。

  • rkisp1_stats:一个元数据捕获设备,用于发送统计信息。

  • rkisp1_params:一个元数据输出设备,用于接收来自用户空间的参数配置。

该驱动程序有 3 个子设备

  • rkisp1_resizer_mainpath:用于调整主路径捕获设备帧的大小和下采样。

  • rkisp1_resizer_selfpath:用于调整自路径捕获设备帧的大小和下采样。

  • rkisp1_isp:连接到传感器,负责所有 isp 操作。

7.17.3.1. rkisp1_mainpath,rkisp1_selfpath - 帧捕获视频节点

这些是用于捕获帧的主路径自路径捕获设备。 这些实体是将帧写入内存的 DMA 引擎。 自路径视频设备可以捕获 YUV/RGB 格式。 它的输入是 YUV 编码的流,并且能够将其转换为 RGB。 自路径无法捕获 bayer 格式。 主路径可以捕获 bayer 和 YUV 格式,但无法捕获 RGB 格式。 两个捕获视频都支持 V4L2_CAP_IO_MC capability

7.17.3.2. rkisp1_resizer_mainpath,rkisp1_resizer_selfpath - 调整大小器子设备节点

这些是主路径和自路径的调整大小器实体。 这些实体可以放大和缩小帧,还可以更改 YUV 采样(例如 YUV4:2:2 -> YUV4:2:0)。 它们在接收器 pad 上也具有裁剪功能。 调整大小器实体只能在 YUV:4:2:2 格式 (MEDIA_BUS_FMT_YUYV8_2X8) 上运行。 主路径捕获设备支持捕获 bayer 格式的视频。 在这种情况下,主路径的调整大小器设置为“旁路”模式 - 它只是转发帧而不对其进行操作。

7.17.3.3. rkisp1_isp - 图像信号处理子设备节点

这是 isp 实体。 它在接收器 pad 0 上连接到传感器,并使用 CSI-2 协议接收帧。 它负责配置 CSI-2 协议。 它在连接到传感器的接收器 pad 0 上和连接到调整大小器实体的源 pad 2 上具有裁剪功能。 接收器 pad 0 上的裁剪定义了传感器中的图像区域。 源 pad 2 上的裁剪定义了图像稳定器 (IS) 的区域。

7.17.3.4. rkisp1_stats - 统计视频节点

统计视频节点输出 3A(自动对焦、自动曝光和自动白平衡)统计信息,以及由 rkisp1 处理的帧的直方图统计信息到用户空间应用程序。 使用这些数据,应用程序可以实现算法并通过 rkisp_params 节点重新参数化驱动程序,以提高视频流期间的图像质量。 缓冲区格式由结构 rkisp1_stat_buffer 定义,用户空间应将 V4L2_META_FMT_RK_ISP1_STAT_3A 设置为数据格式。

7.17.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.17.4. 捕获视频帧示例

在以下示例中,连接到“rkisp1_isp”pad 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"

在上面的示例中,传感器配置为 bayer 格式: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

调整大小器的接收器 pad rkisp1_resizer_selfpath 应配置为格式 YUYV8_2X8/1500x1100,以便匹配链接另一端的格式。 此外,还在其上配置了裁剪 (300,400)/1400x1000

调整大小器的源 pad rkisp1_resizer_selfpath:1 配置为格式 YUYV8_2X8/900x800。 这意味着调整大小器首先从接收到的帧中裁剪一个 (300,400)/1400x100 的窗口,然后将此窗口缩放到维度 900x800

请注意,上面的示例未使用统计参数控制环路。 因此,捕获的帧不会通过 3A 算法,并且可能不会具有良好的质量,甚至看起来会很暗且呈绿色。

7.17.5. 配置量化

该驱动程序支持 YUV 格式的有限和全范围量化,其中有限是默认值。 要在两者之间切换,用户空间应使用子设备的色彩空间转换 API (CSC) 在 isp 的源 pad 2 上 (rkisp1_isp:2)。 在此 pad 上配置的量化是主路径和自路径视频节点上捕获的视频帧的量化。 请注意,即使量化配置为 rkisp1_isp:2 上的全范围,调整大小器和捕获实体也将始终报告 V4L2_QUANTIZATION_DEFAULT。 因此,为了获得配置的量化,应用程序应从 pad rkisp1_isp:2 获取它。