4.5. 视频内存到内存接口

V4L2 内存到内存设备可以在内存中压缩、解压缩、转换或以其他方式将视频数据从一种格式转换为另一种格式。 这种内存到内存设备设置 V4L2_CAP_VIDEO_M2MV4L2_CAP_VIDEO_M2M_MPLANE 功能。 内存到内存设备的示例包括编解码器、缩放器、去隔行器或格式转换器(例如,从 YUV 转换为 RGB)。

内存到内存视频节点的作用与普通视频节点类似,但它同时支持输出(将帧从内存发送到硬件)和捕获(将处理后的帧从硬件接收到内存)流 I/O。应用程序将必须设置双方的流 I/O,最后调用 VIDIOC_STREAMON 用于捕获和输出以启动硬件。

内存到内存设备充当共享资源:您可以多次打开视频节点,每个应用程序设置其自己的属性,这些属性是文件句柄本地的,并且每个应用程序都可以独立于其他应用程序使用它。 驱动程序将仲裁对硬件的访问,并在另一个文件处理程序获得访问权限时重新编程它。 这与通常的视频节点行为不同,在通常的视频节点行为中,视频属性对设备是全局的(即,通过一个文件句柄更改某些内容可以通过另一个文件句柄看到)。

最常见的内存到内存设备之一是编解码器。 编解码器比大多数编解码器更复杂,并且需要为其编解码器参数进行额外的设置。 这是通过编解码器控制完成的。 请参阅 编解码器控制参考。 以下各节将详细介绍如何使用编解码器内存到内存设备。