1打开设备
IAV驱动程序的主要设备是/dev/iav。用户程序应调用open()打开设备并获取其文件句柄。其他API由ioctl()系统调用来调用,这需要文件处理程序,命令代码和相应的参数。
2内存管理
启动编码后,DSP将生成编码后的比特流到由驱动程序分配的内部比特流缓冲区。为了使任何用户空间程序有效地访问缓冲区,都需要将缓冲区映射到用户空间,因此用户空间程序可以直接访问位流缓冲区。
可以通过调用分区ID为IAV_PART_BSB的命令IAV_IOC_QUERY_MEMBLOCK来查询位流缓冲区(BSB)信息。 BSB的物理地址和长度在信息结构中返回。
用户空间程序可以通过mmap系统调用获取虚拟地址。 由于BSB缓冲区是环形缓冲区,因此当帧起始地址和帧大小超过BSB长度时,DSP会包装数据并从BSB缓冲区的开头重新写入数据。 因此,通常使用双倍mmap(双倍BSB缓冲区大小)来避免特殊处理问题。
开始编码后,用户空间程序可以调用另一个ID为IAV_DESC_FRAME的ioctl命令IAV_IOC_QUERY_DESC,以从位流缓冲区中获取编码的帧。
IAV Related Memory Layout
最有效的方式与IAV共享数据,用户空间应用程序和DSP共享