关于录像添加水印闪烁问题的总结

1 篇文章 0 订阅
1 篇文章 0 订阅
本文总结了在视频录像中添加水印时遇到的字符闪烁和断续线问题,问题根源在于CPU修改YUV数据后未及时刷新缓存。通过回顾在华为解决类似JPEG编解码问题的经验,了解到需要主动刷新内存以确保硬件能获取最新数据。最终,通过正确处理缓存刷新,成功解决了录像水印闪烁的问题。
摘要由CSDN通过智能技术生成

最近在做一个视频录像时添加水印的工作,添加水印的方式和实现暂且不提,有时间再详细说明,今天主要总结一下在添加水印过程中,出现的水印字符一直闪烁,字符中间出现断续线的问题。

       因为这个添加水印的原理其实就是修改YUV数据,在字符像素点出现的地方将对应位置的Y/UV数值改为对应的字符像素值,原理很简单,但是为什么出来的效果会是字符线条会有断续呢? 第一反应是是不是修改YUV数据不对,但是把YUV数据dump出来后发现YUV数据是ok的,并且,加入write yuv文件之后,由于写文件导致流程变慢,问题解决了。但是,也不能一直都写文件啊...  写文件流程变慢,和时序有关?等等,这个问题怎么好熟悉,似曾相识燕归来.....

      那还是2014年,哥还在华为的时候,当时搞jpeg编解码,当时和camera拍照对接的时候,就出现过类似的现象:camera拍完照之后,数据有问题,数据不完整,部分数据叠加的现象,dump YUV数据是好的... 

      当时是怎么解决来着..... 脑袋里空空,全没影啊,只记得到当时的怀疑和现在一样,和时序有关.....所以说,好记性不如烂笔头啊!

     ……

      折腾N久,终于搞定。曾尝试的不同办法和思路不提了。现在着重说下问题的原因和解决方法,以防再犯。

      两个问题,同一个原因:cache没刷新......

      一般系统内存管理上都会使用缓存来提升对内存操作的性能,尤其在操作有硬件使用内存(JPEG数据来自isp,录像数据也来自ISP)的时候,cpu在中间介入,对内存数据进行修改的时候,并不能立刻让修改生效而需要刷新内存。之前在华为解决拍照花屏问题,也是如此。只是当时调用ion内存管理接口,出了问题之后最终定位是由内存管理模块同事一起帮着解决的,所以对问题的根源并未有太深的印象,只记得当时ion更新了一把接口之后,问题就出现了(实际上是,ion老的接口是每次lock后都会自动刷新系统cache,而由于这种方式代价比较大,所以,后续版本优化之后,变成有内存申请和调用者去主动通知底层刷新cache,而这个api的改动我们并不知晓)。后来及时更新内存操作接口问题解决。

      而这次问题也一样,我在对YUV数据进行cpu写内存操作的时候,没有进行cache刷新。在解决问题过程中,曾怀疑是isp硬件在cpu未修改完YUV数据之前就刷新了这一段内存,所以曾尝试添加lock来锁住,但实际上并不是isp更新快了,而是cpu根本没有把写的东西刷新到真正的内存上,所以会出现断断续续的线,字符像素点时有时无。

      最后,写博客还是好习惯啊,只可惜在华为三四年,习惯丢了。如今重新捡起吧~~

      

     

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值