7.14. 树莓派 PiSP 后端内存到内存 ISP (pisp-be)

7.14.1. PiSP 后端

PiSP 后端是一个内存到内存图像信号处理器 (ISP),它从 DRAM 内存读取图像数据,并按照应用程序通过配置缓冲区中的参数指定的方式执行图像处理,然后通过两个不同的输出通道将像素数据写回内存。

ISP 寄存器和编程模型在树莓派图像信号处理器 (PiSP) 规范文档中有记录

PiSP 后端 ISP 以图块方式处理图像。图像镶嵌的处理和底层配置参数的计算由一个名为libpisp的免费软件库实现。

完整的图像处理流水线,包括通过 MIPI CSI-2 兼容的捕获接口从图像传感器捕获 RAW Bayer 数据,将它们存储在 DRAM 内存中,并在 PiSP 后端中处理它们以获得应用程序可用的图像,在libcamera中作为树莓派平台支持的一部分实现。

7.14.2. pisp-be 驱动程序

树莓派 PiSP 后端 (pisp-be) 驱动程序位于 drivers/media/platform/raspberrypi/pisp-be 下。它使用V4L2 API注册多个视频捕获和输出设备,使用V4L2 subdev API注册一个用于 ISP 的子设备,该子设备使用媒体控制器 (MC) API在单个媒体图中连接视频设备。

pisp-be驱动程序注册的媒体拓扑结构如下所示

Diagram of the default media pipeline topology

媒体图注册以下视频设备节点

  • pispbe-input: 要提交到 ISP 进行处理的图像的输出设备。

  • pispbe-tdn_input: 用于时间去噪的输出设备。

  • pispbe-stitch_input: 用于图像拼接 (HDR) 的输出设备。

  • pispbe-output0: 用于处理后图像的第一个捕获设备。

  • pispbe-output1: 用于处理后图像的第二个捕获设备。

  • pispbe-tdn_output: 用于时间去噪的捕获设备。

  • pispbe-stitch_output: 用于图像拼接 (HDR) 的捕获设备。

  • pispbe-config: 用于 ISP 配置参数的输出设备。

7.14.2.1. pispbe-input

要由 ISP 处理的图像被排队到pispbe-input输出设备节点。有关支持作为 ISP 输入的图像格式列表,请参阅树莓派图像信号处理器 (PiSP) 规范文档

7.14.2.2. pispbe-tdn_input, pispbe-tdn_output

pispbe-tdn_input输出视频设备接收要由时间去噪块处理的图像,这些图像是从pispbe-tdn_output捕获视频设备捕获的。用户空间负责维护两个设备上的队列,并确保在输出上完成的缓冲区被排队到输入。

7.14.2.3. pispbe-stitch_input, pispbe-stitch_output

为了实现 HDR(高动态范围)图像处理,使用了图像拼接和色调映射块。pispbe-stitch_output将图像写入内存,pispbe-stitch_input接收先前写入的帧以将其与当前输入图像一起处理。用户空间负责维护两个设备上的队列,并确保在输出上完成的缓冲区被排队到输入。

7.14.2.4. pispbe-output0, pispbe-output1

这两个捕获设备将 ISP 处理的像素数据写入内存。

7.14.2.5. pispbe-config

pispbe-config输出视频设备接收一个配置参数缓冲区,该缓冲区定义了 ISP 要执行的所需图像处理。

ISP 配置参数的格式由pisp_be_tiles_config C 结构定义,每个参数的含义在树莓派图像信号处理器 (PiSP) 规范文档中有描述。

7.14.3. ISP 配置

ISP 配置仅由参数缓冲区的内容描述。用户空间需要使用 V4L2 API 配置的唯一参数是输出和捕获视频设备上的图像格式,用于验证参数缓冲区的内容。