RV1126B 适配gc2093启动HDR

描述

1、使用场景


如果需要gc2093摄像头开启hdr功能,iq文件支持hdr模式,分三步走:1、设备树配置启动hdr功能 ,2、IQ文件的参数确认 3、应用程序的场景切换。


2、确认rv1126B支持hdr模式


查阅数据手册确认支持HDR_X2模式

RV1126B


3、详细调试与配置
3.1 设备树配置启动hdr


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

RV1126B

在设备树中添加配置rockchip,camera-hdr-mode = <5>,如下图所示:

RV1126B

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

RV1126B

烧写替换内核后,可以查看dmesg | grep 2093,确认hdr_mode是否为5

RV1126B

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

RV1126B

3.2、IQ文件参数确认



下⾯是⼀个标准的IQ⽂件JSON层级视图,其中main_scene为顶级数组, sub_scene为main_scene的⼦级,核⼼的IQ参数保存在每⼀个scene_ISP35结构中,当需要切换参数的时候,我们只需要指定参数所在的main_scene的名称和sub_scene的名称,程序即可找到对应的参数并完成切换
标准iq文件支持主场景normal和hdr ,在normal场景下可能还支持子场景day和night,如下图所示:
 

RV1126B


详细参数说明,

RV1126B

查阅使用gc2093的iq仅支持hdr主场景

RV1126B


3.3、应用程序的场景切换


3.3.1 启动hdr方法
1、通过rkaiq_3a_server启动
2、应用程序调用librkaiq实现
以上方法使用都可以使用这俩个api实现切换,详细参与原厂指南《Rockchip_Development_Guide_ISP35_CN.pdf》,具体api说明如下:
先使用rk_aiq_uapi2_sysctl_preInit_scene切换到normal或者hdr主场景,哪个子场景

RV1126B

再使用rk_aiq_uapi2_sysctl_prepare跑到具体做模式

RV1126B


3.3.2 启动hdr生效(以rkaiq_3A_server为例)


源码路径:external/camera_engine_rkaiq/rkaiq_3A_server/rkaiq_3A_server.cpp
查阅rkaiq_3A_server源码,默认跑iq文件的normal主场景,这是导致hdr启动失败的原因。

RV1126B


由于使用iq文件只有hdr场景,如下图所示,修改rkaiq_3A_server.cpp源码
将场景固定为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,再启动服务,查看打印信息可知:成功启动hdr功能,如下图所示:

RV1126B


4、总结


具体需要以iq文件为准,实现顺序是先切摄像头主场景/子场景,再切对应的工作模式。
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分