1.27.4. 与旧裁剪API的比较¶
引入选择API是为了弥补旧版裁剪API的不足,旧API旨在控制简单的捕获设备。后来,裁剪API被视频输出驱动程序采用。ioctl 用于选择显示屏上插入视频信号的部分。这应该被视为一种API滥用,因为所描述的操作实际上是合成(composing)。选择API通过设置适当的目标,明确区分了合成和裁剪操作。
裁剪API缺乏对内存缓冲区内图像的合成和裁剪的任何支持。应用程序可以通过滥用 V4L2 API 来配置捕获设备,使其仅填充图像的一部分。通过设置结构体 v4l2_pix_format
中的 bytesperline
字段,可以从较大图像中裁剪出较小图像。引入图像偏移量可以通过在调用 VIDIOC_QBUF 之前修改结构体 v4l2_buffer
中的 m_userptr
字段来完成。应避免这些操作,因为它们不可移植(字节序问题),并且不适用于宏块和拜耳格式以及mmap缓冲区。
选择API以清晰、直观和可移植的方式处理缓冲区裁剪/合成的配置。接下来,选择API引入了填充目标(padded target)和约束标志(constraints flags)的概念。最后,结构体 v4l2_crop
和结构体 v4l2_cropcap
没有保留字段。因此,无法扩展它们的功能。新的结构体 v4l2_selection
为未来的扩展提供了大量空间。
鼓励驱动程序开发人员仅实现选择API。旧的裁剪API将使用新的API进行模拟。