本文主要是介绍RockChip RGA与DRM大小端命名冲突解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
RockChip RGA与DRM大小端命名冲突解析
概述
使用Rockchip平台RGA处理RGB数据然后送显示时,一定要注意RGA与DRM命名大小端是反着来的,否则容易出现颜色不对情况。
大小端定义
1、内存大小端区分:
自然语言
0x11223344
小端机器:
int a = 0x11223344;
cha *b = (char *)&a;
*(b + 0) = 0x44
*(b + 1) = 0x33
*(b + 2) = 0x22
*(b + 3) = 0x11
// 对应像素
0xRRGGBBAA 对应自然语言(从左往右念)应当叫做RGBA。
小端的内存排布为(从左到右:低地址->高地址):
AABBGGRR 对应自然语言(从左往右念)ABGR
大端的内存排布为(从左到右:低地址->高地址):
RRGGBBAA 对应自然语言(从左往右念)RGBA
大端机器:
int a = 0x11223344;
cha *b = (char *)&a;
*(b + 0) = 0x11
*(b + 1) = 0x22
*(b + 2) = 0x33
*(b + 3) = 0x44
像素格式命名大小端
1、DRM中的定义(小端定义)
https://github.com/torvalds/linux/blob/master/include/uapi/drm/drm_fourcc.h
2、RGA中的定义(大端定义)
3、对比都使用RGBA888格式去解析 0x11223344(自然语言)
DRM:R=0x11, G=0x22, B=0x33, A=0x44 对应RGA的:ABGR。
RGA:R=0x44, G=0x33, B=0x22, A=0x11
4、区分总结:
如名称都叫RGBA,可以将RGBA理解为自然语言,在小端模式下R要放高位,大端模式下R要放低位。因此大端命名的RGBA要对应小端命名的ABGR。
这篇关于RockChip RGA与DRM大小端命名冲突解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!