RV1126B 适配gc2093启动HDR

内核版本:6.1

文件系统:ubuntu22.04

1、具体问题

客户要gc2093支持hdr功能,后续提供iq文件只支持hdr模式,发现默认没有启动hdr功能

2、调试过程及遇到问题

2.1 确认RV1126b支持hdr模式

查阅rv1126b数据手册确认支持HDR_X2

2.2 设备树配置启动HDR

查阅include/uapi/linux/rk-camera-module.h

在设备树中添加该配置

复制代码
rockchip,camera-hdr-mode = <5>;

在gc2093驱动中添加打印信息定位是否启动生效

烧写固件后确认设备树配置生效,但是v4l2抓图会卡住,发现会被rkaiq_3A_server 启动后覆盖掉了

查阅rkaiq_3A_server源码,发现默认配置并不支持切换场景。默认跑iq文件的normal

源码路径:external/camera_engine_rkaiq/rkaiq_3A_server/rkaiq_3A_server.cpp

由于使用iq文件只有hdr场景,如下图所示,修改rkaiq_3A_server.cpp (这里测试过imx415 iq是支持normal和hdr场景,直接配置rkaiq_3A_server切换为hdr模式即可)

1、先使用rk_aiq_uapi2_sysctl_preInit_scene切换到hdr场景,

2、再使用rk_aiq_uapi2_sysctl_prepare这个是用于切换模式的。

这里将场景固定为RK_AIQ_WORKING_MODE_ISP_HDR2

复制代码
static void init_engine(struct rkaiq_media_info *media_info)
{
    int index;
    rk_aiq_working_mode_t  work_mode = RK_AIQ_WORKING_MODE_ISP_HDR2;
   if (work_mode){
        rk_aiq_uapi2_sysctl_preInit_scene(media_info->sensor_entity_name, "hdr","day");
        ERR("rkaiq engine prepare mode0x%x   main_scene: hdr,   sub_scene:day  !\n",work_mode);
    }
    else{
          rk_aiq_uapi2_sysctl_preInit_scene(media_info->sensor_entity_name, "normal","day");
        ERR("rkaiq engine prepare mode0x%x   main_scene: normal, sub_scene:day !\n",work_mode);
    }

    media_info->aiq_ctx = rk_aiq_uapi2_sysctl_init(media_info->sensor_entity_name,
                                                  IQ_PATH, NULL, NULL);
    /* 3A server has listened stream events already */
    rk_aiq_uapi2_sysctl_setListenStrmStatus(media_info->aiq_ctx, false);
    if (has_mul_cam)
        rk_aiq_uapi2_sysctl_setMulCamConc(media_info->aiq_ctx, 1);

    if (rk_aiq_uapi2_sysctl_prepare(media_info->aiq_ctx,
            width, height, work_mode)) {
        ERR("rkaiq engine prepare failed !\n");
        exit(-1);
    }
}

修改后重新编译rkaiq_3a_server,再启动3a_server,成功启动hdr功能

3、总结

原厂指南也有这部分说明,只是一句话带过,具体需要以iq文件为准,实现顺序是先切摄像头场景,再切模式。