您好 TIers:
在做一个 A8 实时保存 YUV 数据的需求,有点问题请教一下:
YUV 数据量 : 1920 x 1080 x 2 = 3.95 MB
A8 从 DSP端 获取 YUV, 需要将 phy_addr 映射为 vir_addr 才可以操作。
(1) 从映射的 vir_addr 保存 YUV 文件,要耗时100多 ms;
或者
(2)将 映射的 vir_addr 使用 memcpy 到 A8 内存,耗时 100多 ms;
然后从 A8 内存 保存 YUV 文件, 耗时 13 ms;
——————————————————————————————————
看像是 从 映射的 vir_addr 到 A8 内存中,耗时比较大, 请问一下有 什么办法优化吗 ? 感谢。
Shine:
memcpy是使用cpu来拷贝,还是EDMA?建议使用EDMA比较快。
user6299109:
回复 Shine:
您好, Shine:
memcpy是在 A8 CPU 的APP 层来复制的。请问一下:EDMA 是在 A8APP 层操作 ?还是A8 驱动层?
是要 同时编码 【驱动代码 + APP 代码】 来完成吗?——————————————————————————————————————————————————————如果是驱动代码, 是否是:
在驱动层 使用EDMA复制 DSP 的 PHY 地址YUV数据————->>>A8 的 Linux驱动层;然后 A8 的 APP 层,再映射 A8 的驱动层,从而拿到数据?
如果是这样,可能也比较耗时间。
user6299109:
回复 Shine:
您好, Shine:有时间,指导一下具体实现方法,感谢。
Chris Meng:
回复 user6299109:
你好,
请问你的代码是基于那个软件包?
EDMA驱动相关信息请参考:
processors.wiki.ti.com/…/TI81XX_PSP_EDMA_Driver_User_Guide请你说的ARM内存是什么概念?
我建议你可以开辟一块DDR内存(不在Linux的内存里),专门用来存放YUV数据,做静态的地址分配,例如几个YUV buffer,这几个buffer的地址转换可以实现就做好了,不用每次计算。