1. 简介

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

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

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

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

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