7.15. 树莓派 PiSP 后端内存到内存的 ISP (pisp-be)¶
7.15.1. PiSP 后端¶
PiSP 后端是一个内存到内存的图像信号处理器 (ISP),它从 DRAM 内存读取图像数据,并根据应用程序通过配置缓冲区中的参数所指定的方式执行图像处理,然后通过两个独立的输出通道将像素数据写回内存。
ISP 寄存器和编程模型记录在 树莓派图像信号处理器 (PiSP) 规范文档 中。
PiSP 后端 ISP 以瓦片形式处理图像。图像镶嵌(tessellation)的处理和低级配置参数的计算由一个名为 libpisp 的自由软件库实现。
完整的图像处理管线,包括通过 MIPI CSI-2 兼容的捕获接口从图像传感器捕获原始 Bayer 数据,将其存储在 DRAM 内存中,并在 PiSP 后端进行处理以获得应用程序可用的图像,此管线在 libcamera 中实现,作为树莓派平台支持的一部分。
7.15.2. pisp-be 驱动程序¶
树莓派 PiSP 后端 (pisp-be) 驱动程序位于 drivers/media/platform/raspberrypi/pisp-be 目录下。它使用 V4L2 API 注册多个视频捕获和输出设备,并使用 V4L2 subdev API 为 ISP 注册一个子设备,该子设备通过 媒体控制器 (MC) API 实现的单一媒体图连接视频设备。
pisp-be 驱动程序注册的媒体拓扑结构如下所示
该媒体图注册了以下视频设备节点
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.15.2.1. pispbe-input¶
要由 ISP 处理的图像被排队到 pispbe-input 输出设备节点。有关 ISP 支持的输入图像格式列表,请参阅 树莓派图像信号处理器 (PiSP) 规范文档。
7.15.2.2. pispbe-tdn_input, pispbe-tdn_output¶
pispbe-tdn_input 输出视频设备接收由时域降噪模块处理的图像,这些图像从 pispbe-tdn_output 捕获视频设备获取。用户空间负责维护两个设备上的队列,并确保在输出端完成的缓冲区被排队到输入端。
7.15.2.3. pispbe-stitch_input, pispbe-stitch_output¶
为了实现 HDR(高动态范围)图像处理,使用了图像拼接和色调映射模块。pispbe-stitch_output 将图像写入内存,而 pispbe-stitch_input 接收先前写入的帧以与当前输入图像一起处理。用户空间负责维护两个设备上的队列,并确保在输出端完成的缓冲区被排队到输入端。
7.15.2.4. pispbe-output0, pispbe-output1¶
这两个捕获设备将 ISP 处理后的像素数据写入内存。
7.15.2.5. pispbe-config¶
pispbe-config 输出视频设备接收一个配置参数缓冲区,该缓冲区定义了 ISP 要执行的所需图像处理。
ISP 配置参数的格式由 pisp_be_tiles_config
C 结构体定义,每个参数的含义在 树莓派图像信号处理器 (PiSP) 规范文档 中描述。
7.15.3. ISP 配置¶
ISP 配置仅由参数缓冲区的内容描述。用户空间需要使用 V4L2 API 配置的唯一参数是输出和捕获视频设备上的图像格式,用于验证参数缓冲区的内容。