device->groupmgr = &core->groupmgr;
device->devicemgr = &core->devicemgr;
device->dtp_del_flag = false;
+#ifdef ENABLE_INIT_AWB
+ memset(device->init_wb, 0, sizeof(float) * WB_GAIN_COUNT);
+ memset(device->last_wb, 0, sizeof(float) * WB_GAIN_COUNT);
+ memset(device->chk_wb, 0, sizeof(float) * WB_GAIN_COUNT);
+#endif
platform_set_drvdata(pdev, device);
init_waitqueue_head(&device->instant_wait);
memset(&device->lens_ctl, 0, sizeof(struct camera2_lens_ctl));
memset(&device->flash_ctl, 0, sizeof(struct camera2_flash_ctl));
+#ifdef ENABLE_INIT_AWB
+ /* copy last awb gain value to init awb value */
+ memcpy(device->init_wb, device->last_wb, sizeof(float) * WB_GAIN_COUNT);
+#endif
+
groupmgr = device->groupmgr;
group = &device->group_sensor;
group_id = GROUP_ID_SS0 + GET_SSX_ID(GET_VIDEO(vctx));
}
#endif
+#ifdef ENABLE_INIT_AWB
+ switch (input) {
+ case SENSOR_POSITION_REAR:
+ case SENSOR_POSITION_REAR2:
+ case SENSOR_POSITION_REAR3:
+ device->init_wb_cnt = INIT_AWB_COUNT_REAR;
+ break;
+ case SENSOR_POSITION_FRONT:
+ case SENSOR_POSITION_FRONT2:
+ device->init_wb_cnt = INIT_AWB_COUNT_FRONT;
+ break;
+ default:
+ device->init_wb_cnt = 0; /* not operated */
+ break;
+ }
+#endif
+
if (device->subdev_module) {
mwarn("subdev_module is already registered", device);
v4l2_device_unregister_subdev(device->subdev_module);
goto p_err;
}
+#ifdef ENABLE_INIT_AWB
+ if ((frame->shot->ctl.aa.awbMode == AA_AWBMODE_WB_AUTO)
+ && (frame->fcount <= sensor->init_wb_cnt)
+ && memcmp(sensor->init_wb, sensor->chk_wb, sizeof(float) * WB_GAIN_COUNT)) {
+
+ /* for applying init AWB feature,
+ * 1. awbMode is AA_AWB_MODE_WB_AUTO
+ * 2. it is applied at only initial count frame num
+ * 3. set only last_ae value exist
+ */
+ memcpy(frame->shot->ctl.color.gains, sensor->init_wb, sizeof(float) * WB_GAIN_COUNT);
+ frame->shot->ctl.aa.awbMode = AA_AWBMODE_OFF;
+
+ mgrdbgs(1, "init AWB(applied cnt:%d)", group->device, group, frame, sensor->init_wb_cnt);
+ }
+#endif
+
+
PROGRAM_COUNT(8);
/*