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 作为两个独立的处理阶段。

Crop 与 Compose 流水线关系图 V4L2 Crop 与 Compose 数据流 视频源 Crop 裁剪 Compose 合成 输出缓冲区 Crop 参数 left, top, width, height 例: (100, 50, 640, 480) Compose 参数 left, top, width, height 例: (0, 0, 1280, 720) 裁剪决定从源中取哪块 → 合成决定将这块放在输出的哪个位置

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 配置。

画中画布局示意图 画中画(PiP)布局示例 输出缓冲区(1920x1080) 主画面 Crop: (0,0,1920,1080) Compose: (20,40,350,200) 子画面 Crop: (100,50,640,480) Compose: (350,220,180,120) 主画面起点 子画面起点

2.7 小结

  • Crop 从源图像中选取感兴趣区域(ROI),丢弃无关像素。
  • Compose 将裁剪后的图像放置到输出缓冲区的指定位置,并可进行缩放。
  • 两者通过 struct v4l2_rect 描述矩形区域,坐标原点在左上角。
  • 硬件支持的 Crop/Compose 性能远优于软件实现,但受设备能力限制。
  • 视频会议、画中画、多路拼接是 Crop 与 Compose 的典型应用场景。