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_CROP
和 V4L2_SEL_TGT_COMPOSE
目标获得的矩形的宽度和高度来检测是否执行了缩放。如果它们不相等,则应用了缩放。应用程序可以使用这些值计算缩放比例。