2.6.1.2. V4L2_PIX_FMT_PISP_COMP1_RGGB (‘PC1R’), V4L2_PIX_FMT_PISP_COMP1_GRBG (‘PC1G’), V4L2_PIX_FMT_PISP_COMP1_GBRG (‘PC1g’), V4L2_PIX_FMT_PISP_COMP1_BGGR (‘PC1B), V4L2_PIX_FMT_PISP_COMP1_MONO (‘PC1M’), V4L2_PIX_FMT_PISP_COMP2_RGGB (‘PC2R’), V4L2_PIX_FMT_PISP_COMP2_GRBG (‘PC2G’), V4L2_PIX_FMT_PISP_COMP2_GBRG (‘PC2g’), V4L2_PIX_FMT_PISP_COMP2_BGGR (‘PC2B), V4L2_PIX_FMT_PISP_COMP2_MONO (‘PC2M’)¶
2.6.1.2.1. Raspberry Pi PiSP 压缩的 8 位 Bayer 格式¶
2.6.1.2.1.1. 描述¶
Raspberry Pi ISP (PiSP) 使用一组三种固定速率压缩的 Bayer 格式。可以减去黑电平偏移以提高压缩效率;标称黑电平和偏移量必须带外发出信号。每条扫描线都填充到 8 像素宽的倍数,每 8 个水平连续像素的块使用 8 字节编码。
模式 1 使用量化和基于增量的编码方案,可保留多达 12 个有效位。模式 2 是一种简单的类平方根压扩方案,具有 6 个 PWL 和弦,可保留多达 12 个有效位。模式 3 结合了压扩(带 4 个和弦)和增量方案,可保留多达 14 个有效位。
本描述的其余部分适用于模式 1 和模式 3。
每 8 个像素的块被分为偶数和奇数相位的 4 个像素,通过内存中连续位置的 32 位字独立编码。每个 32 位字的两个最低有效位给出其“量化模式”。
在量化模式 0 中,最低的 321 个量化级别是 FSD/4096 的倍数,其余级别是 FSD/2048 的连续倍数。量化模式 1 和 2 使用线性量化,步长分别为 FSD/1024 和 FSD/512。四个像素中的每一个都独立量化,并四舍五入到最近的级别。在量化模式 2 中,如果中间两个样本的量化值 (q1,q2) 都在 [384..511] 范围内,则它们使用 9 位编码 q1,然后是 7 位编码 (q2 & 127)。否则,对于量化模式 0、1 和 2:一个 9 位字段编码 MIN(q1,q2),其值必须在 [0..511] 范围内,一个 7 位字段编码 (q2-q1+64),其值必须在 [0..127] 范围内。
每个外部样本 (q0,q3) 都使用一个 7 位字段编码,该字段基于其内部邻居 q1 或 q2。在量化模式 2 中,如果内部样本的量化值在 [448..511] 范围内,则字段值为 (q0-384)。否则,对于量化模式 0、1 和 2:外部样本编码为 (q0-MAX(0,q1-64))。q3 也类似地基于 q2 编码。这些值中的每一个都必须在 [0..127] 范围内。这些分别为 2、9、7、7、7 位的字段按小端序打包,以生成具有小端字节序的 32 位字。
量化模式 3 具有“7.5 位”转义,用于上述编码都不适用时。每个像素值量化到 176 个级别中最接近的一个,其中最低的 95 个级别是 FSD/256 的倍数,其余级别是 FSD/128 的倍数(级别 175 表示非常接近 FSD 的值,可能需要饱和算术才能解码)。
每对量化像素 (q0,q1) 或 (q2,q3) 通过一个 15 位字段共同编码:2816*(q0>>4) + 16*q1 + (q0&15)。三个 2、15、15 位字段按 LE 顺序打包 {15,15,2}。
压缩格式的软件解码器实现在 Raspberry Pi 摄像头应用程序代码库中提供。