• 内存CACHE同步引起OSD时间戳显示异常


            目前在用的这款芯片,图像翻转有专门的一个图像处理IP来完成,同时这个IP又支持叠加OSD的功能,但是在设计的时候叠加OSD的功能单元又在图像翻转单元的前面,导致了开启了图像翻转功能后,OSD就倒着显示、位置不在原来的坐标上了,那怎么办呢?

         需要在翻转图像前把OSD给记录下来他们的位置关系,然后翻转后再重新排序,重新排布位置来完成从叠加在图像上的位置不变的效果。

    比如翻转前:

    时间戳OSD显示在左上角,那么做一个上下翻转,也就是FLIP。从效果上我们当前要求FLIP后时间戳OSD显示还是在同样的位置,只是图像画面自己转了。但是得到的效果不正常,花了

    有时候显示又是正常的,如下图:

     为什么呢?

    /*****************************************************************************************************/
    声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!
    /*****************************************************************************************************/

      我们怀疑是在OSD重新排序的时候,把OSD画布内容做翻转不成功,因此做了一个实验,就是只设置一次OSD,后期时间戳不刷新,显示是正常的,只不过是倒立的,

    实验的时候,我们把做翻转的动作给取消了,相当于不翻转,图像只是倒立而已,但是做翻转的接口又是调用的OPENCV的接口,这种接口也不大可能出问题,再说它能完成一次就有理由说明人家这个翻转接口功能没问题,这种是纯软件的接口,经久耐用的接口我们应该还是信任的,那就剩OSD画布的内存同步了,怀疑是内存同步的问题。OSD画布用的是物理内存快,通过system map得到虚拟地址然后调opencv来处理,处理完后再memcpy回到映射的虚拟地址上。那怎么查呢?

        项目进行得有点深了,只能通过回看代码提交记录了,很幸运的是发现了一点情况,

    有一个提交把VB都改成CACHED的了,这样在读这个VB内存块的时候要快一些,但是回写到这个VB块就需要去做一下同步。马上做了一个实验,改完非CACHED的,

    这样操作VB慢一点,但是没有同步的问题了。

    后期还可以继续用CACHED的配置,再加一个VB flush的接口来做同步,也是可以解决问题的。

  • 相关阅读:
    点云采样方法
    Azure DevOps (九) 通过流水线推送镜像到Registry
    dflow入门5——Big step & Big parameter
    小程序的赛道越来越拥挤
    霍夫hough变换直线检测浅显理解
    我们要做怎样的测试/开发程序员,怎样提高自己的价值......
    java毕业设计Sneaker’sHome设计网站mybatis+源码+调试部署+系统+数据库+lw
    节点操作.
    Shelby American 汽车 NFT 系列来袭!
    C语言之数组练习题
  • 原文地址:https://blog.csdn.net/sundesheng125/article/details/134018097