问题描述:
相机-设置-打开照片水印-添加自定义(添加黄色表情)-拍照-观察照片
问题分析:
- 水印实现流程为:APP传输水印yuv到hal层,在hal层完成叠加动作
- dump出水印yuv图与拍照生成的yuv图观察:
水印yuv图用nv12解析时显示正常黄色表情,用nv21格式解析时显示异常蓝色表情
拍照生成的yuv图使用YUYV格式解析时显示正常 - dump出叠加完成后的yuv图观察,使用YUYV格式解析,水印显示异常蓝色表情。
- 排查水印与主图的叠加过程,发现是按照Y U V的排列顺序,遍历图像数组实现叠加操作。
- 确认YUYV和NV12的数据排列格式。参考文档:https://blog.youkuaiyun.com/cgwang_1580/article/details/79595958
- 代码中根据数组第几个元素区分Y U V三种数据,再将主图/水印的三种数据意义对应做叠加处理。
- 排查代码发现,叠加处理时:
将水印yuv图中uv plane buffer中的偶数位下标(buffer[0], buffer[2], buffer[4])作为V值处理
将水印yuv图中uv plane buffer中的奇数位下标(buffer[1], buffer[3], buffer[5])作为U值处理
对照参考文档中的格式可以发现,这是NV21的排列方式,而不是NV12的。也就是说,处理水印yuv数据时使用NV21的数据格式解析了NV12的图像数据。就导致了水印的U值与V值被颠倒。
修改方案:
调整叠加部分的代码,按照NV12的格式解析水印数据,修改后验证表情水印显示为正常的黄色。
885

被折叠的 条评论
为什么被折叠?



