4.5. 视频内存到内存接口¶
V4L2 内存到内存设备可以在内存中将视频数据从一种格式压缩、解压缩、转换或以其他方式转换成另一种格式。此类内存到内存设备设置 V4L2_CAP_VIDEO_M2M
或 V4L2_CAP_VIDEO_M2M_MPLANE
功能。内存到内存设备的例子包括编解码器、缩放器、去隔行器或格式转换器(即从 YUV 转换到 RGB)。
内存到内存视频节点的功能与普通视频节点相同,但它同时支持输出(将帧从内存发送到硬件)和捕获(从硬件接收处理后的帧到内存)流 I/O。应用程序需要为两端设置流 I/O,并最终为捕获和输出调用 VIDIOC_STREAMON 以启动硬件。
内存到内存设备作为共享资源运行:您可以多次打开视频节点,每个应用程序设置其自身的文件句柄本地属性,并且每个应用程序都可以独立于其他应用程序使用它。驱动程序将仲裁对硬件的访问,并在另一个文件句柄获得访问权限时重新编程。这与通常的视频节点行为不同,在通常的视频节点行为中,视频属性是设备的全局属性(即通过一个文件句柄更改某些内容会通过另一个文件句柄可见)。
最常见的内存到内存设备之一是编解码器。编解码器比大多数设备更复杂,需要对其编解码器参数进行额外设置。这通过编解码器控制完成。请参阅 编解码器控制参考。有关如何使用编解码器内存到内存设备的更多详细信息将在以下章节中给出。