1.27.3. 配置

应用程序可以使用 选择 API 来选择视频信号或缓冲区中的一个区域,并查询默认设置和硬件限制。

视频硬件可能具有各种裁剪、合成和缩放限制。它可能只能放大或缩小,仅支持离散的缩放因子,或者在水平和垂直方向上具有不同的缩放能力。此外,它可能根本不支持缩放。同时,裁剪/合成的矩形可能必须对齐,并且源和接收器都可能具有任意的上限和下限大小。因此,像往常一样,驱动程序应调整请求的参数并返回所选的实际值。应用程序可以使用 约束标志 控制舍入行为。

1.27.3.1. 视频捕获的配置

有关视频捕获设备可用的选择目标的示例,请参见图 裁剪和合成目标。建议先配置裁剪目标,然后再配置合成目标。

可以通过 V4L2_SEL_TGT_CROP_BOUNDS 目标给出可以采样的区域的左上角坐标、宽度和高度的范围。建议驱动程序开发人员将左上角放置在位置 (0,0)。矩形的坐标以像素为单位表示。

源矩形的左上角坐标、宽度和高度,即实际采样的区域,由 V4L2_SEL_TGT_CROP 目标给出。它使用与 V4L2_SEL_TGT_CROP_BOUNDS 相同的坐标系。活动的裁剪区域必须完全位于捕获边界内。驱动程序可以根据硬件限制进一步调整请求的大小和/或位置。

每个捕获设备都有一个默认的源矩形,由 V4L2_SEL_TGT_CROP_DEFAULT 目标给出。此矩形应覆盖驱动程序编写者认为的完整图片。驱动程序应在首次加载时,而不是之后,将活动裁剪矩形设置为默认值。

合成目标指的是内存缓冲区。合成坐标的限制使用 V4L2_SEL_TGT_COMPOSE_BOUNDS 获取。所有坐标均以像素为单位表示。矩形的左上角必须位于 (0,0) 位置。宽度和高度等于 VIDIOC_S_FMT 设置的图像大小。

硬件将图像插入到的缓冲区部分由 V4L2_SEL_TGT_COMPOSE 目标控制。矩形的坐标也以与边界矩形相同的坐标系表示。合成矩形必须完全位于边界矩形内。驱动程序必须调整合成矩形以适应边界限制。此外,驱动程序可以根据硬件限制执行其他调整。应用程序可以使用 约束标志 控制舍入行为。

对于捕获设备,默认的合成矩形使用 V4L2_SEL_TGT_COMPOSE_DEFAULT 查询。它通常等于边界矩形。

硬件修改的缓冲区部分由 V4L2_SEL_TGT_COMPOSE_PADDED 给出。它包含使用 V4L2_SEL_TGT_COMPOSE 定义的所有像素以及硬件在插入过程中修改的所有填充数据。该矩形之外的所有像素不得被硬件更改。位于填充区域内但在活动区域外的像素内容是未定义的。应用程序可以使用填充和活动矩形来检测垃圾像素所在的位置,并在需要时将其删除。

1.27.3.2. 视频输出的配置

对于输出设备,目标和 ioctl 的使用方式与视频捕获的情况类似。合成矩形是指将图像插入视频信号。裁剪矩形是指内存缓冲区。建议先配置合成目标,然后再配置裁剪目标。

裁剪目标是指包含要插入视频信号或图形屏幕的图像的内存缓冲区。裁剪坐标的限制使用 V4L2_SEL_TGT_CROP_BOUNDS 获取。所有坐标均以像素为单位表示。左上角始终是 (0,0) 点。宽度和高度等于使用 VIDIOC_S_FMT ioctl 指定的图像大小。

源矩形的左上角坐标、宽度和高度,即硬件处理图像数据的区域,由 V4L2_SEL_TGT_CROP 给出。它的坐标以与边界矩形相同的坐标系表示。活动的裁剪区域必须完全位于裁剪边界内,并且驱动程序可以根据硬件限制进一步调整请求的大小和/或位置。

对于输出设备,默认的裁剪矩形使用 V4L2_SEL_TGT_CROP_DEFAULT 查询。它通常等于边界矩形。

硬件将图像插入到的视频信号或图形显示的部分由 V4L2_SEL_TGT_COMPOSE 目标控制。矩形的坐标以像素为单位表示。合成矩形必须完全位于边界矩形内。驱动程序必须调整区域以适应边界限制。此外,驱动程序可以根据硬件限制执行其他调整。

设备具有默认的合成矩形,由 V4L2_SEL_TGT_COMPOSE_DEFAULT 目标给出。此矩形应覆盖驱动程序编写者认为的完整图片。建议驱动程序开发人员将左上角放置在 (0,0) 位置。驱动程序应在首次加载时将活动的合成矩形设置为默认矩形。

除了内存缓冲区中的图像外,设备可能会向视频信号引入其他内容。它包括图像周围的边框。但是,此类填充区域是驱动程序相关的功能,本文档未涵盖。鼓励驱动程序开发人员保持填充矩形与活动矩形相等。通过 V4L2_SEL_TGT_COMPOSE_PADDED 标识符访问填充目标。它必须包含 V4L2_SEL_TGT_COMPOSE 目标中的所有像素。

1.27.3.3. 缩放控制

应用程序可以通过比较使用 V4L2_SEL_TGT_CROPV4L2_SEL_TGT_COMPOSE 目标获得的矩形的宽度和高度来检测是否执行了缩放。如果这些不相等,则应用缩放。应用程序可以使用这些值计算缩放比例。