OSD和YUV两层显示驱动的设计
正在做基于BF533的一个项目,计划写一个驱动,提供两个显示接口层,包括YUV层和OSD层(RGB),实现的功能是把这两个层的显示进行叠加之后以422的格式输出到LCD或者TV out.
怎么把RGB叠加到YUV上面输出YUV了?
RGB叠加到RGB上面很简单
R = R1*α + R2*(1-α)
G = G1*α + G2*(1-α)
B = B1*α + B2*(1-α)
RGB和YUV之间有下面的转换公式(色彩空间转换)
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
我可以推导出一个YUV空间叠加的公式吗?
也就是先把OSD的RGB转换成YUV,然后叠加到YUV层上面,这里YUV是4:2:2的,也就是每个点使用一个字节的亮度值,每两个点使用一个字节的Cb值,每两个点使用一个字节的Cr值,内存存放 Y U Y V,这样叠加上去,要么OSD的画面被横向拉伸一倍,要么横向丢失一半数据,会变的模糊.
以上问题要怎么做合适呢,以上还只是设计中,还没有实际试验?