2. V4L2 裁剪与合成概念:Crop 与 Compose
在 V4L2 框架中,Crop(裁剪)与 Compose(合成)是视频数据流处理的两个核心窗口操作。它们分别控制“从源图像中选取哪一部分”以及“将选取的部分放置在目标缓冲区的哪个位置”。理解这两个概念是进行视频会议、画中画、多路拼接等高级应用的基础。
2.1 核心定义
| 术语 | 英文全称 | 定义 | 类比 |
|---|---|---|---|
| Crop | 裁剪窗口 | 从输入图像(源)中选取一个矩形子区域,丢弃区域外的像素。 | 从一张大照片中剪下一块,只保留这块内容。 |
| Compose | 合成窗口 | 将裁剪后的图像(或原始图像)放置到输出缓冲区的指定位置,并可进行缩放。 | 将剪下的照片贴到一张新画布的某个位置,可以放大或缩小。 |
关键区别:Crop 决定“看什么”,Compose 决定“放在哪、多大”。两者配合使用可以实现灵活的窗口布局。
2.2 应用场景
2.2.1 视频会议
在视频会议中,摄像头通常采集宽视角画面(如 1920x1080)。通过 Crop 可以只截取发言人的面部区域(如 640x480),然后通过 Compose 将该区域放大至全屏输出,实现“自动追踪”或“特写”效果,无需移动物理摄像头。
2.2.2 画中画(PiP)
画中画是 Crop 与 Compose 的经典组合应用。主画面使用全尺寸 Crop 和全屏 Compose;子画面(如小窗口)通过 Crop 截取另一路视频源的部分区域,再通过 Compose 将其缩小并放置在屏幕右下角。
实战提示:在 V4L2 中,Crop 和 Compose 的坐标系统均以像素为单位,原点 (0,0) 位于图像左上角。宽度和高度必须满足驱动对齐要求(通常为 2 或 16 的倍数)。
2.3 Crop 与 Compose 的流水线关系
下图展示了从视频源到最终输出的完整数据流,其中 Crop 和 Compose 作为两个独立的处理阶段。
2.4 坐标与尺寸关系
在 V4L2 中,Crop 和 Compose 使用相同的 struct v4l2_rect 结构体描述矩形区域:
struct v4l2_rect {
__s32 left; // 左上角 X 坐标(像素)
__s32 top; // 左上角 Y 坐标(像素)
__u32 width; // 矩形宽度(像素)
__u32 height; // 矩形高度(像素)
};
2.4.1 典型配置示例
| 场景 | 源分辨率 | Crop 区域 | Compose 区域 | 效果 |
|---|---|---|---|---|
| 全屏输出 | 1920x1080 | (0, 0, 1920, 1080) | (0, 0, 1920, 1080) | 无裁剪,无缩放 |
| 面部特写 | 1920x1080 | (400, 200, 640, 480) | (0, 0, 1280, 720) | 裁剪面部区域并放大 |
| 画中画(主) | 1920x1080 | (0, 0, 1920, 1080) | (0, 0, 1280, 720) | 主画面缩小至 1280x720 |
| 画中画(子) | 1280x720 | (0, 0, 1280, 720) | (1000, 500, 240, 135) | 子画面缩小并置于右下角 |
2.5 硬件与软件裁剪合成对比
| 特性 | 硬件 Crop/Compose | 软件 Crop/Compose |
|---|---|---|
| 性能 | 零 CPU 开销,实时处理 | 消耗 CPU/GPU 资源 |
| 延迟 | 极低(纳秒级) | 较高(毫秒级) |
| 灵活性 | 受硬件限制(对齐、最大尺寸) | 任意尺寸、任意位置 |
| 适用场景 | 嵌入式设备、实时视频流 | 桌面应用、后期处理 |
| V4L2 支持 | 通过 VIDIOC_S_SELECTION 实现 | 用户空间手动处理 |
注意事项:并非所有 V4L2 设备都支持硬件 Crop 和 Compose。在配置前,应通过
VIDIOC_QUERYCAP 和 VIDIOC_ENUM_FMT 查询设备能力。对于不支持硬件操作的设备,需要在用户空间通过软件实现。
2.6 画中画场景的 Crop 与 Compose 布局
下图展示了一个典型的画中画布局,其中主画面和子画面分别使用不同的 Crop 和 Compose 配置。
2.7 小结
- Crop 从源图像中选取感兴趣区域(ROI),丢弃无关像素。
- Compose 将裁剪后的图像放置到输出缓冲区的指定位置,并可进行缩放。
- 两者通过
struct v4l2_rect描述矩形区域,坐标原点在左上角。 - 硬件支持的 Crop/Compose 性能远优于软件实现,但受设备能力限制。
- 视频会议、画中画、多路拼接是 Crop 与 Compose 的典型应用场景。