Toybrick

新人请教一下为什么MPP解码后用fd调用RGA进行格式转换效率高

cfan

注册会员

积分
193
发表于 2021-1-7 15:55:46    查看: 12959|回复: 4 | [复制链接]    打印 | 显示全部楼层
这个是直接用地址
YUV420toRGB24_RGA(RK_FORMAT_YCrCb_420_SP,base,1280,720,RK_FORMAT_RGB_888,rgb_888,512,256,0);
这个是用fd
YUV420toRGB24_RGA_FD(RK_FORMAT_YCrCb_420_SP,mpp_buffer_fd,1280,720,RK_FORMAT_RGB_888,buf_drm[4].fb_id,512,256,0);
请教一下为什么使用fd可以少拷贝一次,是因为用虚拟地址的话要先拷贝数据到物理地址吗?因此效率高吗?
再请教一下每解码一帧视频就要进行格式转换以及缩放,是不是采用fd方式比给地址效率会更高?

回复

使用道具 举报

leok

版主

积分
894
发表于 2021-1-8 14:53:58 | 显示全部楼层
没有很理解你的意思;
正常快慢和物理地址是否连续有关,比如CMA buffer。
回复

使用道具 举报

troy

版主

积分
2374
发表于 2021-1-8 15:09:01 | 显示全部楼层
你看到的虚拟地址是属于用户层的,RGA驱动是无法直接访问用户层的数据,必须先从用户地址拷到内核空间,这是第一次拷贝操作。转换完成也是同理,RGA驱动需要从内核空间拷贝到用户空间,应用才能正常使用数据,这是第二次拷贝。
使用fd的话,驱动无需拷贝,可以直接读写fd对应区域的数据。而且通常fd用的是cma buffer,物理地址是连续的,RGA硬件操作效率会更高。而虚拟地址连续不代表物理地址连续。
回复

使用道具 举报

cfan

注册会员

积分
193
 楼主| 发表于 2021-1-9 15:38:27 | 显示全部楼层
troy 发表于 2021-1-8 15:09
你看到的虚拟地址是属于用户层的,RGA驱动是无法直接访问用户层的数据,必须先从用户地址拷到内核空间,这 ...

谢谢大佬解释,明白了。
回复

使用道具 举报

cfan

注册会员

积分
193
 楼主| 发表于 2021-1-9 15:40:22 | 显示全部楼层
leok 发表于 2021-1-8 14:53
没有很理解你的意思;
正常快慢和物理地址是否连续有关,比如CMA buffer。

emmm我对基础知识不懂所以问的不准确。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表