1.27.4. 与旧裁剪 API 的比较

引入选择 API 是为了解决旧的 CROP API 的缺陷,该 API 设计用于控制简单的捕获设备。后来,视频输出驱动程序采用了裁剪 API。 ioctl 用于选择插入视频信号的显示部分。这应该被视为 API 滥用,因为所描述的操作实际上是合成。选择 API 通过设置适当的目标来明确区分合成和裁剪操作。

CROP API 缺乏对在内存缓冲区内合成图像和从中裁剪图像的任何支持。应用程序可以通过滥用 V4L2 API 来配置捕获设备仅填充图像的一部分。通过在 struct v4l2_pix_format 中设置字段 bytesperline 来实现从较大图像裁剪较小的图像。可以通过在调用 VIDIOC_QBUF 之前修改 struct v4l2_buffer 中的字段 m_userptr 来引入图像偏移。这些操作应该避免,因为它们不具有可移植性(字节序),并且不适用于宏块和 Bayer 格式以及 mmap 缓冲区。

选择 API 以清晰、直观且可移植的方式处理缓冲区裁剪/合成的配置。接下来,通过选择 API 引入了填充目标和约束标志的概念。最后,struct v4l2_crop 和 struct v4l2_cropcap 没有保留字段。因此,无法扩展其功能。新的 struct v4l2_selection 为未来的扩展提供了大量的空间。

鼓励驱动程序开发人员仅实现选择 API。以前的裁剪 API 将使用新的 API 模拟。