当前位置: 首页 > news >正文

一次32bit有符号数据类型转换为64bit无符号数据类型引发的溢出错误

现象:

        在调试一款sensor,通过10帧->8帧->6帧,这样不断的降低帧率调试低照度下的图像效果。ISP配置文件上设置的最大曝光曝光参数为:

EXP:15266  Again:15494 Dgain:714  ISPDGain:1360。

当达到最低帧率最低亮度时,其调试工具界面上应该显示的也应该是如上最大的AE参数。

但实际情况是:在图像调试工具上显示的AE参数时,ispdgain显示居然可以达到1416,超过了isp配置中所设定的最大ispdgain阈值。
    

原因:

      当AE参数为:EXP:15266  Again:15494 Dgain:714  ISPDGain:1360,在驱动库调用接口设置相应节点EV值的时候,
      由于保存AE节点的数据类型都是设置的有符号的int类型,其最大值范围为-2147483648~2147483647,计算机中负数以补码的形式保存,故对应的二进制为:(10000000   00000000    00000000   00000000) ~(01111111   11111111   11111111  11111111)

    在计算节点最大EV值的时候,代入相应的曝光参数计算得到最大EV值为: 3360890160
    3360890160 转换为二进制为:11001000  01010011  00011101  00110000,已经超过了int的最大范围了。由于驱动库内部把最大EV值定义为无符号的64bit数据类型。转换为无符号的64位时,需要根据32位的最高位对64位高位的进行补充操作。即底层在转换将有符号数据类型转换为无符号的时候,需要根据高位进行判断,最高位是1的话则用1进行扩展高位,是0的话则用0进行扩展高位。
    即有符号的32bit 3360890160 转换为无符号的64bit类型时,转换得到如下二进制数值:
    11111111   11111111   11111111   11111111  11001000  01010011  00011101  00110000,转换为10进制为:18446744072775474480。因此对应节点最大的EV值为: 18446744072775474480
         
        AE算法逻辑计算的EV值超过最大EV值的时候,本应该限制到最大值。但是由于现在32bit 有符号转换为64bit无符号过程中,中间乘积出现了溢出情况,导致最大的EV值比实际的最大EV值大很多,无法进行最大值的EV值的限制。相当于最大EV值的限制操作失效了。
        后续调整曝光参数的过程中,特别是的照度下比较暗的情况下计算出来的EV值可能超过最大EV值,导致调试界面上显示的AE参数会超过配置文件中设置设置的最大曝光参数值。

        虽然sensor驱动会对相关的AE参数最大值进行限制,但是在应用中是通过ISP 驱动库相关的接口获取当前的AE参数,如果此时应用再将这些获取的AE操作做些逻辑处理时,可能就会引发一些错误行为。
   

措施:

        将相关节点AE参数数据类型由32bit 有符号的数据类型定义为64bit 无符号类型

http://www.lryc.cn/news/478025.html

相关文章:

  • aosp安卓15新特性dump的wms窗口层级树优化的更加美观
  • git的使用、router和route的区别以及v-show和v-if的差别
  • Win系统通过命令行查看笔记本电池损耗/寿命/健康
  • 【安当产品应用案例100集】029-使用安全芯片保护设备核心业务逻辑
  • Redis高级篇之缓存一致性详细教程
  • C++ 文件操作详解
  • 计算机网络:网络层 —— 边界网关协议 BGP
  • Python数据可视化seaborn
  • Java继承练习
  • Excel怎么转换成word?分享两种方法!
  • nignx代理获取真实地址request.getRequestURL()
  • 登录注册窗口(二)
  • go channel 通道
  • 论文阅读:Computational Long Exposure Mobile Photography (二)
  • 基于SSM+小程序的高校寻物平台管理系统(失物1)
  • gerrit 搭建遇到的问题
  • UBUNTU查看CPU核心数
  • 【JS】声明提升与块级作用域
  • Flink的流、批处理
  • 学习方法该升级了,‌AI时代的弯道超车:【心流学习法】行动与意识合一的巅峰进化
  • 【大模型LLM面试合集】大语言模型架构_chatglm系列模型
  • 深入理解 Kafka:分布式消息队列的强大力量
  • LabVIEW 离心泵机组故障诊断系统
  • GEE土地分类——土地分类的原始remap转化原始的土地分类名称
  • 一些关于云电脑与虚拟化东西
  • Java实现图片转pdf
  • 【iOS】使用AFNetworking进行网络请求
  • ThingsBoard规则链节点:RPC Call Reply节点详解
  • 【AI换装整合包及教程】OOTDiffusion:以AI技术引领的时尚换装革命
  • 排序算法详细总结