![关于视频处理的硬件加速器](https://linux22.com/image/1616870/%E5%85%B3%E4%BA%8E%E8%A7%86%E9%A2%91%E5%A4%84%E7%90%86%E7%9A%84%E7%A1%AC%E4%BB%B6%E5%8A%A0%E9%80%9F%E5%99%A8.png)
如果我们在应用程序中启用硬件加速器,代码流将如何发生在硬件加速器上。如果没有,流程将如何?例如,如果启用了硬件加速器,则数据的编码和解码将由硬件完成。从应用程序中,将使用 VA API 调用视频加速器驱动程序,然后从那里调用 drm 库,从那里调用 drm 驱动程序,然后 drm 驱动程序控制硬件加速器。我在下面添加了架构图像。
这种理解是否正确?请回答你的理解以及这种方法中的任何错误和正确的方法。
还有一个问题,我选择了 vlc 播放器来播放 hdr 视频(以压缩格式存储在内存中),它使用硬件加速器进行解码,通常 cpu 获取内容位置,并需要发送到加速器来解码视频内容,这个过程将如何发生。(如果是音频,一些 i2s 模块将用于将数据发送到编解码器)。
答案1
有许多不同的编程接口用于 GPU 硬件加速视频处理。VAAPI 是其中之一,但其他接口(包括著名的 NVENC / NVDEC)也存在并被广泛使用。
在所有情况下,CPU 的工作都是使数据可供 GPU 使用 - 这可以是泵送、DMA、页面翻转等,具体取决于所使用的 API 以及是否存在公共地址空间。
通过解压缩,根据工作流程,解压缩的图像可能永远不会返回到 CPU 域,但可能会直接显示。