1. 简介

媒体设备越来越多地处理多个相关功能。许多 USB 摄像头包含麦克风,视频捕获硬件也可以输出视频,或者 SoC 摄像头接口也可以执行类似于视频编解码器的内存到内存操作。

独立的功能,即使在相同的硬件中实现,也可以被建模为单独的设备。带有麦克风的 USB 摄像头将作为 V4L2 和 ALSA 捕获设备呈现给用户空间应用程序。设备的关联关系(当使用网络摄像头时,最终用户无需手动选择关联的 USB 麦克风),虽然驱动程序不直接提供给应用程序,但通常可以从 sysfs 中检索到。

随着越来越多的高级 SoC 设备的引入,当前的方法将无法扩展。设备拓扑结构变得越来越复杂,并且不总是能用树状结构表示。硬件块在不同功能之间共享,从而在看似不相关的设备之间创建了依赖关系。

V4L2 和 ALSA 等内核抽象 API 为应用程序访问硬件参数提供了手段。随着新硬件暴露的参数数量越来越多,驱动程序需要根据有限的信息猜测应用程序真正需要什么,从而实现了属于用户空间的策略。

媒体控制器 API 旨在解决这些问题。