ISP驱动库中径向锐化实现时所犯的低级错误

在调试径向锐化功能的时候,犯了一个低级错误。

一、现象

径向锐化调整功能本意是想复用CCM的一些参数对图像做锐度调整。预期是在图像调试工具上修改对应的参数:比如锐化调整强度,用极限值测试的话图像上的锐度会有比较明显的变化。

实际的结果是:不管如何调整CCM复用的参数,图像都没有任何变化。而且打印出来的参数也不是调试工具上设置的值,有一些值还非常的大。但是调试对应色温的CCM参数图像却是有变化的。

二、分析

cpp 复制代码
typedef struct {

     unsigned char quad_gain;
     unsigned char quad_floor;

} ISP_QUAD_GAIN;

typedef struct {

    unsigned short  range1;
    unsigned short  range2;
    unsigned short  range3;
    unsigned short  range4;
    unsigned short  range1_gain_str;
    unsigned short  range2_gain_str;
    unsigned short  range3_gain_str;
    unsigned short  range4_gain_str;
    unsigned short  range5_gain_str;
    ISP_QUAD_GAIN quad_gain_attr[4];
} ISP_SHARP_RADIAL_ATTR;

复用的CCM参数是在初始化的时候更新到以上结构体,后续径向锐化的所有操作都是以该结构体为基准进行调整。由于只是在ISP初始化的时候对其进行了参数更新,后续调试工具上修改参数后,没有更新到以上的结构体中对应的参数,导致无论调试工具端如何调整参数,图像都没有明显变化。后续直接替换板端加载的isp参数,把对应复用的CCM参数改为合适的参数,打印出来的数据符合预期。然后在调试工具上修改极限参数,图像的锐度变化还是不符合预期。间接说明的初始化后后续没有再更新相应的参数。

另外,由于复用的CCM ISP参数上默认的是某一个色温的CCM参数,CCM参数中存在负数,而ISP_SHARP_RADIAL_ATTR结构体各个成员为无符号类型的变量,导致负数转换为无符号类型的时候,其数值比较大,与实际CCM参数相差比较大。