目录
SC035HGS_MIPI_24Minput_2lane_10bit_405Mbps_640x480_180fps.patch
提供已验证出流的sensor驱动配置
对于提供的sensor驱动配置patch已经过实测出流,如果使用后不能出流可能和当前硬件有关(如lane/dev等);
SC035HGS_MIPI_24Minput_2lane_10bit_405Mbps_640x480_180fps.patch
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/interdrv/sysconfig/sys_cfg.c b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/interdrv/sysconfig/sys_cfg.c
index 6f94620..d657a9e 100644
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/interdrv/sysconfig/sys_cfg.c
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/interdrv/sysconfig/sys_cfg.c
@@ -21,6 +21,7 @@
#define BOARD_NAME_LEN 64
#define SENSOR_NAME_SC4336P "sc4336p"
+#define SENSOR_NAME_SC035HGS "sc035hgs"
#define SENSOR_NAME_GC4023 "gc4023"
#define SENSOR_NAME_SC450AI "sc450ai"
#define SENSOR_NAME_SC500AI "sc500ai"
@@ -78,9 +79,9 @@ void *sys_config_get_reg_gpio(void)
return g_reg_gpio_base;
}
-static char g_sensor_list[SENSOR_LIST_CMDLINE_LEN] = "sns0=sc4336p,sns1=sc4336p";
+static char g_sensor_list[SENSOR_LIST_CMDLINE_LEN] = "sns0=sc035hgs,sns1=sc035hgs";
static int g_vi_intf_type = VI_MIPI_RX_MODE;
-static char g_vi_sensor_name[SENSOR_NUM][SENSOR_NAME_LEN] = {SENSOR_NAME_SC4336P, SENSOR_NAME_SC4336P};
+static char g_vi_sensor_name[SENSOR_NUM][SENSOR_NAME_LEN] = {SENSOR_NAME_SC035HGS, SENSOR_NAME_SC035HGS};
static int g_board = BOARD_DMEB_QFN;
static char g_board_name[BOARD_NAME_LEN] = BOARD_NAME_DMEB_QFN; /* sck dmeb_qfn dmeb_bga */
static bool g_ir_auto_en = 0;
@@ -91,7 +92,7 @@ osal_setup_str_param(board, g_board_name);
osal_setup_num_param(ir_auto, g_ir_auto_en);
#else
module_param_string(sensors, g_sensor_list, SENSOR_LIST_CMDLINE_LEN, 0600);
-MODULE_PARM_DESC(sensors, "sns0=sc4336p,sns1=sc4336p");
+MODULE_PARM_DESC(sensors, "sns0=sc4336p/sc035hgs,sns1=sc4336p/sc035hgs");
module_param_string(board, g_board_name, BOARD_NAME_LEN, 0600);
module_param_named(ir_auto, g_ir_auto_en, bool, 0600);
#endif
@@ -288,7 +289,8 @@ static unsigned int parse_sensor_clock(const char *name, unsigned int name_len)
(strncmp(SENSOR_NAME_SC450AI, name, len) == 0) ||
(strncmp(SENSOR_NAME_SC500AI, name, len) == 0)) {
clock = 0xA001; /* 27M */
- } else if ((strncmp(SENSOR_NAME_OS04D10, name, len) == 0)) {
+ } else if ((strncmp(SENSOR_NAME_SC035HGS, name, len) == 0) ||
+ (strncmp(SENSOR_NAME_OS04D10, name, len) == 0)) {
clock = 0x4001; /* 24M */
} else if (strncmp(MIPI_AD, name, len) == 0) {
clock = 0x8010; /* 37.125M */
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/include/ot_sns_ctrl.h b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/include/ot_sns_ctrl.h
index d75c887..6ec8215 100644
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/include/ot_sns_ctrl.h
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/include/ot_sns_ctrl.h
@@ -79,6 +79,7 @@ extern ot_isp_sns_obj g_sns_sc500ai_obj;
extern ot_isp_sns_obj g_sns_sc850sl_obj;
extern ot_isp_sns_obj g_sns_gst412c_obj;
extern ot_isp_sns_obj g_sns_sc4336p_obj;
+extern ot_isp_sns_obj g_sns_sc035hgs_obj;
extern ot_isp_sns_obj g_sns_gc4023_obj;
extern ot_isp_sns_obj g_sns_sc431hai_obj;
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/Makefile b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/Makefile
new file mode 100644
index 0000000..54c3d63
--- /dev/null
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/Makefile
@@ -0,0 +1,73 @@
+#
+# sensor lib Makefile
+#
+ifeq ($(PARAM_FILE), )
+ PARAM_FILE:=../../../../../../../Makefile.param
+ include $(PARAM_FILE)
+endif
+
+
+ifeq ($(CBB_PARAM_FILE), )
+ CBB_PARAM_FILE:=../../../../../Makefile.param
+ include $(CBB_PARAM_FILE)
+endif
+
+ISP_PATH := $(ISP_ROOT)
+EXT_PATH := $(ISP_PATH)/ext_drv/$(OT_ARCH)
+3A_PATH := $(ISP_PATH)/user/3a
+LIBPATH = ../../../lib
+OBJPATH = $(TEMP_PATH)/$(subst $(SDK_PATH)/,,$(CURDIR))/obj
+
+ARFLAGS = rcv
+ARFLAGS_SO = $(LIBS_LD_CFLAGS)
+ARFLAGS_SO += -shared -fPIC -o
+CFLAGS += -Wall -fPIC -D$(OT_FPGA)
+CFLAGS += -O2
+CFLAGS += $(LIBS_CFLAGS)
+
+ifeq ($(ISP_INI_CONFIG), y)
+CFLAGS += -D INIFILE_CONFIG_MODE
+endif
+
+
+
+ifeq ($(CONFIG_JPEGEDCF), y)
+ CFLAGS += -D ENABLE_JPEGEDCF
+endif
+
+ISP_INC := $(ISP_PATH)/include
+CUR_INC := ./
+SNS_COM_INC := ./../common/
+3A_INC := $(3A_PATH)/include
+INC := -I$(ISP_INC) -I$(CUR_INC) -I$(SNS_COM_INC) -I$(3A_INC) $(COMM_INC)
+DEPEND_FILE := $(foreach file,$(subst -I, ,$(CUR_INC)), $(wildcard $(file)/*.h))
+
+COMPILE = $(CC) $(CFLAGS) $(DFLAGS)
+
+$(OBJPATH)/%.o: ./%.c $(DEPEND_FILE)
+ @[ -e $(LIBPATH) ] || mkdir -p $(LIBPATH)
+ @[ -e $(dir $@) ] || mkdir -p $(dir $@)
+ @$(COMPILE) -o $@ -c $< $(INC)
+
+SRCS = $(wildcard ./*.c ./../common/*.c)
+OBJS = $(SRCS:%.c=%.o)
+OBJS := $(OBJS:./%=$(OBJPATH)/%)
+
+LIB_NAME := libsns_sc035hgs
+TARGETLIB := $(LIBPATH)/$(LIB_NAME).a
+TARGETLIB_SO := $(LIBPATH)/$(LIB_NAME).so
+
+all:$(TARGETLIB)
+$(TARGETLIB):$(OBJS)
+ @($(AR) $(ARFLAGS) $(TARGETLIB) $(OBJS))
+ @($(CC) $(ARFLAGS_SO) $(TARGETLIB_SO) $(OBJS))
+ @mkdir -p $(REL_LIB)
+ @cp $(TARGETLIB_SO) $(REL_LIB)
+ @cp $(TARGETLIB) $(REL_LIB)
+clean:
+ @$(RM) -rf $(TARGETLIB) $(OBJS)
+ @$(RM) -rf $(LIBPATH) $(OBJPATH)
+ @$(RM) -rf $(REL_LIB)/$(LIB_NAME).a
+ @$(RM) -rf $(REL_LIB)/$(LIB_NAME).so
+aa:
+ echo "$(INC)"
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cfg.h b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cfg.h
new file mode 100644
index 0000000..98706a5
--- /dev/null
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cfg.h
@@ -0,0 +1,140 @@
+/*
+ Copyright (c), 2001-2025, Shenshu Tech. Co., Ltd.
+ */
+
+#ifndef SC035HGS_CFG_H
+#define SC035HGS_CFG_H
+
+#include "sensor_common.h"
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C" {
+#endif
+#endif
+
+/* SC035HGS_MIPI_24Minput_2lane_10bit_405Mbps_640x480_180fps */
+static cis_reg_cfg sc035hgs_linear_640x480_180fps_10bit[] = {
+ {0x0103, 0x01},
+ {0x0100, 0x00},
+ {0x36e9, 0x80},
+ {0x36f9, 0x80},
+ {0x3000, 0x00},
+ {0x3001, 0x00},
+ {0x300f, 0x0f},
+ {0x3018, 0x33},
+ {0x3019, 0xfc},
+ {0x301c, 0x78},
+ {0x301f, 0xcc},
+ {0x3031, 0x0a},
+ {0x3037, 0x20},
+ {0x303f, 0x01},
+ {0x320c, 0x03},
+ {0x320d, 0x54},
+ {0x320e, 0x02},
+ {0x320f, 0x10},
+ {0x3217, 0x00},
+ {0x3218, 0x00},
+ {0x3220, 0x10},
+ {0x3223, 0x48},
+ {0x3226, 0x74},
+ {0x3227, 0x07},
+ {0x323b, 0x00},
+ {0x3250, 0xf0},
+ {0x3251, 0x02},
+ {0x3252, 0x02},
+ {0x3253, 0x08},
+ {0x3254, 0x02},
+ {0x3255, 0x07},
+ {0x3304, 0x48},
+ {0x3305, 0x00},
+ {0x3306, 0x60},
+ {0x3309, 0x50},
+ {0x330a, 0x00},
+ {0x330b, 0xc0},
+ {0x330c, 0x18},
+ {0x330f, 0x40},
+ {0x3310, 0x10},
+ {0x3314, 0x70},
+ {0x3315, 0x30},
+ {0x3316, 0x68},
+ {0x3317, 0x16},
+ {0x3329, 0x5c},
+ {0x332d, 0x5c},
+ {0x332f, 0x60},
+ {0x3335, 0x64},
+ {0x3344, 0x64},
+ {0x335b, 0x80},
+ {0x335f, 0x80},
+ {0x3366, 0x06},
+ {0x3385, 0x31},
+ {0x3387, 0x39},
+ {0x3389, 0x01},
+ {0x33b1, 0x03},
+ {0x33b2, 0x06},
+ {0x33bd, 0xe0},
+ {0x33bf, 0x10},
+ {0x3621, 0xa4},
+ {0x3622, 0x05},
+ {0x3624, 0x47},
+ {0x3630, 0x4a},
+ {0x3631, 0x58},
+ {0x3633, 0x52},
+ {0x3635, 0x03},
+ {0x3636, 0x25},
+ {0x3637, 0x8a},
+ {0x3638, 0x0f},
+ {0x3639, 0x08},
+ {0x363a, 0x00},
+ {0x363b, 0x48},
+ {0x363c, 0x86},
+ {0x363e, 0xf8},
+ {0x3640, 0x00},
+ {0x3641, 0x01},
+ {0x36ea, 0xf1},
+ {0x36eb, 0x0e},
+ {0x36ec, 0x1e},
+ {0x36ed, 0x03},
+ {0x36fa, 0xf1},
+ {0x36fb, 0x10},
+ {0x36fc, 0x00},
+ {0x36fd, 0x03},
+ {0x3908, 0x91},
+ {0x391b, 0x81},
+ {0x3d08, 0x01},
+ {0x3e01, 0x14},
+ {0x3e02, 0x80},
+ {0x3e03, 0x2b},
+ {0x3e06, 0x0c},
+ {0x3f04, 0x03},
+ {0x3f05, 0x34},
+ {0x4500, 0x59},
+ {0x4501, 0xc4},
+ {0x4603, 0x00},
+ {0x4800, 0x64},
+ {0x4809, 0x01},
+ {0x4810, 0x00},
+ {0x4811, 0x01},
+ {0x4837, 0x31},
+ {0x5011, 0x00},
+ {0x5988, 0x02},
+ {0x598e, 0x03},
+ {0x598f, 0x0c},
+ {0x36e9, 0x53},
+ {0x36f9, 0x53},
+ {0x0100, 0x01},
+ {0x4418, 0x0a},
+ {0x363d, 0x10},
+ {0x4419, 0x80},
+};
+
+static cis_reg_cfg sc035hgs_standby_cfg[] = {
+ {0x0100, 0x00},
+};
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos.c b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos.c
new file mode 100644
index 0000000..43089dd
--- /dev/null
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos.c
@@ -0,0 +1,1304 @@
+/*
+ Copyright (c), 2001-2025, Shenshu Tech. Co., Ltd.
+ */
+
+#include <stdio.h>
+#include "sensor_common.h"
+#include "ot_mpi_isp.h"
+#include "ot_mpi_ae.h"
+#include "ot_mpi_awb.h"
+#include "sc035hgs_cmos.h"
+#include "sc035hgs_cmos_param.h"
+#include "sc035hgs_sensor_ctrl.h"
+
+/****************************************************************************
+ * global variables *
+ ****************************************************************************/
+static cis_info g_sc035hgs_info[OT_ISP_MAX_PIPE_NUM] = {
+ [0 ...(OT_ISP_MAX_PIPE_NUM - 1)] {
+ .mutex = PTHREAD_MUTEX_INITIALIZER,
+ .sns_id = SC035HGS_ID,
+ .fswdr_mode = OT_ISP_FSWDR_NORMAL_MODE,
+ .quick_start_en = TD_FALSE,
+ .fast_ae_en = TD_FALSE,
+ .bus_info = { .i2c_dev = -1 },
+ .sns_state = TD_NULL,
+ .blc_clamp_info = TD_TRUE,
+ .mode_tbl = {
+ {
+ SC035HGS_VMAX_LINEAR,
+ SC035HGS_FULL_LINES_MAX_LINEAR,
+ SC035HGS_FPS_MAX_LINEAR,
+ SC035HGS_FPS_MIN_LINEAR,
+ SC035HGS_WIDTH_LINEAR,
+ SC035HGS_HEIGHT_LINEAR,
+ SC035HGS_MODE_LINEAR,
+ OT_WDR_MODE_NONE,
+ "SC035HGS_640X480_180FPS_10BIT_LINEAR_MODE"
+ },
+ },
+ .i2c.fd = -1,
+ }
+};
+
+/****************************************************************************
+ Again & Dgain table for TABLE Mode *
+ ****************************************************************************/
+#define SC035HGS_AGAIN_NODE_NUM 6
+#define SC035HGS_AGAIN_ADDR_INDEX_NODE_NUM 6
+#define SC035HGS_DGAIN_NODE_NUM 128
+#define SC035HGS_DGAIN_ADDR_INDEX_NODE_NUM 128
+
+static td_u32 again_index[SC035HGS_AGAIN_NODE_NUM] = {
+ 1024, 2048, 4096, 8192, 16384, 32768
+};
+
+static td_u32 dgain_index[SC035HGS_DGAIN_NODE_NUM] = {
+ 1024, 1056, 1088, 1120, 1152, 1184, 1216, 1248, 1280, 1312, 1344, 1376,
+ 1408, 1440, 1472, 1504, 1536, 1568, 1600, 1632, 1664, 1696, 1728, 1760,
+ 1792, 1824, 1856, 1888, 1920, 1952, 1984, 2016, 2048, 2112, 2176, 2240,
+ 2304, 2368, 2432, 2496, 2560, 2624, 2688, 2752, 2816, 2880, 2944, 3008,
+ 3072, 3136, 3200, 3264, 3328, 3392, 3456, 3520, 3584, 3648, 3712, 3776,
+ 3840, 3904, 3968, 4032, 4096, 4224, 4352, 4480, 4608, 4736, 4864, 4992,
+ 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 6400, 6528,
+ 6656, 6784, 6912, 7040, 7168, 7296, 7424, 7552, 7680, 7808, 7936, 8064,
+ 8192, 8448, 8704, 8960, 9216, 9472, 9728, 9984, 10240, 10496, 10752, 11008,
+ 11264, 11520, 11776, 12032, 12288, 12544, 12800, 13056, 13312, 13568, 13824, 14080,
+ 14336, 14592, 14848, 15104, 15360, 15616, 15872, 16128
+};
+
+
+static td_u32 again_table[SC035HGS_AGAIN_ADDR_INDEX_NODE_NUM] = {
+ 0x0, 0x8, 0x9, 0xb, 0x0f, 0x1f
+};
+
+static td_u32 dgain_table[SC035HGS_DGAIN_ADDR_INDEX_NODE_NUM] = {
+ 0x0080, 0x0084, 0x0088, 0x008C, 0x0090, 0x0094, 0x0098, 0x009C, 0x00A0, 0x00A4, 0x00A8, 0x00AC,
+ 0x00B0, 0x00B4, 0x00B8, 0x00BC, 0x00C0, 0x00C4, 0x00C8, 0x00CC, 0x00D0, 0x00D4, 0x00D8, 0x00DC,
+ 0x00E0, 0x00E4, 0x00E8, 0x00EC, 0x00F0, 0x00F4, 0x00F8, 0x00FC, 0x0180, 0x0184, 0x0188, 0x018C,
+ 0x0190, 0x0194, 0x0198, 0x019C, 0x01A0, 0x01A4, 0x01A8, 0x01AC, 0x01B0, 0x01B4, 0x01B8, 0x01BC,
+ 0x01C0, 0x01C4, 0x01C8, 0x01CC, 0x01D0, 0x01D4, 0x01D8, 0x01DC, 0x01E0, 0x01E4, 0x01E8, 0x01EC,
+ 0x01F0, 0x01F4, 0x01F8, 0x01FC, 0x0380, 0x0384, 0x0388, 0x038C, 0x0390, 0x0394, 0x0398, 0x039C,
+ 0x03A0, 0x03A4, 0x03A8, 0x03AC, 0x03B0, 0x03B4, 0x03B8, 0x03BC, 0x03C0, 0x03C4, 0x03C8, 0x03CC,
+ 0x03D0, 0x03D4, 0x03D8, 0x03DC, 0x03E0, 0x03E4, 0x03E8, 0x03EC, 0x03F0, 0x03F4, 0x03F8, 0x03FC,
+ 0x0780, 0x0784, 0x0788, 0x078C, 0x0790, 0x0794, 0x0798, 0x079C, 0x07A0, 0x07A4, 0x07A8, 0x07AC,
+ 0x07B0, 0x07B4, 0x07B8, 0x07BC, 0x07C0, 0x07C4, 0x07C8, 0x07CC, 0x07D0, 0x07D4, 0x07D8, 0x07DC,
+ 0x07E0, 0x07E4, 0x07E8, 0x07EC, 0x07F0, 0x07F4, 0x07F8, 0x07FC,
+};
+
+static td_bool g_standby_cfg_init[OT_ISP_MAX_PIPE_NUM] = {0};
+
+/****************************************************************************
+ * common functions *
+ ****************************************************************************/
+static cis_info *cmos_get_info(ot_vi_pipe vi_pipe)
+{
+ if (vi_pipe < 0 || vi_pipe >= OT_ISP_MAX_PIPE_NUM) {
+ return TD_NULL;
+ }
+ return &g_sc035hgs_info[vi_pipe];
+}
+
+static ot_isp_sns_state *cmos_get_state(ot_vi_pipe vi_pipe)
+{
+ if (vi_pipe < 0 || vi_pipe >= OT_ISP_MAX_PIPE_NUM) {
+ return TD_NULL;
+ }
+ return cmos_get_info(vi_pipe)->sns_state;
+}
+
+static void cmos_err_mode_print(const ot_isp_cmos_sns_image_mode *sns_image_mode, const ot_isp_sns_state *sns_state)
+{
+ isp_err_trace("Not support! Width:%u, Height:%u, Fps:%f, WDRMode:%d\n",
+ (sns_image_mode)->width, (sns_image_mode)->height, (sns_image_mode)->fps, (sns_state)->wdr_mode);
+}
+
+static td_void cmos_get_ae_comm_default(cis_info *cis, ot_isp_ae_sensor_default *ae_sns_dft,
+ const ot_isp_sns_state *sns_state)
+{
+ td_u32 lines;
+ td_float max_fps = STANDARD_FPS; /* maxfps 30 */
+
+ lines = cis->mode_tbl[sns_state->img_mode].ver_lines;
+ max_fps = cis->mode_tbl[sns_state->img_mode].max_fps;
+ if (sns_state->img_mode == SC035HGS_640X480_180FPS_10BIT_LINEAR_MODE) {
+ ae_sns_dft->int_time_accu.accu_type = OT_ISP_AE_ACCURACY_LINEAR;
+ ae_sns_dft->int_time_accu.accuracy = INT_TIME_ACCURACY;
+ ae_sns_dft->int_time_accu.offset = 0.386; /* 0.386 line */
+ }
+
+ ae_sns_dft->full_lines_std = sns_state->fl_std;
+ ae_sns_dft->flicker_freq = FLICKER_FREQ; /* light flicker freq: 50Hz, accuracy: 256 */
+ ae_sns_dft->full_lines_max = cis->mode_tbl[sns_state->img_mode].max_ver_lines;
+ ae_sns_dft->hmax_times = (td_u32)((1000000000) / ((td_float)lines * max_fps)); /* 1000000000ns, 30fps */
+
+ ae_sns_dft->again_accu.accu_type = OT_ISP_AE_ACCURACY_TABLE;
+ ae_sns_dft->again_accu.accuracy = AGAIN_ACCURACY;
+
+ ae_sns_dft->dgain_accu.accu_type = OT_ISP_AE_ACCURACY_TABLE;
+ ae_sns_dft->dgain_accu.accuracy = DGAIN_ACCURACY;
+
+ ae_sns_dft->isp_dgain_shift = ISP_DGAIN_SHIFT;
+ ae_sns_dft->min_isp_dgain_target = ISP_DGAIN_TARGET_MIN << ae_sns_dft->isp_dgain_shift; /* min 1 */
+ ae_sns_dft->max_isp_dgain_target = ISP_DGAIN_TARGET_MAX << ae_sns_dft->isp_dgain_shift; /* max 32 */
+ (td_void)memcpy_s(&ae_sns_dft->piris_attr, sizeof(ot_isp_piris_attr), &g_piris, sizeof(ot_isp_piris_attr));
+ if (cis->lines_per500ms == 0) {
+ ae_sns_dft->lines_per500ms = (td_u32)((td_float)lines * max_fps / 2); /* 30fps, div 2 */
+ } else {
+ ae_sns_dft->lines_per500ms = cis->lines_per500ms;
+ }
+
+ ae_sns_dft->max_iris_fno = OT_ISP_IRIS_F_NO_1_4;
+ ae_sns_dft->min_iris_fno = OT_ISP_IRIS_F_NO_5_6;
+
+ ae_sns_dft->ae_route_ex_valid = TD_FALSE;
+ ae_sns_dft->ae_route_attr.total_num = 0;
+ ae_sns_dft->ae_route_attr_ex.total_num = 0;
+ ae_sns_dft->quick_start.quick_start_enable = cis->quick_start_en;
+ ae_sns_dft->quick_start.black_frame_num = 0;
+ ae_sns_dft->ae_stat_pos = cis->ae_stat_pos; /* 1 use be stat to AE */
+ return;
+}
+
+static td_void cmos_get_ae_linear_default(cis_info *cis, ot_isp_ae_sensor_default *ae_sns_dft,
+ const ot_isp_sns_state *sns_state)
+{
+ ae_sns_dft->max_again = SC035HGS_AGAIN_MAX; /* max 32768 */
+ ae_sns_dft->min_again = SC035HGS_AGAIN_MIN; /* min 1024 */
+ ae_sns_dft->max_again_target = ae_sns_dft->max_again;
+ ae_sns_dft->min_again_target = ae_sns_dft->min_again;
+
+ ae_sns_dft->max_dgain = SC035HGS_DGAIN_MAX; /* max 15.75*1024 = 16128 */
+ ae_sns_dft->min_dgain = SC035HGS_DGAIN_MIN; /* min 1024 */
+ ae_sns_dft->max_dgain_target = ae_sns_dft->max_dgain;
+ ae_sns_dft->min_dgain_target = ae_sns_dft->min_dgain;
+
+ ae_sns_dft->ae_compensation = AE_COMENSATION_DEFAULT;
+ ae_sns_dft->ae_exp_mode = OT_ISP_AE_EXP_HIGHLIGHT_PRIOR;
+ ae_sns_dft->init_exposure =
+ (cis->init_exposure != 0) ? cis->init_exposure : INIT_EXP_DEFAULT_LINEAR; /* init 148859 */
+
+ ae_sns_dft->max_int_time = sns_state->fl_std - FL_OFFSET_LINEAR;
+ ae_sns_dft->min_int_time = 2; /* min int 2 */
+ ae_sns_dft->max_int_time_target = MAX_INT_TIME_TARGET; /* max int 65535 */
+ ae_sns_dft->min_int_time_target = ae_sns_dft->min_int_time;
+ ae_sns_dft->ae_route_ex_valid = cis->ae_route_ex_valid;
+ (td_void)memcpy_s(&ae_sns_dft->ae_route_attr, sizeof(ot_isp_ae_route),
+ &cis->init_ae_route, sizeof(ot_isp_ae_route));
+ (td_void)memcpy_s(&ae_sns_dft->ae_route_attr_ex, sizeof(ot_isp_ae_route_ex),
+ &cis->init_ae_route_ex, sizeof(ot_isp_ae_route_ex));
+ return;
+}
+
+static td_s32 cmos_get_ae_default(ot_vi_pipe vi_pipe, ot_isp_ae_sensor_default *ae_sns_dft)
+{
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(ae_sns_dft);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ sns_state = cis->sns_state;
+
+ sns_check_pointer_return(sns_state);
+
+ (td_void)memset_s(&ae_sns_dft->ae_route_attr, sizeof(ot_isp_ae_route), 0, sizeof(ot_isp_ae_route));
+
+ cmos_get_ae_comm_default(cis, ae_sns_dft, sns_state);
+
+ switch (sns_state->wdr_mode) {
+ case OT_WDR_MODE_NONE: /* linear mode */
+ cmos_get_ae_linear_default(cis, ae_sns_dft, sns_state);
+ break;
+ default:
+ cmos_get_ae_linear_default(cis, ae_sns_dft, sns_state);
+ break;
+ }
+
+ return TD_SUCCESS;
+}
+
+static td_void cmos_config_vmax(ot_isp_sns_state *sns_state, td_u32 vmax)
+{
+ if (sns_state->wdr_mode == OT_WDR_MODE_NONE) {
+ sns_state->regs_info[0].i2c_data[VMAX_L_IDX].data = low_8bits(vmax);
+ sns_state->regs_info[0].i2c_data[VMAX_H_IDX].data = high_8bits(vmax);
+ }
+ return;
+}
+
+/* the function of sensor set fps */
+static td_void cmos_fps_set(ot_vi_pipe vi_pipe, td_float fps, ot_isp_ae_sensor_default *ae_sns_dft)
+{
+ td_u32 lines;
+ td_u32 lines_max;
+ td_u32 vmax;
+ td_float max_fps;
+ td_float min_fps;
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+ sns_check_pointer_void_return(ae_sns_dft);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ sns_state = cis->sns_state;
+ sns_check_pointer_void_return(sns_state);
+
+ lines = cis->mode_tbl[sns_state->img_mode].ver_lines;
+ lines_max = cis->mode_tbl[sns_state->img_mode].max_ver_lines;
+ max_fps = cis->mode_tbl[sns_state->img_mode].max_fps;
+ min_fps = cis->mode_tbl[sns_state->img_mode].min_fps;
+
+ if ((fps > max_fps) || (fps < min_fps)) {
+ isp_err_trace("ISP sensor sc035hgs Not support Fps: %f\n", fps);
+ return;
+ }
+
+ vmax = (td_u32)(lines * max_fps / div_0_to_1_float(fps));
+ vmax = (vmax > lines_max) ? lines_max : vmax;
+
+ cmos_config_vmax(sns_state, vmax);
+ sns_state->fl_std = vmax;
+ ae_sns_dft->lines_per500ms = (td_u32)(lines * max_fps / 2); /* 30/2 */
+ cis->lines_per500ms = ae_sns_dft->lines_per500ms;
+
+ ae_sns_dft->fps = fps;
+ ae_sns_dft->full_lines_std = sns_state->fl_std;
+ if (sns_state->wdr_mode == OT_WDR_MODE_NONE) {
+ ae_sns_dft->max_int_time = sns_state->fl_std - FL_OFFSET_LINEAR;
+ }
+
+ sns_state->fl[0] = sns_state->fl_std;
+ ae_sns_dft->full_lines = sns_state->fl[0];
+ ae_sns_dft->hmax_times =
+ (td_u32)((1000000000) / (sns_state->fl_std * div_0_to_1_float(fps))); /* 1000000000ns */
+
+ return;
+}
+
+static td_void cmos_slow_framerate_set(ot_vi_pipe vi_pipe, td_u32 full_lines, ot_isp_ae_sensor_default *ae_sns_dft)
+{
+ td_u32 vmax;
+ td_u32 lines, lines_max;
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+ sns_check_pointer_void_return(ae_sns_dft);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ sns_state = cis->sns_state;
+ sns_check_pointer_void_return(sns_state);
+
+ lines = cis->mode_tbl[sns_state->img_mode].ver_lines;
+ lines_max = cis->mode_tbl[sns_state->img_mode].max_ver_lines;
+
+ vmax = full_lines + FL_OFFSET_LINEAR;
+
+ vmax = clip3(vmax, lines, lines_max);
+ sns_state->fl[0] = vmax;
+
+ sns_state->regs_info[0].i2c_data[VMAX_L_IDX].data = low_8bits(vmax);
+ sns_state->regs_info[0].i2c_data[VMAX_H_IDX].data = high_8bits(vmax);
+
+ if (sns_state->wdr_mode == OT_WDR_MODE_NONE) {
+ ae_sns_dft->max_int_time = sns_state->fl[0] - FL_OFFSET_LINEAR;
+ }
+ ae_sns_dft->full_lines = full_lines;
+ return;
+}
+
+static td_void cmos_inttime_update_linear(cis_info *cis, ot_isp_sns_state *sns_state, td_u32 int_time)
+{
+ if (cis->quick_start_en == TD_TRUE && cis->i2c.fd >= 0) {
+ cis_write_reg(&cis->i2c, SC035HGS_EXPO_L_ADDR, lower_4bits(int_time));
+ cis_write_reg(&cis->i2c, SC035HGS_EXPO_M_ADDR, higher_8bits(int_time));
+ cis_write_reg(&cis->i2c, SC035HGS_EXPO_H_ADDR, higher_4bits(int_time));
+ } else {
+ sns_state->regs_info[0].i2c_data[EXPO_L_IDX].data = lower_4bits(int_time);
+ sns_state->regs_info[0].i2c_data[EXPO_M_IDX].data = higher_8bits(int_time);
+ sns_state->regs_info[0].i2c_data[EXPO_H_IDX].data = higher_4bits(int_time);
+ }
+
+ return;
+}
+
+/* while isp notify ae to update sensor regs, ae call these funcs. */
+static td_void cmos_inttime_update(ot_vi_pipe vi_pipe, td_u32 int_time)
+{
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ sns_state = cis->sns_state;
+ sns_check_pointer_void_return(sns_state);
+
+ if (sns_state->wdr_mode == OT_WDR_MODE_NONE) {
+ cmos_inttime_update_linear(cis, sns_state, int_time);
+ }
+
+ return;
+}
+
+static td_void cmos_again_calc_table(ot_vi_pipe vi_pipe, td_u32 *again_lin, td_u32 *again_db)
+{
+ int i;
+ sns_check_pointer_void_return(again_lin);
+ sns_check_pointer_void_return(again_db);
+ ot_unused(vi_pipe);
+
+ if (*again_lin >= again_index[SC035HGS_AGAIN_ADDR_INDEX_NODE_NUM - 1]) {
+ *again_lin = again_index[SC035HGS_AGAIN_ADDR_INDEX_NODE_NUM - 1];
+ *again_db = again_table[SC035HGS_AGAIN_NODE_NUM - 1];
+ return;
+ }
+
+ for (i = 1; i < SC035HGS_AGAIN_NODE_NUM; i++) {
+ if (*again_lin < again_index[i]) {
+ *again_lin = again_index[i - 1];
+ *again_db = again_table[i - 1];
+ break;
+ }
+ }
+
+ return;
+}
+
+static td_void cmos_dgain_calc_table(ot_vi_pipe vi_pipe, td_u32 *dgain_lin, td_u32 *dgain_db)
+{
+ int i;
+
+ sns_check_pointer_void_return(dgain_lin);
+ sns_check_pointer_void_return(dgain_db);
+ ot_unused(vi_pipe);
+
+ if (*dgain_lin >= dgain_index[SC035HGS_DGAIN_ADDR_INDEX_NODE_NUM - 1]) {
+ *dgain_lin = dgain_index[SC035HGS_DGAIN_ADDR_INDEX_NODE_NUM - 1];
+ *dgain_db = dgain_table[SC035HGS_DGAIN_NODE_NUM - 1];
+ return;
+ }
+
+ for (i = 1; i < SC035HGS_DGAIN_NODE_NUM; i++) {
+ if (*dgain_lin < dgain_index[i]) {
+ *dgain_lin = dgain_index[i - 1];
+ *dgain_db = dgain_table[i - 1];
+ break;
+ }
+ }
+ return;
+}
+
+static td_void cmos_gains_update(ot_vi_pipe vi_pipe, td_u32 again, td_u32 dgain)
+{
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+ cis_i2c *i2c = TD_NULL;
+ td_u8 reg_0x3e09;
+ td_u8 reg_0x3e07;
+ td_u8 reg_0x3e06;
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ i2c = &cis->i2c;
+ sns_state = cis->sns_state;
+ sns_check_pointer_void_return(sns_state);
+
+ reg_0x3e06 = high_8bits(dgain);
+ reg_0x3e07 = low_8bits (dgain);
+ reg_0x3e09 = low_8bits (again);
+
+ if (cis->quick_start_en == TD_TRUE && cis->i2c.fd >= 0) {
+ cis_write_reg(i2c, SC035HGS_DGAIN_H_ADDR, reg_0x3e06);
+ cis_write_reg(i2c, SC035HGS_DGAIN_L_ADDR, reg_0x3e07);
+ cis_write_reg(i2c, SC035HGS_AGAIN_L_ADDR, reg_0x3e09);
+ } else {
+ sns_state->regs_info[0].i2c_data[DGAIN_H_IDX].data = reg_0x3e06;
+ sns_state->regs_info[0].i2c_data[DGAIN_L_IDX].data = reg_0x3e07;
+ sns_state->regs_info[0].i2c_data[AGAIN_L_IDX].data = reg_0x3e09;
+ }
+
+ return;
+}
+
+static td_void cmos_get_inttime_max(ot_vi_pipe vi_pipe, td_u16 man_ratio_enable, td_u32 *ratio,
+ ot_isp_ae_int_time_range *int_time, td_u32 *lf_max_int_time)
+{
+ ot_isp_sns_state *sns_state = TD_NULL;
+ ot_unused(man_ratio_enable);
+ sns_check_pipe_void_return(vi_pipe);
+ sns_check_pointer_void_return(ratio);
+ sns_check_pointer_void_return(int_time);
+ sns_check_pointer_void_return(lf_max_int_time);
+ sns_state = cmos_get_state(vi_pipe);
+ sns_check_pointer_void_return(sns_state);
+
+ return;
+}
+
+/* Only used in LINE_WDR mode */
+static td_void cmos_ae_fswdr_attr_set(ot_vi_pipe vi_pipe, ot_isp_ae_fswdr_attr *ae_fswdr_attr)
+{
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+ sns_check_pointer_void_return(ae_fswdr_attr);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ cis->fswdr_mode = ae_fswdr_attr->fswdr_mode;
+ cis->max_time_get_cnt = 0;
+
+ return;
+}
+
+static td_void cmos_ae_quick_start_status_set(ot_vi_pipe vi_pipe, td_bool quick_start_en)
+{
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ sns_state = cis->sns_state;
+ sns_check_pointer_void_return(sns_state);
+
+ cis->quick_start_en = quick_start_en;
+ sns_state->sync_init = TD_FALSE;
+}
+
+static td_void cmos_fast_ae_attr_get(ot_vi_pipe vi_pipe, ot_isp_ae_fast_ae_attr *fast_ae_attr)
+{
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+ sns_check_pointer_void_return(fast_ae_attr);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+ fast_ae_attr->enable = cis->fast_ae_en;
+ fast_ae_attr->sns_delay_frame = 1 + 2; /* delay 1 + 2 frame */
+}
+
+static td_void cmos_fast_ae_attr_set(ot_vi_pipe vi_pipe, const ot_isp_ae_fast_ae_attr *fast_ae_attr)
+{
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+ sns_check_pointer_void_return(fast_ae_attr);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+ cis->fast_ae_en = fast_ae_attr->enable;
+}
+
+static td_void cmos_init_ae_exp_function(ot_isp_ae_sensor_exp_func *exp_func)
+{
+ (td_void)memset_s(exp_func, sizeof(ot_isp_ae_sensor_exp_func), 0, sizeof(ot_isp_ae_sensor_exp_func));
+ exp_func->pfn_cmos_get_ae_default = cmos_get_ae_default;
+ exp_func->pfn_cmos_fps_set = cmos_fps_set;
+ exp_func->pfn_cmos_slow_framerate_set = cmos_slow_framerate_set;
+ exp_func->pfn_cmos_inttime_update = cmos_inttime_update;
+ exp_func->pfn_cmos_gains_update = cmos_gains_update;
+ exp_func->pfn_cmos_again_calc_table = cmos_again_calc_table;
+ exp_func->pfn_cmos_dgain_calc_table = cmos_dgain_calc_table;
+ exp_func->pfn_cmos_get_inttime_max = cmos_get_inttime_max;
+ exp_func->pfn_cmos_ae_fswdr_attr_set = cmos_ae_fswdr_attr_set;
+ exp_func->pfn_cmos_ae_quick_start_status_set = cmos_ae_quick_start_status_set;
+ exp_func->pfn_cmos_ae_fast_ae_attr_get = cmos_fast_ae_attr_get;
+ exp_func->pfn_cmos_ae_fast_ae_attr_set = cmos_fast_ae_attr_set;
+
+ return;
+}
+
+static td_s32 cmos_awb_get_default(ot_vi_pipe vi_pipe, ot_isp_awb_sensor_default *awb_sns_dft)
+{
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(awb_sns_dft);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ sns_state = cis->sns_state;
+ sns_check_pointer_return(sns_state);
+
+ (td_void)memset_s(awb_sns_dft, sizeof(ot_isp_awb_sensor_default), 0, sizeof(ot_isp_awb_sensor_default));
+ awb_sns_dft->wb_ref_temp = CALIBRATE_STATIC_TEMP; /* wb_ref_temp 4950 */
+
+ awb_sns_dft->gain_offset[0] = CALIBRATE_STATIC_WB_R_GAIN;
+ awb_sns_dft->gain_offset[1] = CALIBRATE_STATIC_WB_GR_GAIN;
+ awb_sns_dft->gain_offset[2] = CALIBRATE_STATIC_WB_GB_GAIN; /* index 2 */
+ awb_sns_dft->gain_offset[3] = CALIBRATE_STATIC_WB_B_GAIN; /* index 3 */
+
+ awb_sns_dft->wb_para[0] = CALIBRATE_AWB_P1;
+ awb_sns_dft->wb_para[1] = CALIBRATE_AWB_P2;
+ awb_sns_dft->wb_para[2] = CALIBRATE_AWB_Q1; /* index 2 */
+ awb_sns_dft->wb_para[3] = CALIBRATE_AWB_A1; /* index 3 */
+ awb_sns_dft->wb_para[4] = CALIBRATE_AWB_B1; /* index 4 */
+ awb_sns_dft->wb_para[5] = CALIBRATE_AWB_C1; /* index 5 */
+
+ awb_sns_dft->golden_rgain = GOLDEN_RGAIN;
+ awb_sns_dft->golden_bgain = GOLDEN_BGAIN;
+
+ switch (sns_state->wdr_mode) {
+ case OT_WDR_MODE_NONE:
+ (td_void)memcpy_s(&awb_sns_dft->ccm, sizeof(ot_isp_awb_ccm), &g_awb_ccm, sizeof(ot_isp_awb_ccm));
+ (td_void)memcpy_s(&awb_sns_dft->agc_tbl, sizeof(ot_isp_awb_agc_table),
+ &g_awb_agc_table, sizeof(ot_isp_awb_agc_table));
+ break;
+
+ default:
+ (td_void)memcpy_s(&awb_sns_dft->ccm, sizeof(ot_isp_awb_ccm), &g_awb_ccm, sizeof(ot_isp_awb_ccm));
+ (td_void)memcpy_s(&awb_sns_dft->agc_tbl, sizeof(ot_isp_awb_agc_table),
+ &g_awb_agc_table, sizeof(ot_isp_awb_agc_table));
+ break;
+ }
+
+ awb_sns_dft->init_rgain = cis->init_wb_r_gain;
+ awb_sns_dft->init_ggain = cis->init_wb_g_gain;
+ awb_sns_dft->init_bgain = cis->init_wb_b_gain;
+ awb_sns_dft->sample_rgain = cis->sample_r_gain;
+ awb_sns_dft->sample_bgain = cis->sample_b_gain;
+
+ return TD_SUCCESS;
+}
+
+static td_void cmos_init_awb_exp_function(ot_isp_awb_sensor_exp_func *exp_func)
+{
+ (td_void)memset_s(exp_func, sizeof(ot_isp_awb_sensor_exp_func), 0, sizeof(ot_isp_awb_sensor_exp_func));
+
+ exp_func->pfn_cmos_get_awb_default = cmos_awb_get_default;
+
+ return;
+}
+
+static td_void cmos_isp_get_dng_default(const ot_isp_sns_state *sns_state, ot_isp_cmos_default *isp_def)
+{
+ ot_isp_cmos_dng_color_param dng_color_param = {{ 286, 256, 608 }, { 415, 256, 429 },
+ { 2810, { 0x01AC, 0x8093, 0x8019, 0x8070, 0x01EA, 0x807A, 0x802A, 0x80F3, 0x021D }},
+ { 4940, { 0x01D7, 0x8084, 0x8053, 0x8053, 0x01D9, 0x8086, 0x8010, 0x80B3, 0x01C3 }}};
+
+ (td_void)memcpy_s(&isp_def->dng_color_param, sizeof(ot_isp_cmos_dng_color_param), &dng_color_param,
+ sizeof(ot_isp_cmos_dng_color_param));
+
+ switch (sns_state->img_mode) {
+ case SC035HGS_640X480_180FPS_10BIT_LINEAR_MODE:
+ isp_def->sns_mode.dng_raw_format.bits_per_sample = DNG_RAW_FORMAT_BIT_LINEAR; /* 10bit */
+ isp_def->sns_mode.dng_raw_format.white_level = DNG_RAW_FORMAT_WHITE_LEVEL_LINEAR; /* max 1023 */
+ break;
+ default:
+ break;
+ }
+ isp_def->sns_mode.dng_raw_format.default_scale.default_scale_hor.denominator = 1;
+ isp_def->sns_mode.dng_raw_format.default_scale.default_scale_hor.numerator = 1;
+ isp_def->sns_mode.dng_raw_format.default_scale.default_scale_ver.denominator = 1;
+ isp_def->sns_mode.dng_raw_format.default_scale.default_scale_ver.numerator = 1;
+ isp_def->sns_mode.dng_raw_format.cfa_repeat_pattern_dim.repeat_pattern_dim_row = 2; /* pattern 2 */
+ isp_def->sns_mode.dng_raw_format.cfa_repeat_pattern_dim.repeat_pattern_dim_col = 2; /* pattern 2 */
+ isp_def->sns_mode.dng_raw_format.black_level_repeat_dim.repeat_row = 2; /* pattern 2 */
+ isp_def->sns_mode.dng_raw_format.black_level_repeat_dim.repeat_col = 2; /* pattern 2 */
+ isp_def->sns_mode.dng_raw_format.cfa_layout = OT_ISP_CFALAYOUT_TYPE_RECTANGULAR;
+ isp_def->sns_mode.dng_raw_format.cfa_plane_color[0] = 0;
+ isp_def->sns_mode.dng_raw_format.cfa_plane_color[1] = 1;
+ isp_def->sns_mode.dng_raw_format.cfa_plane_color[2] = 2; /* index 2, cfa_plane_color 2 */
+ isp_def->sns_mode.dng_raw_format.cfa_pattern[0] = 0;
+ isp_def->sns_mode.dng_raw_format.cfa_pattern[1] = 1;
+ isp_def->sns_mode.dng_raw_format.cfa_pattern[2] = 1; /* index 2, cfa_pattern 1 */
+ isp_def->sns_mode.dng_raw_format.cfa_pattern[3] = 2; /* index 3, cfa_pattern 2 */
+ isp_def->sns_mode.valid_dng_raw_format = TD_TRUE;
+
+ return;
+}
+
+static void cmos_isp_get_linear_default(ot_isp_cmos_default *isp_def)
+{
+ isp_def->key.bit1_demosaic = 1;
+ isp_def->demosaic = &g_cmos_demosaic;
+ isp_def->key.bit1_sharpen = 1;
+ isp_def->sharpen = &g_cmos_yuv_sharpen;
+ isp_def->key.bit1_drc = 1;
+ isp_def->drc = &g_cmos_drc;
+ isp_def->key.bit1_bayer_nr = 1;
+ isp_def->bayer_nr = &g_cmos_bayer_nr;
+ isp_def->key.bit1_anti_false_color = 1;
+ isp_def->anti_false_color = &g_cmos_anti_false_color;
+ isp_def->key.bit1_cac = 1;
+ isp_def->cac = &g_cmos_cac;
+ isp_def->key.bit1_ldci = 1;
+ isp_def->ldci = &g_cmos_ldci;
+ isp_def->key.bit1_gamma = 1;
+ isp_def->gamma = &g_cmos_gamma;
+ isp_def->key.bit1_clut = 1;
+ isp_def->clut = &g_cmos_clut;
+#ifdef CONFIG_OT_ISP_CR_SUPPORT
+ isp_def->key.bit1_ge = 1;
+ isp_def->ge = &g_cmos_ge;
+#endif
+ isp_def->key.bit1_dehaze = 1;
+ isp_def->dehaze = &g_cmos_dehaze;
+ isp_def->key.bit1_ca = 1;
+ isp_def->ca = &g_cmos_ca;
+ (td_void)memcpy_s(&isp_def->noise_calibration, sizeof(ot_isp_noise_calibration),
+ &g_cmos_noise_calibration, sizeof(ot_isp_noise_calibration));
+ return;
+}
+
+static td_s32 cmos_isp_get_default(ot_vi_pipe vi_pipe, ot_isp_cmos_default *isp_def)
+{
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(isp_def);
+ sns_state = cmos_get_state(vi_pipe);
+ sns_check_pointer_return(sns_state);
+
+ (td_void)memset_s(isp_def, sizeof(ot_isp_cmos_default), 0, sizeof(ot_isp_cmos_default));
+#ifdef CONFIG_OT_ISP_CA_SUPPORT
+ isp_def->key.bit1_ca = 1;
+ isp_def->ca = &g_cmos_ca;
+#endif
+ isp_def->key.bit1_dpc = 1;
+ isp_def->dpc = &g_cmos_dpc;
+
+ isp_def->key.bit1_wdr = 1;
+ isp_def->wdr = &g_cmos_wdr;
+
+ isp_def->key.bit1_lsc = 0;
+ isp_def->lsc = &g_cmos_lsc;
+
+ isp_def->key.bit1_acs = 0;
+ isp_def->acs = &g_cmos_acs;
+
+#ifdef CONFIG_OT_ISP_PREGAMMA_SUPPORT
+ isp_def->key.bit1_pregamma = 0;
+ isp_def->pregamma = &g_cmos_pregamma;
+#endif
+ switch (sns_state->wdr_mode) {
+ case OT_WDR_MODE_NONE:
+ cmos_isp_get_linear_default(isp_def);
+ break;
+ default:
+ cmos_isp_get_linear_default(isp_def);
+ break;
+ }
+
+ isp_def->wdr_switch_attr.exp_ratio[0] = 0x40;
+
+ isp_def->sns_mode.sns_id = SC035HGS_ID;
+ isp_def->sns_mode.sns_mode = sns_state->img_mode;
+ cmos_isp_get_dng_default(sns_state, isp_def);
+
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_isp_get_black_level(ot_vi_pipe vi_pipe, ot_isp_cmos_black_level *black_level)
+{
+ td_s32 i;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(black_level);
+ sns_state = cmos_get_state(vi_pipe);
+ sns_check_pointer_return(sns_state);
+
+ (td_void)memcpy_s(black_level, sizeof(ot_isp_cmos_black_level), &g_cmos_blc, sizeof(ot_isp_cmos_black_level));
+
+ /* Don't need to update black level when iso change */
+ black_level->auto_attr.update = TD_FALSE;
+
+ /* black level of linear mode */
+ if (sns_state->wdr_mode == OT_WDR_MODE_NONE) {
+ for (i = 0; i < OT_ISP_BAYER_CHN_NUM; i++) {
+ black_level->auto_attr.black_level[0][i] = BLACK_LEVEL_DEFAULT;
+ }
+ } else { /* black level of DOL mode */
+ for (i = 0; i < OT_ISP_WDR_MAX_FRAME_NUM; i++) {
+ black_level->auto_attr.black_level[i][0] = BLACK_LEVEL_DEFAULT;
+ black_level->auto_attr.black_level[i][1] = BLACK_LEVEL_DEFAULT;
+ black_level->auto_attr.black_level[i][2] = BLACK_LEVEL_DEFAULT; /* index 2 */
+ black_level->auto_attr.black_level[i][3] = BLACK_LEVEL_DEFAULT; /* index 3 */
+ }
+ }
+
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_isp_get_blc_clamp_info(ot_vi_pipe vi_pipe, td_bool *blc_clamp_en)
+{
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(blc_clamp_en);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ *blc_clamp_en = cis->blc_clamp_info;
+
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_isp_set_wdr_mode(ot_vi_pipe vi_pipe, td_u8 mode)
+{
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+
+ sns_state = cmos_get_state(vi_pipe);
+ sns_check_pointer_return(sns_state);
+
+ sns_state->sync_init = TD_FALSE;
+
+ switch (mode & 0x3F) {
+ case OT_WDR_MODE_NONE:
+ sns_state->wdr_mode = OT_WDR_MODE_NONE;
+ printf("linear mode\n");
+ break;
+
+ default:
+ isp_err_trace("Not support this mode!\n");
+ return TD_FAILURE;
+ }
+
+ (td_void)memset_s(sns_state->wdr_int_time, sizeof(sns_state->wdr_int_time), 0, sizeof(sns_state->wdr_int_time));
+
+ return TD_SUCCESS;
+}
+
+static td_void cmos_comm_sns_reg_info_init(cis_info *cis, ot_isp_sns_state *sns_state)
+{
+ td_u32 i;
+ sns_state->regs_info[0].sns_type = OT_ISP_SNS_TYPE_I2C;
+ sns_state->regs_info[0].com_bus.i2c_dev = cis->bus_info.i2c_dev;
+ if (cis->quick_start_en) {
+ sns_state->regs_info[0].cfg2_valid_delay_max = 1; /* delay_max 1 */
+ } else {
+ sns_state->regs_info[0].cfg2_valid_delay_max = 2; /* delay_max 2 */
+ }
+ sns_state->regs_info[0].reg_num = REG_MAX_IDX;
+
+ for (i = 0; i < sns_state->regs_info[0].reg_num; i++) {
+ sns_state->regs_info[0].i2c_data[i].update = TD_TRUE;
+ sns_state->regs_info[0].i2c_data[i].dev_addr = SC035HGS_I2C_ADDR;
+ sns_state->regs_info[0].i2c_data[i].addr_byte_num = SC035HGS_ADDR_BYTE;
+ sns_state->regs_info[0].i2c_data[i].data_byte_num = SC035HGS_DATA_BYTE;
+ }
+
+ /* Linear Mode Regs */
+ sns_state->regs_info[0].i2c_data[EXPO_L_IDX].delay_frame_num = 0;
+ sns_state->regs_info[0].i2c_data[EXPO_L_IDX].reg_addr = SC035HGS_EXPO_L_ADDR;
+ sns_state->regs_info[0].i2c_data[EXPO_M_IDX].delay_frame_num = 0;
+ sns_state->regs_info[0].i2c_data[EXPO_M_IDX].reg_addr = SC035HGS_EXPO_M_ADDR;
+ sns_state->regs_info[0].i2c_data[EXPO_H_IDX].delay_frame_num = 0;
+ sns_state->regs_info[0].i2c_data[EXPO_H_IDX].reg_addr = SC035HGS_EXPO_H_ADDR;
+
+ sns_state->regs_info[0].i2c_data[AGAIN_L_IDX].delay_frame_num = 0;
+ sns_state->regs_info[0].i2c_data[AGAIN_L_IDX].reg_addr = SC035HGS_AGAIN_L_ADDR;
+
+ sns_state->regs_info[0].i2c_data[DGAIN_H_IDX].delay_frame_num = 0;
+ sns_state->regs_info[0].i2c_data[DGAIN_H_IDX].reg_addr = SC035HGS_DGAIN_H_ADDR;
+ sns_state->regs_info[0].i2c_data[DGAIN_L_IDX].delay_frame_num = 0;
+ sns_state->regs_info[0].i2c_data[DGAIN_L_IDX].reg_addr = SC035HGS_DGAIN_L_ADDR;
+
+ sns_state->regs_info[0].i2c_data[VMAX_L_IDX].delay_frame_num = 1;
+ sns_state->regs_info[0].i2c_data[VMAX_L_IDX].reg_addr = SC035HGS_VMAX_L_ADDR;
+ sns_state->regs_info[0].i2c_data[VMAX_H_IDX].delay_frame_num = 1;
+ sns_state->regs_info[0].i2c_data[VMAX_H_IDX].reg_addr = SC035HGS_VMAX_H_ADDR;
+ return;
+}
+
+static td_void cmos_sns_config_logic_update(ot_vi_pipe vi_pipe, ot_isp_sns_state *sns_state)
+{
+ ot_unused(vi_pipe);
+}
+
+static td_void cmos_sns_reg_info_update(ot_vi_pipe vi_pipe, ot_isp_sns_state *sns_state)
+{
+ td_u32 i;
+ ot_unused(vi_pipe);
+
+ for (i = 0; i < sns_state->regs_info[0].reg_num; i++) {
+ if (sns_state->regs_info[0].i2c_data[i].data ==
+ sns_state->regs_info[1].i2c_data[i].data) {
+ sns_state->regs_info[0].i2c_data[i].update = TD_FALSE;
+ } else {
+ sns_state->regs_info[0].i2c_data[i].update = TD_TRUE;
+ }
+ }
+
+ cmos_sns_config_logic_update(vi_pipe, sns_state);
+
+ return;
+}
+
+static td_s32 cmos_isp_get_sns_regs_info(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *sns_regs_info)
+{
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(sns_regs_info);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ sns_state = cis->sns_state;
+ sns_check_pointer_return(sns_state);
+
+ if ((sns_state->sync_init == TD_FALSE) || (sns_regs_info->config == TD_FALSE)) {
+ cmos_comm_sns_reg_info_init(cis, sns_state);
+ sns_state->sync_init = TD_TRUE;
+ } else {
+ cmos_sns_reg_info_update(vi_pipe, sns_state);
+ }
+
+ sns_regs_info->config = TD_FALSE;
+ (td_void)memcpy_s(sns_regs_info, sizeof(ot_isp_sns_regs_info),
+ &sns_state->regs_info[0], sizeof(ot_isp_sns_regs_info));
+ (td_void)memcpy_s(&sns_state->regs_info[1], sizeof(ot_isp_sns_regs_info),
+ &sns_state->regs_info[0], sizeof(ot_isp_sns_regs_info));
+ sns_state->fl[1] = sns_state->fl[0];
+
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_isp_get_standby_cfg(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *standby_cfg)
+{
+ td_s32 ret;
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(standby_cfg);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ standby_cfg->sns_type = OT_ISP_SNS_TYPE_I2C;
+ standby_cfg->com_bus.i2c_dev = cis->bus_info.i2c_dev;
+ ret = sc035hgs_get_standby_cfg(standby_cfg);
+ if (ret == TD_SUCCESS) {
+ g_standby_cfg_init[vi_pipe] = TD_TRUE;
+ }
+
+ return TD_SUCCESS;
+}
+
+
+static td_void cmos_isp_config_image_mode_param(ot_vi_pipe vi_pipe, td_u8 sns_image_mode,
+ ot_isp_sns_state *sns_state)
+{
+ ot_unused(vi_pipe);
+ switch (sns_image_mode) {
+ case SC035HGS_640X480_180FPS_10BIT_LINEAR_MODE:
+ sns_state->fl_std = SC035HGS_VMAX_LINEAR;
+ break;
+ default:
+ sns_state->fl_std = SC035HGS_VMAX_LINEAR;
+ break;
+ }
+
+ return;
+}
+
+static td_s32 cmos_isp_set_image_mode(ot_vi_pipe vi_pipe, const ot_isp_cmos_sns_image_mode *sns_image_mode)
+{
+ td_u32 i;
+ td_u8 image_mode;
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(sns_image_mode);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ sns_state = cis->sns_state;
+ sns_check_pointer_return(sns_state);
+
+ image_mode = sns_state->img_mode;
+
+ for (i = 0; i < SC035HGS_MODE_MAX; i++) {
+ if (sns_image_mode->fps <= cis->mode_tbl[i].max_fps &&
+ sns_image_mode->width <= cis->mode_tbl[i].width &&
+ sns_image_mode->height <= cis->mode_tbl[i].height &&
+ sns_state->wdr_mode == cis->mode_tbl[i].wdr_mode) {
+ image_mode = (sc035hgs_res_mode)i;
+ break;
+ }
+ }
+
+ if (i >= SC035HGS_MODE_MAX) {
+ cmos_err_mode_print(sns_image_mode, sns_state);
+ return TD_FAILURE;
+ }
+
+ cmos_isp_config_image_mode_param(vi_pipe, image_mode, sns_state);
+
+ if ((sns_state->init == TD_TRUE) && (image_mode == sns_state->img_mode)) {
+ return OT_ISP_DO_NOT_NEED_SWITCH_IMAGEMODE; /* Don't need to switch image_mode */
+ }
+
+ sns_state->sync_init = TD_FALSE;
+ sns_state->img_mode = image_mode;
+ sns_state->fl[0] = sns_state->fl_std;
+ sns_state->fl[1] = sns_state->fl[0];
+
+ return TD_SUCCESS;
+}
+
+static td_bool cmos_isp_get_quick_start_flag(ot_vi_pipe vi_pipe)
+{
+ td_s32 ret;
+ ot_isp_ctrl_param isp_ctrl_param = {};
+
+ ret = ot_mpi_isp_get_ctrl_param(vi_pipe, &isp_ctrl_param);
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("pipe[%d] call ot_mpi_isp_get_ctrl_param failed! ret = 0x%x, quick_start_flag force set to 0!\n",
+ vi_pipe, ret);
+ return TD_FALSE;
+ }
+
+ return isp_ctrl_param.quick_start_en;
+}
+
+static void cmos_isp_init(ot_vi_pipe vi_pipe)
+{
+ td_s32 ret;
+ td_bool quick_start_flag = TD_FALSE;
+ cis_info *cis = TD_NULL;
+ ot_isp_sns_state *sensor_state = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ sensor_state = cis->sns_state;
+ sns_check_pointer_void_return(sensor_state);
+
+ cis->i2c.addr = SC035HGS_I2C_ADDR;
+ cis->i2c.addr_byte_num = SC035HGS_ADDR_BYTE;
+ cis->i2c.data_byte_num = SC035HGS_DATA_BYTE;
+
+ ret = cis_i2c_init(cis);
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("i2c init failed!\n");
+ return;
+ }
+
+ quick_start_flag = cmos_isp_get_quick_start_flag(vi_pipe);
+ if (quick_start_flag == TD_TRUE) {
+ sensor_state->init = TD_TRUE;
+ return;
+ }
+
+ /* When sensor first init, config all registers */
+ sc035hgs_linear_640x480_180fps_10bit_init(cis);
+
+ sensor_state->init = TD_TRUE;
+
+ return;
+}
+
+static void cmos_isp_exit(ot_vi_pipe vi_pipe)
+{
+ td_s32 ret;
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ ret = cis_i2c_exit(cis);
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("SC500AI exit failed!\n");
+ }
+
+ return;
+}
+
+static td_void cmos_isp_global_init(ot_vi_pipe vi_pipe)
+{
+ ot_isp_sns_state *sns_state = TD_NULL;
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ sns_state = cis->sns_state;
+ sns_check_pointer_void_return(sns_state);
+
+ sns_state->init = TD_FALSE;
+ sns_state->sync_init = TD_FALSE;
+ sns_state->img_mode = SC035HGS_640X480_180FPS_10BIT_LINEAR_MODE;
+ sns_state->wdr_mode = OT_WDR_MODE_NONE;
+ sns_state->fl_std = SC035HGS_VMAX_LINEAR;
+ sns_state->fl[0] = SC035HGS_VMAX_LINEAR;
+ sns_state->fl[1] = SC035HGS_VMAX_LINEAR;
+
+ (td_void)memset_s(&sns_state->regs_info[0], sizeof(ot_isp_sns_regs_info), 0, sizeof(ot_isp_sns_regs_info));
+ (td_void)memset_s(&sns_state->regs_info[1], sizeof(ot_isp_sns_regs_info), 0, sizeof(ot_isp_sns_regs_info));
+
+ return;
+}
+
+static td_void cmos_isp_set_pixel_detect(ot_vi_pipe vi_pipe, td_bool enable)
+{
+ td_u32 full_lines_5fps, lines_max;
+ ot_isp_sns_state *sns_state = TD_NULL;
+ cis_info *cis = TD_NULL;
+ cis_i2c *i2c = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ i2c = &cis->i2c;
+ sns_state = cis->sns_state;
+ sns_check_pointer_void_return(sns_state);
+
+ if (sns_state->wdr_mode == OT_WDR_MODE_2To1_LINE) {
+ return;
+ } else {
+ if (sns_state->img_mode == SC035HGS_640X480_180FPS_10BIT_LINEAR_MODE) {
+ full_lines_5fps = (SC035HGS_VMAX_LINEAR * STANDARD_FPS) / 5; /* 180fps to 5fps */
+ } else {
+ return;
+ }
+ }
+
+ if (enable) { /* setup for ISP pixel calibration mode */
+ cis_write_reg(i2c, SC035HGS_AGAIN_L_ADDR, 0x00);
+
+ cis_write_reg(i2c, SC035HGS_DGAIN_H_ADDR, 0x00);
+ cis_write_reg(i2c, SC035HGS_DGAIN_L_ADDR, 0x80);
+
+ cis_write_reg(i2c, SC035HGS_VMAX_L_ADDR, low_8bits(full_lines_5fps));
+ cis_write_reg(i2c, SC035HGS_VMAX_H_ADDR, high_8bits(full_lines_5fps));
+
+ cis_write_reg(i2c, SC035HGS_EXPO_L_ADDR, lower_4bits(full_lines_5fps - FL_OFFSET_LINEAR));
+ cis_write_reg(i2c, SC035HGS_EXPO_M_ADDR, higher_8bits(full_lines_5fps - FL_OFFSET_LINEAR));
+ cis_write_reg(i2c, SC035HGS_EXPO_H_ADDR, higher_4bits(full_lines_5fps - FL_OFFSET_LINEAR));
+ } else { /* setup for ISP 'normal mode' */
+ lines_max = cis->mode_tbl[sns_state->img_mode].max_ver_lines;
+ sns_state->fl_std = (sns_state->fl_std > lines_max) ? lines_max : sns_state->fl_std;
+ cis_write_reg(i2c, SC035HGS_VMAX_L_ADDR, low_8bits(sns_state->fl_std));
+ cis_write_reg(i2c, SC035HGS_VMAX_H_ADDR, high_8bits(sns_state->fl_std));
+ sns_state->sync_init = TD_FALSE;
+ }
+ return;
+}
+
+static td_void cmos_init_sensor_exp_function(ot_isp_sns_exp_func *sensor_exp_func)
+{
+ (td_void)memset_s(sensor_exp_func, sizeof(ot_isp_sns_exp_func), 0, sizeof(ot_isp_sns_exp_func));
+
+ sensor_exp_func->pfn_cmos_sns_init = cmos_isp_init;
+ sensor_exp_func->pfn_cmos_sns_exit = cmos_isp_exit;
+ sensor_exp_func->pfn_cmos_sns_global_init = cmos_isp_global_init;
+ sensor_exp_func->pfn_cmos_set_image_mode = cmos_isp_set_image_mode;
+ sensor_exp_func->pfn_cmos_set_wdr_mode = cmos_isp_set_wdr_mode;
+ sensor_exp_func->pfn_cmos_get_isp_default = cmos_isp_get_default;
+ sensor_exp_func->pfn_cmos_get_isp_black_level = cmos_isp_get_black_level;
+ sensor_exp_func->pfn_cmos_get_blc_clamp_info = cmos_isp_get_blc_clamp_info;
+ sensor_exp_func->pfn_cmos_set_pixel_detect = cmos_isp_set_pixel_detect;
+ sensor_exp_func->pfn_cmos_get_sns_reg_info = cmos_isp_get_sns_regs_info;
+ sensor_exp_func->pfn_cmos_get_standby_cfg = cmos_isp_get_standby_cfg;
+}
+
+static td_s32 cmos_register_callback(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib, ot_isp_3a_alg_lib *awb_lib)
+{
+ td_s32 ret;
+ cis_register reg = {0};
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(ae_lib);
+ sns_check_pointer_return(awb_lib);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ cis->pipe = vi_pipe;
+
+ reg.ae_lib = ae_lib;
+ reg.awb_lib = awb_lib;
+
+ cmos_init_sensor_exp_function(®.isp_register.sns_exp);
+ cmos_init_ae_exp_function(®.ae_register.sns_exp);
+ cmos_init_awb_exp_function(®.awb_register.sns_exp);
+
+ ret = cis_register_callback(cis, ®);
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("cis_register_callback failed!\n");
+ return ret;
+ }
+
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_unregister_callback(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib, ot_isp_3a_alg_lib *awb_lib)
+{
+ td_s32 ret;
+ cis_register reg = {0};
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(ae_lib);
+ sns_check_pointer_return(awb_lib);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ reg.ae_lib = ae_lib;
+ reg.awb_lib = awb_lib;
+ ret = cis_unregister_callback(cis, ®);
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("cis_register_callback failed!\n");
+ return ret;
+ }
+
+ return TD_SUCCESS;
+}
+
+static void cmos_standby(ot_vi_pipe vi_pipe)
+{
+ td_s32 ret = TD_SUCCESS;
+ cis_info *cis = TD_NULL;
+
+ if (g_standby_cfg_init[vi_pipe] == TD_TRUE) {
+ return;
+ }
+
+ sns_check_pipe_void_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ ret += cis_write_reg(&cis->i2c, 0x0100, 0x00);
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("write register failed!\n");
+ }
+ return;
+}
+
+static void cmos_restart(ot_vi_pipe vi_pipe)
+{
+ td_s32 ret = TD_SUCCESS;
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_void_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_void_return(cis);
+
+ ret += cis_write_reg(&cis->i2c, 0x0100, 0x01);
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("write register failed!\n");
+ }
+ return;
+}
+
+static td_s32 cmos_write_register(ot_vi_pipe vi_pipe, td_u32 addr, td_u32 data)
+{
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ sns_check_return(cis_write_reg(&cis->i2c, addr, data));
+
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_read_register(ot_vi_pipe vi_pipe, td_u32 addr)
+{
+ ot_unused(vi_pipe);
+ ot_unused(addr);
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_set_bus_info(ot_vi_pipe vi_pipe, ot_isp_sns_commbus sns_bus_info)
+{
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ cis->bus_info.i2c_dev = sns_bus_info.i2c_dev;
+
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_set_init(ot_vi_pipe vi_pipe, ot_isp_init_attr *init_attr)
+{
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(init_attr);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ cis_init_attr(cis, init_attr);
+
+ return TD_SUCCESS;
+}
+
+static td_s32 cmos_set_fast_ae(ot_vi_pipe vi_pipe, ot_isp_sns_fast_ae_attr *fast_ae_attr)
+{
+ cis_info *cis = TD_NULL;
+
+ sns_check_pipe_return(vi_pipe);
+ sns_check_pointer_return(fast_ae_attr);
+
+ cis = cmos_get_info(vi_pipe);
+ sns_check_pointer_return(cis);
+
+ cis->fast_ae_en = fast_ae_attr->enable;
+ return TD_SUCCESS;
+}
+
+ot_isp_sns_obj g_sns_sc035hgs_obj = {
+ .pfn_register_callback = cmos_register_callback,
+ .pfn_un_register_callback = cmos_unregister_callback,
+ .pfn_standby = cmos_standby,
+ .pfn_restart = cmos_restart,
+ .pfn_mirror_flip = TD_NULL,
+ .pfn_set_blc_clamp = TD_NULL,
+ .pfn_write_reg = cmos_write_register,
+ .pfn_read_reg = cmos_read_register,
+ .pfn_set_bus_info = cmos_set_bus_info,
+ .pfn_set_init = cmos_set_init,
+ .pfn_set_fast_ae = cmos_set_fast_ae
+};
+
+ot_isp_sns_obj *sc035hgs_get_obj(td_void)
+{
+ return &g_sns_sc035hgs_obj;
+}
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos.h b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos.h
new file mode 100644
index 0000000..ebaf5e1
--- /dev/null
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos.h
@@ -0,0 +1,163 @@
+/*
+ Copyright (c), 2001-2025, Shenshu Tech. Co., Ltd.
+ */
+
+#ifndef SC035HGS_CMOS_H
+#define SC035HGS_CMOS_H
+
+#include "ot_common_isp.h"
+#include "ot_sns_ctrl.h"
+#include "securec.h"
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C" {
+#endif
+#endif
+
+/****************************************************************************
+ * basic info config *
+ ****************************************************************************/
+/* sensor ID & Resolution */
+#define SC035HGS_ID 35
+#define SC035HGS_WIDTH 640
+#define SC035HGS_HEIGHT 480
+
+/* sensor Register Address */
+#define SC035HGS_EXPO_H_ADDR 0x3E00
+#define SC035HGS_EXPO_M_ADDR 0x3E01
+#define SC035HGS_EXPO_L_ADDR 0x3E02
+#define SC035HGS_AGAIN_L_ADDR 0x3E09
+#define SC035HGS_DGAIN_H_ADDR 0x3E06
+#define SC035HGS_DGAIN_L_ADDR 0x3E07
+#define SC035HGS_VMAX_H_ADDR 0x320E
+#define SC035HGS_VMAX_L_ADDR 0x320F
+
+/****************************************************************************
+ * i2c bus config *
+ ****************************************************************************/
+/* sensor I2C bus config */
+#define SC035HGS_I2C_ADDR 0x60
+#define SC035HGS_ADDR_BYTE 2
+#define SC035HGS_DATA_BYTE 1
+
+/* common I2C bus config */
+#define I2C_DEV_FILE_NUM 16
+#define I2C_BUF_NUM 8
+
+/****************************************************************************
+ * sensor lines configs *
+ ****************************************************************************/
+/* linear mode: 24M input, 2lane, 10bit, 405Mbps, 640x480@180fps */
+#define SC035HGS_INCREASE_LINES 0
+#define SC035HGS_VMAX_VAL_LINEAR 528
+#define SC035HGS_FULL_LINES_MAX_LINEAR 0x9480 /* 528 * 180 / 2.5fps */
+#define SC035HGS_VMAX_LINEAR (SC035HGS_VMAX_VAL_LINEAR + SC035HGS_INCREASE_LINES)
+#define SC035HGS_FPS_MAX_LINEAR 180
+#define SC035HGS_FPS_MIN_LINEAR 2.5
+#define SC035HGS_WIDTH_LINEAR 640
+#define SC035HGS_HEIGHT_LINEAR 480
+#define SC035HGS_MODE_LINEAR 0
+
+/****************************************************************************
+ * sensor ae configs *
+ ****************************************************************************/
+#define SC035HGS_AGAIN_MIN 1024
+#define SC035HGS_AGAIN_MAX 32768
+
+#define SC035HGS_DGAIN_MIN 1024
+#define SC035HGS_DGAIN_MAX 16128
+
+#define ISP_DGAIN_SHIFT 8
+#define ISP_DGAIN_TARGET_MIN 1
+#define ISP_DGAIN_TARGET_MAX 32
+#define ISP_DGAIN_TARGET_WDR_MIN 1
+#define ISP_DGAIN_TARGET_WDR_MAX 4
+#define INT_TIME_ACCURACY 1
+#define AGAIN_ACCURACY 1
+#define DGAIN_ACCURACY 1
+
+#define FL_OFFSET_LINEAR 10
+/****************************************************************************
+ * sensor awb calibrate configs *
+ ****************************************************************************/
+/* awb static param for Fuji Lens New IR_Cut */
+#define CALIBRATE_STATIC_TEMP 5000
+#define CALIBRATE_STATIC_WB_R_GAIN 409
+#define CALIBRATE_STATIC_WB_GR_GAIN 256
+#define CALIBRATE_STATIC_WB_GB_GAIN 256
+#define CALIBRATE_STATIC_WB_B_GAIN 452
+
+/* Calibration results for Auto WB Planck */
+#define CALIBRATE_AWB_P1 (36)
+#define CALIBRATE_AWB_P2 220
+#define CALIBRATE_AWB_Q1 0
+#define CALIBRATE_AWB_A1 218409
+#define CALIBRATE_AWB_B1 128
+#define CALIBRATE_AWB_C1 (-167686)
+
+/* Rgain and Bgain of the golden sample */
+#define GOLDEN_RGAIN 0
+#define GOLDEN_BGAIN 0
+
+/****************************************************************************
+ * sensor other configs *
+ ****************************************************************************/
+#define STANDARD_FPS 180
+#define FLICKER_FREQ (50 * 256) /* light flicker freq: 50Hz, accuracy: 256 */
+#define INIT_EXP_DEFAULT_LINEAR 328
+#define MAX_INT_TIME_TARGET 65535
+#define AE_COMENSATION_DEFAULT 0x40
+/* Black level */
+#define BLACK_LEVEL_DEFAULT 0x410
+/* DNG */
+#define DNG_RAW_FORMAT_BIT_LINEAR 10 /* raw 10 bit */
+#define DNG_RAW_FORMAT_WHITE_LEVEL_LINEAR 1023 /* 2^10 - 1 */
+
+/****************************************************************************
+ * assist function macros *
+ ****************************************************************************/
+#define high_8bits(x) (((x) & 0xff00) >> 8)
+#define low_8bits(x) ((x) & 0x00ff)
+#define lower_4bits(x) (((x) & 0x000F) << 4)
+#define higher_8bits(x) (((x) & 0x0FF0) >> 4)
+#define higher_4bits(x) (((x) & 0xF000) >> 12)
+#ifndef clip3
+#define clip3(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
+#endif
+#ifndef max
+#define max(a, b) (((a) < (b)) ? (b) : (a))
+#endif
+#ifndef min
+#define min(a, b) (((a) > (b)) ? (b) : (a))
+#endif
+
+/****************************************************************************
+ * sensor data type defines *
+ ****************************************************************************/
+/* define your sensor modes */
+typedef enum {
+ SC035HGS_640X480_180FPS_10BIT_LINEAR_MODE = 0,
+ SC035HGS_MODE_MAX
+} sc035hgs_res_mode;
+
+typedef enum {
+ EXPO_L_IDX = 0,
+ EXPO_M_IDX,
+ EXPO_H_IDX,
+ AGAIN_L_IDX,
+ DGAIN_L_IDX,
+ DGAIN_H_IDX,
+ VMAX_L_IDX,
+ VMAX_H_IDX,
+ REG_MAX_IDX
+} sc035hgs_linear_reg_index;
+
+ot_isp_sns_obj *sc035hgs_get_obj(td_void);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif /* End of #ifdef __cplusplus */
+#endif /* SC035HGS_CMOS_H */
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos_param.h b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos_param.h
new file mode 100644
index 0000000..c2ef5ca
--- /dev/null
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_cmos_param.h
@@ -0,0 +1,3035 @@
+/*
+ Copyright (c), 2001-2025, Shenshu Tech. Co., Ltd.
+ */
+
+#ifndef SC035HGS_CMOS_PARAM_H
+#define SC035HGS_CMOS_PARAM_H
+
+#include "ot_common_awb.h"
+#include "ot_common_isp.h"
+#include "ot_common_sns.h"
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C" {
+#endif
+#endif
+
+static ot_isp_piris_attr g_piris = {
+ 0, // bStepFNOTableChange
+ 1, // bZeroIsMax
+ 94, // u16TotalStep
+ 62, // u16StepCount
+ /* Step-F number mapping table. Must be from small to large. F1.0 is 1024 and F32.0 is 1 */
+ { 30, 35, 40, 45, 50, 56, 61, 67, 73, 79, 85, 92, 98, 105, 112, 120, 127, 135, 143, 150, 158,
+ 166, 174, 183, 191, 200, 208, 217, 225, 234, 243, 252, 261, 270, 279, 289, 298, 307, 316, 325, 335, 344,
+ 353, 362, 372, 381, 390, 399, 408, 417, 426, 435, 444, 453, 462, 470, 478, 486, 493, 500, 506, 512 },
+ OT_ISP_IRIS_F_NO_1_4, // enMaxIrisFNOTarget
+ OT_ISP_IRIS_F_NO_5_6, // enMinIrisFNOTarget
+ 1,
+ 512,
+ 32
+};
+
+static const ot_isp_cmos_black_level g_cmos_blc = {
+ TD_FALSE, /* user_black_level_en */
+ {
+ {1200, 1200, 1200, 1200},
+ {1200, 1200, 1200, 1200},
+ {1200, 1200, 1200, 1200},
+ {1200, 1200, 1200, 1200},
+ }, /* user_black_level */
+ OT_ISP_BLACK_LEVEL_MODE_AUTO, /* ot_isp_black_level_mode */
+ {
+ {
+ {0x400, 0x400, 0x400, 0x400},
+ {0x400, 0x400, 0x400, 0x400},
+ {0x400, 0x400, 0x400, 0x400},
+ {0x400, 0x400, 0x400, 0x400},
+ },
+ }, /* manual_attr */
+ {
+ OT_ISP_DYNAMIC_PATTERN_RGB, /* ot_isp_black_level_dynamic_pattern */
+ {0, 0, 2592, 14}, /* ob_area */
+ 0, /* low_threshold */
+ 4095, /* high_threshold */
+ {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* dynablc offset */
+ 0x0, /* dynablc tolerance */
+ 0x0, /* filter_strength */
+ 0x0, /* separate_mode */
+ {1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024},
+ 0,
+ /* calibration black level */
+ }, /* dynamic_attr */
+ {
+ 0, /* update mode 0 */
+ {
+ {0x400, 0x400, 0x400, 0x400}, /* black level */
+ {0x400, 0x400, 0x400, 0x400}, /* black level */
+ {0x400, 0x400, 0x400, 0x400}, /* black level */
+ {0x400, 0x400, 0x400, 0x400}, /* black level */
+ },
+ },
+ {
+ {2688, 1520},
+ },
+};
+
+static const ot_isp_cmos_black_level g_cmos_blc_wdr = {
+ TD_FALSE, /* user_black_level_en */
+ {
+ {1200, 1200, 1200, 1200},
+ {1200, 1200, 1200, 1200},
+ {1200, 1200, 1200, 1200},
+ {1200, 1200, 1200, 1200},
+ }, /* user_black_level */
+ OT_ISP_BLACK_LEVEL_MODE_AUTO, /* ot_isp_black_level_mode */
+ {
+ {
+ {0x400, 0x400, 0x400, 0x400},
+ {0x400, 0x400, 0x400, 0x400},
+ {0x400, 0x400, 0x400, 0x400},
+ {0x400, 0x400, 0x400, 0x400},
+ },
+ }, /* manual_attr */
+ {
+ OT_ISP_DYNAMIC_PATTERN_RGB, /* ot_isp_black_level_dynamic_pattern */
+ {0, 0, 3840, 20}, /* ob_area */
+ 0x0, /* low_threshold */
+ 0xbb8, /* high_threshold */
+ {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, /* dynablc offset */
+ 0x0, /* dynablc tolerance */
+ 0x0, /* filter_strength */
+ 0x0, /* separate_mode */
+ {1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024},
+ 0,
+ /* calibration black level */
+ }, /* dynamic_attr */
+ {
+ 0, /* update mode 0 */
+ {
+ {0x400, 0x400, 0x400, 0x400}, /* black level */
+ {0x400, 0x400, 0x400, 0x400}, /* black level */
+ {0x400, 0x400, 0x400, 0x400}, /* black level */
+ {0x400, 0x400, 0x400, 0x400}, /* black level */
+ },
+ },
+ {
+ {2688, 1520},
+ },
+};
+static const ot_isp_dp_dynamic_attr g_cmos_dpc = {
+ 1, /* dynamic correction enable */
+
+ {
+ {
+ 0, /* twinkle suppression enable */
+ 6, /* twinkle suppression threshold */
+ 21, /* twinkle suppression slop */
+ 0, /* 0, auto mode; 1, manual mode */
+ {
+ 0, /* manual mode strength */
+ 0, /* manual mode blend ratio */
+ },
+ {
+ { 0, 0, 0, 152, 220, 220, 220, 220, 220, 220, 152, 152, 152, 152, 152, 152 }, /* strength[16] */
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50 }, /* blend_ratio[16] */
+ },
+ 96, /* strength for bright area */
+ 63, /* strength for dark area */
+ }, /* dynamic config for linear frame */
+ }
+};
+
+static const ot_isp_dp_dynamic_attr g_cmos_dpc_wdr = {
+ 1, /* dynamic correction enable */
+
+ {
+ {
+ 0, /* twinkle suppression enable */
+ 6, /* twinkle suppression threshold */
+ 21, /* twinkle suppression slop */
+ 0, /* 0, auto mode; 1, manual mode */
+ {
+ 0, /* manual mode strength */
+ 0, /* manual mode blend ratio */
+ },
+ {
+ { 230, 230, 230, 235, 235, 235, 240, 240, 240, 250, 250, 250, 250, 250, 250, 250 }, /* strength[16] */
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* blend_ratio[16] */
+ },
+ 96, /* strength for bright area */
+ 63, /* strength for dark area */
+ }, /* dynamic config for short frame */
+
+ {
+ 0, /* twinkle suppression enable */
+ 6, /* twinkle suppression threshold */
+ 21, /* twinkle suppression slop */
+ 0, /* 0, auto mode; 1, manual mode */
+ {
+ 0, /* manual mode strength */
+ 0, /* manual mode blend ratio */
+ },
+ {
+ { 230, 230, 230, 235, 235, 235, 240, 240, 240, 250, 250, 250, 250, 250, 250, 250 }, /* strength[16] */
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* blend_ratio[16] */
+ },
+ 96, /* strength for bright area */
+ 63, /* strength for dark area */
+ }, /* dynamic config for long frame */
+ }
+};
+
+#ifdef CONFIG_OT_ISP_CR_SUPPORT
+static const ot_isp_cr_attr g_cmos_ge = {
+ 1, /* en */
+ 9, /* slope */
+ 9, /* sensi_slope */
+ 300, /* sensi_threshold */
+ { 128, 128, 128, 128, 129, 129, 129, 129, 130, 130, 130, 130, 131, 131, 131, 131 }, /* strength */
+ { 300, 300, 300, 300, 310, 310, 310, 310, 320, 320, 320, 320, 330, 330, 330, 330 }, /* threshold */
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* filter_mode */
+ { 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048 } /* np_offset */
+};
+#endif
+
+static const ot_isp_demosaic_attr g_cmos_demosaic = {
+ 1, /* en */
+ OT_OP_MODE_AUTO, /* op_type */
+ 128, /* aidm_blend_ratio */
+ {
+ 48, /* nddm_strength */
+ 64, /* nddm_mf_detail_strength */
+ { 0 }, /* hf_detail_strength */
+ 2, /* detail_smooth_range */
+ 0, /* color_noise_f_threshold */
+ 8, /* color_noise_f_strength */
+ 1, /* color_noise_y_threshold */
+ 10, /* color_noise_y_strength */
+ },
+ {
+ /* nddm_strength */
+ { 48, 48, 48, 54, 54, 54, 48, 40, 40, 48, 48, 48, 48, 48, 48, 48 },
+ /* nddm_mf_detail_strength */
+ { 82, 74, 68, 60, 54, 50, 44, 40, 40, 40, 40, 32, 16, 16, 16, 16 },
+ /* hf_detail_strength */
+ {
+ { 0, 0, 1, 2, 4, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
+ },
+ /* detail_smooth_range */
+ { 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 7, 7, 7, 7 },
+ /* color_noise_f_threshold */
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* color_noise_f_strength */
+ { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 },
+ /* color_noise_y_threshold */
+ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+ /* color_noise_y_strength */
+ { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
+ }
+};
+
+static const ot_isp_anti_false_color_attr g_cmos_anti_false_color = {
+ 1, /* en */
+ OT_OP_MODE_AUTO, /* op_type */
+ { 8, 8 }, /* manual_attr */
+ {
+ { 10, 10, 8, 8, 7, 7, 7, 6, 6, 6, 5, 4, 3, 2, 1, 0 }, /* anti_false_color_threshold */
+ { 0, 4, 8, 8, 7, 7, 7, 6, 6, 6, 5, 4, 3, 2, 1, 0 }, /* anti_false_color_strength */
+ }
+};
+
+static const ot_isp_cac_attr g_cmos_cac = {
+ 1, /* en */
+ OT_OP_MODE_AUTO, /* op_type */
+ 1, /* detect_mode */
+ 35, /* purple_upper_limit */
+ (-15), /* purple_lower_limit */
+ /* acac_cfg */
+ {
+ {
+ {10, 300}, /* edge_threshold */
+ 16, /* edge_gain */
+ 3, /* cac_rb_strength */
+ 63, /* purple_alpha */
+ 63, /* edge_alpha */
+ 25, /* satu_low_threshold */
+ 16383, /* satu_high_threshold */
+ },
+ {
+ /* edge_threshold */
+ {
+ {100, 100, 100, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150},
+ {500, 500, 500, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600}
+ },
+ /* edge_gain */
+ { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 },
+ /* cac_rb_strength */
+ { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
+ /* purple_alpha */
+ { 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 },
+ /* edge_alpha */
+ { 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 },
+ /* satu_low_threshold */
+ { 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 },
+ /* satu_high_threshold */
+ { 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383,
+ 16383, 16383 },
+ }
+ },
+ /* lcac_cfg */
+ {
+ 60, /* purple_detect_range */
+ 200, /* var_threshold */
+ { 1500, 1500, 0 }, /* r_detect_threshold */
+ { 1500, 1500, 0 }, /* g_detect_threshold */
+ { 4095, 1500, 0 }, /* b_detect_threshold */
+ {
+ 0, /* de_purple_cr_strength */
+ 3, /* de_purple_cb_strength */
+ },
+ {
+ /* de_purple_cr_strength */
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* de_purple_cb_strength */
+ { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
+ }
+ }
+};
+
+static ot_isp_noise_calibration g_cmos_noise_calibration = {
+ {
+ 0, 0.0002908287, 0.0213421710, 0.0000000897, 0.0001242161, 0.0114417665,
+ 0.0002908287, 0.0213421710, 0.0000000897, 0.0001242161, 0.0114417665, 3200.0000000000, 0, 0, 0, 0
+ }
+};
+
+static const ot_isp_nr_attr g_cmos_bayer_nr = {
+ 1, /* bEnable */
+ OT_OP_MODE_AUTO, /* enOpType */
+ {
+ 1, /* md_enable */
+ },
+ 0, /* lsc_nr_enable */
+ 0, /* lsc_ratio1 */
+ {
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 90, 90, 90, 95, 95, 95, 100, 100, 100, 100, 100
+ }, /* CoringRatio */
+ {
+ 128, 128, 128, 128, 128, 128, 110, 90,
+ 77, 77, 77, 77, 77, 77, 77, 77, // u1.7 x 32 (128 = 1.0f) mix_gain
+ 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77
+ },
+ OT_ISP_MD_MODE, /* ref_mode */
+ 0, /* load_ref_enable */
+ /* snr_cfg */
+ {
+ 0, /* snr_version */
+ {
+ {
+ /* snr auto */
+ {
+ {
+ {108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108},
+ {108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108},
+ {108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108},
+ {108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108}
+ },
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, /* sfm0_detail_prot */
+ {512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512}, /* sfm1_str */
+ {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, /* sfm1_adp_strength */
+ {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}, /* sfm6_strength */
+ {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}, /* sfm7_strength */
+ {100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, /* sth */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* tss */
+ {128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128}, /* fine_str */
+ {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, /* coring_wgt */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* coring_mot_ratio */
+ { /* noisesd_lut */
+ {2, 2, 3, 3, 4, 6, 7, 15, 29, 59, 117, 234, 255, 255, 255, 255},
+ {2, 2, 3, 3, 4, 6, 7, 15, 29, 59, 117, 234, 255, 255, 255, 255},
+ {2, 2, 3, 3, 4, 6, 7, 15, 29, 59, 117, 234, 255, 255, 255, 255},
+ {3, 4, 6, 8, 11, 15, 21, 32, 50, 82, 142, 255, 255, 255, 255, 255},
+ {4, 6, 8, 11, 15, 21, 30, 43, 65, 100, 164, 255, 255, 255, 255, 255},
+ {5, 7, 9, 13, 18, 26, 36, 52, 76, 116, 183, 255, 255, 255, 255, 255},
+ {6, 8, 11, 15, 21, 29, 41, 60, 87, 129, 201, 255, 255, 255, 255, 255},
+ {7, 9, 12, 17, 23, 33, 46, 66, 96, 142, 217, 255, 255, 255, 255, 255},
+ {7, 10, 13, 18, 26, 36, 50, 72, 104, 153, 232, 255, 255, 255, 255, 255},
+ {8, 10, 14, 20, 28, 39, 54, 78, 112, 164, 246, 255, 255, 255, 255, 255},
+ {8, 11, 15, 21, 29, 41, 58, 83, 119, 174, 255, 255, 255, 255, 255, 255},
+ {9, 12, 16, 22, 31, 44, 62, 88, 126, 183, 255, 255, 255, 255, 255, 255},
+ {9, 12, 17, 23, 33, 46, 65, 93, 133, 192, 255, 255, 255, 255, 255, 255},
+ {10, 13, 18, 25, 34, 48, 68, 97, 139, 201, 255, 255, 255, 255, 255, 255},
+ {10, 14, 19, 26, 36, 50, 71, 101, 145, 209, 255, 255, 255, 255, 255, 255},
+ {11, 14, 19, 27, 37, 53, 74, 105, 150, 217, 255, 255, 255, 255, 255, 255},
+ {11, 15, 20, 28, 39, 54, 77, 109, 156, 224, 255, 255, 255, 255, 255, 255},
+ {11, 15, 21, 29, 40, 56, 79, 113, 161, 232, 255, 255, 255, 255, 255, 255},
+ {12, 16, 21, 30, 41, 58, 82, 117, 166, 239, 255, 255, 255, 255, 255, 255},
+ {12, 16, 22, 30, 43, 60, 85, 120, 171, 246, 255, 255, 255, 255, 255, 255},
+ {13, 17, 23, 31, 44, 62, 87, 124, 176, 252, 255, 255, 255, 255, 255, 255},
+ {13, 17, 23, 32, 45, 63, 89, 127, 181, 255, 255, 255, 255, 255, 255, 255},
+ {13, 17, 24, 33, 46, 65, 92, 130, 185, 255, 255, 255, 255, 255, 255, 255},
+ {14, 18, 24, 34, 47, 67, 94, 133, 190, 255, 255, 255, 255, 255, 255, 255},
+ {14, 18, 25, 35, 48, 68, 96, 137, 194, 255, 255, 255, 255, 255, 255, 255},
+ {14, 19, 26, 35, 50, 70, 98, 140, 198, 255, 255, 255, 255, 255, 255, 255},
+ {14, 19, 26, 36, 51, 71, 100, 143, 203, 255, 255, 255, 255, 255, 255, 255},
+ {15, 19, 27, 37, 52, 73, 102, 146, 207, 255, 255, 255, 255, 255, 255, 255},
+ {15, 20, 27, 38, 53, 74, 104, 148, 211, 255, 255, 255, 255, 255, 255, 255},
+ {15, 20, 28, 38, 54, 75, 106, 151, 215, 255, 255, 255, 255, 255, 255, 255},
+ {16, 21, 28, 39, 55, 77, 108, 154, 219, 255, 255, 255, 255, 255, 255, 255},
+ {16, 21, 29, 40, 56, 78, 110, 157, 222, 255, 255, 255, 255, 255, 255, 255}
+ },
+ },
+
+ /* snr manual */
+ {
+ { 108, 108, 108, 108 }, /* snr_sfm0_coarstr */
+ 16, /* sfm0_detail_prot */
+ 512, /* sfm1_str */
+ 2, /* sfm1_adp_strength */
+ 64, /* sfm6_strength */
+ 64, /* sfm7_strength */
+ 100, /* sth */
+ 0, /* tss */
+ 128, /* fine_str */
+ 50, /* coring_wgt */
+ 0, /* coring_mot_ratio */
+ {
+ 7, 7, 7, 21, 29, 35, 40, 45, 49, 53, 56, 60, 63, 66, 69, 72,
+ 74, 77, 79, 82, 84, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107
+ }, /* noisesd_lut */
+ },
+ },
+ },
+ },
+ /* md_cfg */
+ {
+ .md_cfg = {
+ /* md auto */
+ {
+ {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, /* md_mode */
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, /* md_size_ratio */
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, /* md_anti_flicker_str */
+ {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, /* md_static_ratio */
+ {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, /* md_motion_ratio */
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, /* md_static_finestr */
+ {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, /* tnr_tfs */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* user_define_md */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* user_define_slope */
+ {90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90}, /* user_define_dark_thresh */
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, /* user_define_color_thresh */
+ {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, /* sfr_r */
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, /* sfr_g */
+ {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26} /* sfr_b */
+ },
+
+ /* md_manual */
+ {
+ 2, /* md_mode */
+ 32, /* md_size_ratio */
+ 32, /* md_anti_flicker_str */
+ 26, /* md_static_ratio */
+ 13, /* md_motion_ratio */
+ 32, /* md_static_finestr */
+ 255, /* tnr_tfs */
+ 0, /* user_define_md */
+ 0, /* user_define_bright_thresh */
+ 90, /* user_define_dark_thresh */
+ 16, /* user_define_color_thresh */
+ 26, /* sfr_r */
+ 32, /* sfr_g */
+ 26 /* sfr_b */
+ },
+ },
+ },
+ /* wdr_cfg */
+ {
+ {16, 16, 16, 16}, /* sfm0_wdr_frame_str */
+ {16, 16, 16, 16}, /* sfm0_fusion_frame_str */
+ {64, 16, 16, 16}, /* snr_wdr_sfm6_strength */
+ {64, 16, 16, 16}, /* snr_wdr_sfm7_strength */
+ {64, 16, 16, 16}, /* snr_fusion_sfm6_strength */
+ {64, 16, 16, 16}, /* snr_fusion_sfm7_strength */
+ {16, 16, 16, 16}, /* md_wdr_frame_str */
+ {16, 16, 16, 16}, /* md_fusion_frame_str */
+ },
+ /* dering_cfg */
+ {
+ {
+ {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}, /* dering_strength */
+ {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}, /* dering_thresh */
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, /* dering_static_str */
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, /* dering_motion_str */
+ },
+ {
+ 64, /* dering_strength */
+ 64, /* dering_thresh */
+ 16, /* dering_static_str */
+ 16, /* dering_motion_str */
+ },
+ },
+};
+
+static const ot_isp_ldci_attr g_cmos_ldci = {
+ /* enable */
+ 1,
+ /* gauss_lpf_sigma */
+ 36,
+ /* ot_op_mode */
+ 0,
+
+ /* ot_isp_ldci_manual_attr */
+ {
+ /* ot_isp_ldci_he_wgt_attr */
+ {
+ /* he_pos_wgt */
+ {
+ 50, 80, 32
+ },
+ /* he_neg_wgt */
+ {
+ 60, 80, 128
+ }
+ },
+
+ /* blc_ctrl */
+ 20
+ },
+
+ /* ot_isp_ldci_auto_attr */
+ {
+ /* he_wgt[OT_ISP_AUTO_ISO_NUM] */
+ {
+ {{50, 80, 32}, {60, 80, 128}},
+ {{45, 80, 16}, {45, 80, 128}},
+ {{42, 70, 0}, {45, 80, 128}},
+ {{40, 70, 0}, {45, 80, 0}},
+ {{35, 70, 0}, {24, 72, 0}},
+ {{32, 64, 0}, {12, 64, 0}},
+ {{12, 24, 0}, {8, 54, 0}},
+ {{8, 20, 0}, {6, 36, 0}},
+ {{6, 12, 0}, {0, 8, 0}},
+ {{0, 8, 0}, {0, 6, 0}},
+ {{0, 6, 0}, {0, 2, 0}},
+ {{0, 2, 0}, {0, 1, 0}},
+ {{0, 1, 0}, {0, 1, 0}},
+ {{0, 1, 0}, {0, 1, 0}},
+ {{0, 1, 0}, {0, 1, 0}},
+ {{0, 1, 0}, {0, 1, 0}}
+ },
+
+ /* blc_ctrl */
+ { 20, 20, 20, 20, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 }
+ },
+
+ /* tpr_incr_coef */
+ 8,
+ /* tpr_decr_coef */
+ 8
+};
+
+static const ot_isp_gamma_attr g_cmos_gamma = {
+ 1,
+ {
+ 0, 13, 27, 40, 54, 68, 81, 95, 108, 121, 135, 150, 166, 180, 195, 210, 226, 242,
+ 259, 269, 281, 292, 303, 315, 327, 339, 352, 364, 376, 389, 402, 415, 425, 435, 446, 456,
+ 467, 477, 488, 499, 510, 521, 532, 543, 555, 566, 578, 591, 602, 613, 625, 636, 648, 659,
+ 671, 683, 695, 708, 721, 734, 748, 762, 777, 792, 809, 817, 826, 836, 845, 855, 865, 875,
+ 885, 896, 906, 917, 928, 939, 950, 961, 972, 983, 994, 1005, 1017, 1028, 1039, 1051, 1062, 1073,
+ 1085, 1096, 1107, 1118, 1129, 1140, 1151, 1161, 1172, 1182, 1193, 1203, 1213, 1223, 1234, 1244, 1254, 1264,
+ 1274, 1284, 1295, 1305, 1315, 1325, 1336, 1346, 1357, 1367, 1378, 1389, 1400, 1411, 1422, 1433, 1445, 1456,
+ 1468, 1480, 1493, 1499, 1505, 1511, 1518, 1524, 1531, 1537, 1544, 1551, 1558, 1564, 1571, 1578, 1585, 1592,
+ 1599, 1607, 1614, 1621, 1628, 1635, 1643, 1650, 1657, 1665, 1672, 1679, 1687, 1694, 1702, 1709, 1716, 1724,
+ 1731, 1738, 1746, 1753, 1761, 1768, 1775, 1783, 1790, 1797, 1804, 1811, 1819, 1826, 1833, 1840, 1847, 1854,
+ 1861, 1867, 1874, 1881, 1888, 1894, 1901, 1907, 1914, 1920, 1926, 1932, 1939, 1945, 1951, 1956, 1962, 1968,
+ 1974, 1980, 1986, 1991, 1997, 2003, 2008, 2014, 2020, 2025, 2031, 2036, 2042, 2047, 2052, 2058, 2063, 2068,
+ 2074, 2079, 2084, 2089, 2094, 2099, 2105, 2110, 2115, 2120, 2125, 2130, 2135, 2140, 2145, 2150, 2154, 2159,
+ 2164, 2169, 2174, 2179, 2183, 2188, 2193, 2198, 2202, 2207, 2212, 2217, 2221, 2226, 2231, 2235, 2240, 2244,
+ 2249, 2254, 2258, 2263, 2268, 2272, 2277, 2281, 2286, 2290, 2295, 2299, 2304, 2308, 2312, 2317, 2321, 2325,
+ 2330, 2334, 2338, 2342, 2347, 2351, 2355, 2359, 2363, 2368, 2372, 2376, 2380, 2384, 2388, 2392, 2396, 2400,
+ 2404, 2408, 2412, 2416, 2420, 2424, 2428, 2432, 2436, 2439, 2443, 2447, 2451, 2455, 2459, 2463, 2466, 2470,
+ 2474, 2478, 2482, 2485, 2489, 2493, 2497, 2500, 2504, 2508, 2512, 2515, 2519, 2523, 2527, 2530, 2534, 2538,
+ 2541, 2545, 2548, 2552, 2556, 2559, 2563, 2566, 2570, 2574, 2577, 2581, 2584, 2588, 2591, 2594, 2598, 2601,
+ 2605, 2608, 2612, 2615, 2618, 2622, 2625, 2629, 2632, 2635, 2639, 2642, 2645, 2649, 2652, 2655, 2659, 2662,
+ 2665, 2668, 2672, 2675, 2678, 2681, 2685, 2688, 2691, 2694, 2698, 2701, 2704, 2707, 2710, 2714, 2717, 2720,
+ 2723, 2727, 2730, 2733, 2736, 2739, 2743, 2746, 2749, 2752, 2755, 2758, 2762, 2765, 2768, 2771, 2774, 2777,
+ 2781, 2784, 2787, 2790, 2793, 2796, 2800, 2803, 2806, 2809, 2812, 2815, 2818, 2821, 2824, 2827, 2831, 2834,
+ 2837, 2840, 2843, 2846, 2849, 2852, 2855, 2858, 2861, 2864, 2867, 2870, 2873, 2876, 2879, 2882, 2885, 2887,
+ 2890, 2893, 2896, 2899, 2902, 2905, 2908, 2910, 2913, 2916, 2919, 2922, 2924, 2927, 2930, 2933, 2936, 2938,
+ 2941, 2944, 2946, 2949, 2952, 2954, 2957, 2960, 2962, 2965, 2967, 2970, 2972, 2975, 2978, 2980, 2983, 2985,
+ 2988, 2990, 2993, 2995, 2998, 3000, 3002, 3005, 3007, 3010, 3012, 3015, 3017, 3019, 3022, 3024, 3026, 3029,
+ 3031, 3034, 3036, 3038, 3041, 3043, 3045, 3048, 3050, 3052, 3055, 3057, 3059, 3062, 3064, 3066, 3069, 3071,
+ 3073, 3075, 3078, 3080, 3082, 3085, 3087, 3089, 3092, 3094, 3096, 3098, 3101, 3103, 3105, 3107, 3110, 3112,
+ 3114, 3116, 3119, 3121, 3123, 3125, 3128, 3130, 3132, 3134, 3136, 3139, 3141, 3143, 3145, 3147, 3149, 3152,
+ 3154, 3156, 3158, 3160, 3162, 3165, 3167, 3169, 3171, 3173, 3175, 3177, 3179, 3182, 3184, 3186, 3188, 3190,
+ 3192, 3194, 3196, 3198, 3201, 3203, 3205, 3207, 3209, 3211, 3213, 3215, 3217, 3219, 3221, 3223, 3225, 3227,
+ 3230, 3232, 3234, 3236, 3238, 3240, 3242, 3244, 3246, 3248, 3250, 3252, 3254, 3256, 3258, 3260, 3262, 3264,
+ 3266, 3268, 3270, 3272, 3274, 3276, 3278, 3280, 3282, 3283, 3285, 3287, 3289, 3291, 3293, 3295, 3297, 3299,
+ 3301, 3303, 3305, 3307, 3309, 3311, 3312, 3314, 3316, 3318, 3320, 3322, 3324, 3326, 3328, 3330, 3332, 3334,
+ 3335, 3337, 3339, 3341, 3343, 3345, 3347, 3349, 3351, 3353, 3355, 3356, 3358, 3360, 3362, 3364, 3366, 3368,
+ 3370, 3371, 3373, 3375, 3377, 3379, 3381, 3382, 3384, 3386, 3388, 3390, 3392, 3393, 3395, 3397, 3399, 3401,
+ 3403, 3404, 3406, 3408, 3410, 3412, 3413, 3415, 3417, 3419, 3421, 3423, 3424, 3426, 3428, 3430, 3432, 3434,
+ 3435, 3437, 3439, 3441, 3443, 3445, 3447, 3448, 3450, 3452, 3454, 3456, 3458, 3460, 3462, 3464, 3466, 3468,
+ 3470, 3472, 3474, 3475, 3477, 3479, 3481, 3483, 3486, 3488, 3490, 3492, 3494, 3496, 3498, 3500, 3502, 3504,
+ 3506, 3508, 3510, 3512, 3514, 3517, 3519, 3521, 3523, 3525, 3527, 3529, 3531, 3533, 3536, 3538, 3540, 3542,
+ 3544, 3546, 3548, 3550, 3553, 3555, 3557, 3559, 3561, 3563, 3565, 3568, 3570, 3572, 3574, 3576, 3578, 3580,
+ 3582, 3585, 3587, 3589, 3591, 3593, 3595, 3597, 3599, 3601, 3603, 3605, 3608, 3610, 3612, 3614, 3616, 3618,
+ 3620, 3622, 3624, 3626, 3628, 3630, 3632, 3634, 3636, 3638, 3640, 3642, 3645, 3647, 3649, 3651, 3653, 3655,
+ 3657, 3659, 3661, 3663, 3665, 3667, 3669, 3671, 3673, 3675, 3677, 3679, 3681, 3683, 3685, 3687, 3689, 3691,
+ 3693, 3695, 3697, 3699, 3701, 3704, 3706, 3708, 3710, 3712, 3714, 3716, 3718, 3720, 3722, 3724, 3726, 3728,
+ 3730, 3732, 3734, 3736, 3738, 3740, 3742, 3744, 3746, 3748, 3750, 3752, 3754, 3756, 3758, 3760, 3762, 3764,
+ 3766, 3767, 3769, 3771, 3773, 3775, 3777, 3779, 3781, 3783, 3785, 3787, 3789, 3791, 3793, 3795, 3797, 3799,
+ 3801, 3803, 3804, 3806, 3808, 3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824, 3826, 3828, 3830, 3832, 3834,
+ 3836, 3837, 3839, 3841, 3843, 3845, 3847, 3849, 3851, 3853, 3855, 3857, 3858, 3860, 3862, 3864, 3866, 3868,
+ 3870, 3872, 3873, 3875, 3877, 3879, 3881, 3883, 3885, 3887, 3888, 3890, 3892, 3894, 3896, 3898, 3900, 3902,
+ 3904, 3905, 3907, 3909, 3911, 3913, 3915, 3917, 3919, 3920, 3922, 3924, 3926, 3928, 3930, 3932, 3934, 3935,
+ 3937, 3939, 3941, 3943, 3945, 3947, 3949, 3950, 3952, 3954, 3955, 3957, 3959, 3961, 3963, 3965, 3967, 3969,
+ 3971, 3972, 3974, 3976, 3977, 3979, 3981, 3983, 3985, 3987, 3989, 3991, 3993, 3994, 3996, 3998, 4000, 4001,
+ 4003, 4005, 4006, 4008, 4010, 4012, 4014, 4016, 4018, 4020, 4022, 4023, 4025, 4027, 4028, 4030, 4032, 4034,
+ 4036, 4037, 4039, 4041, 4042, 4044, 4046, 4048, 4050, 4052, 4054, 4056, 4058, 4059, 4061, 4063, 4064, 4066,
+ 4068, 4070, 4072, 4073, 4075, 4077, 4078, 4080, 4082, 4084, 4086, 4087, 4089, 4091, 4092, 4094, 4095,
+ },
+ 3,
+};
+
+#ifdef CONFIG_OT_ISP_PREGAMMA_SUPPORT
+static const ot_isp_pregamma_attr g_cmos_pregamma = {
+ 0,
+ {
+ 0, 12417, 21619, 29902, 37641, 44997, 52063, 58896, 65536, 72012, 78344, 84552,
+ 90647, 96641, 102544, 108363, 114105, 119775, 125379, 130921, 136406, 141835, 147213, 152542,
+ 157825, 163065, 168262, 173420, 178540, 183623, 188671, 193686, 198668, 203619, 208541, 213433,
+ 218298, 223136, 227947, 232734, 237496, 242234, 246949, 251642, 256313, 260962, 265592, 270201,
+ 274790, 279360, 283912, 288446, 292962, 297460, 301942, 306407, 310855, 315288, 319706, 324108,
+ 328495, 332868, 337226, 341571, 345901, 350218, 354522, 358813, 363091, 367356, 371609, 375850,
+ 380079, 384296, 388502, 392696, 396880, 401052, 405213, 409364, 413504, 417634, 421754, 425863,
+ 429963, 434053, 438134, 442205, 446266, 450319, 454362, 458396, 462422, 466438, 470446, 474446,
+ 478437, 482420, 486395, 490361, 494320, 498270, 502213, 506148, 510076, 513996, 517908, 521813,
+ 525711, 529601, 533485, 537361, 541231, 545093, 548949, 552798, 556640, 560475, 564305, 568127,
+ 571943, 575753, 579557, 583354, 587145, 590930, 594709, 598482, 602249, 606010, 609765, 613515,
+ 617259, 620997, 624729, 628456, 632178, 635894, 639604, 643309, 647009, 650704, 654393, 658077,
+ 661756, 665430, 669099, 672763, 676421, 680075, 683724, 687368, 691008, 694642, 698272, 701897,
+ 705517, 709133, 712744, 716351, 719953, 723550, 727143, 730732, 734316, 737896, 741471, 745043,
+ 748610, 752172, 755731, 759285, 762835, 766381, 769923, 773461, 776995, 780525, 784050, 787572,
+ 791090, 794604, 798114, 801620, 805123, 808622, 812116, 815608, 819095, 822579, 826059, 829535,
+ 833008, 836477, 839942, 843404, 846862, 850317, 853768, 857216, 860661, 864102, 867539, 870973,
+ 874404, 877831, 881255, 884676, 888093, 891507, 894918, 898326, 901730, 905131, 908529, 911924,
+ 915316, 918704, 922090, 925472, 928851, 932227, 935600, 938970, 942337, 945701, 949062, 952420,
+ 955775, 959127, 962477, 965823, 969166, 972507, 975845, 979179, 982511, 985840, 989167, 992490,
+ 995811, 999129, 1002444, 1005757, 1009067, 1012374, 1015678, 1018980, 1022279, 1025575, 1028869, 1032160,
+ 1035448, 1038734, 1042017, 1045298, 1048575
+ }
+};
+#endif
+
+static const ot_isp_sharpen_attr g_cmos_yuv_sharpen = {
+ /* en */
+ 1,
+ /* motion_en */
+ 0,
+ /* motion_threshold0 */
+ 2,
+ /* motion_threshold1 */
+ 8,
+ /* motion_gain0 */
+ 0,
+ /* motion_gain1 */
+ 256,
+ /* skin_umin */
+ 100,
+ /* skin_vmin */
+ 135,
+ /* skin_umax */
+ 128,
+ /* skin_vmax */
+ 150,
+ /* op_type */
+ OT_OP_MODE_AUTO,
+ /* detail_map */
+ OT_ISP_SHARPEN_NORMAL,
+ /* manual para */
+ {
+ /* luma_wgt[OT_ISP_SHARPEN_LUMA_NUM] */
+ {
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31
+ },
+ /* texture_strength[OT_ISP_SHARPEN_GAIN_NUM] */
+ {
+ 250, 420, 390, 390, 390, 390, 390, 370, 350, 330, 310, 290, 270, 270, 270, 270,
+ 270, 270, 266, 260, 244, 230, 230, 230, 230, 230, 230, 210, 190, 190, 170, 150
+ },
+ /* edge_strength[OT_ISP_SHARPEN_GAIN_NUM] */
+ {
+ 120, 123, 125, 128, 130, 135, 140, 148, 160, 168, 180, 190, 200, 210, 210, 210,
+ 210, 210, 200, 190, 185, 175, 165, 160, 146, 136, 130, 128, 125, 123, 120, 120
+ },
+ /* texture_freq */
+ 190,
+ /* edge_freq */
+ 128,
+ /* over_shoot */
+ 65,
+ /* under_shoot */
+ 75,
+ /* motion_texture_strength[OT_ISP_SHARPEN_GAIN_NUM] */
+ {
+ 250, 420, 390, 390, 390, 390, 390, 370, 350, 330, 310, 290, 270, 270, 270, 270,
+ 270, 270, 266, 260, 244, 230, 230, 230, 230, 230, 230, 210, 190, 190, 170, 150
+ },
+ /* motion_edge_strength[OT_ISP_SHARPEN_GAIN_NUM] */
+ {
+ 120, 123, 125, 128, 130, 135, 140, 148, 160, 168, 180, 190, 200, 210, 210, 210,
+ 210, 210, 200, 190, 185, 175, 165, 160, 146, 136, 130, 128, 125, 123, 120, 120
+ },
+ /* motion_texture_freq */
+ 190,
+ /* motion_edge_freq */
+ 128,
+ /* motion_over_shoot */
+ 65,
+ /* motion_under_shoot */
+ 75,
+ /* u8shoot_sup_str */
+ 7,
+ /* u8shoot_sup_adj */
+ 9,
+ /* detail_ctrl */
+ 128,
+ /* detail_ctrl_threshold */
+ 180,
+ /* edge_filt_strength */
+ 60,
+ /* edge_filt_max_cap */
+ 18,
+ /* r_gain */
+ 20,
+ /* g_gain */
+ 32,
+ /* b_gain */
+ 20,
+ /* skin_gain */
+ 25,
+ /* max_sharp_gain */
+ 40,
+ {
+ /* shoot_inner_threshold */
+ 0,
+ /* shoot_outer_threshold */
+ 0,
+ /* shoot_protect_threshold */
+ 0,
+ },
+
+ {
+ /* edge_rly_fine_threshold */
+ 0,
+ /* edge_rly_coarse_threshold */
+ 0,
+ /* edge_overshoot */
+ 65,
+ /* edge_undershoot */
+ 120,
+ /* edge_gain_by_rly[OT_ISP_SHARPEN_RLYWGT_NUM] */
+ {
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
+ },
+ /* edge_rly_by_mot[OT_ISP_SHARPEN_STDGAIN_NUM] */
+ {
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
+ },
+ /* edge_rly_by_luma[OT_ISP_SHARPEN_STDGAIN_NUM] */
+ {
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
+ },
+ },
+ {
+ /* mf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM] */
+ {
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
+ },
+ /* hf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM] */
+ {
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
+ },
+ /* lmt_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM] */
+ {
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
+ },
+ },
+ },
+ /* auto para */
+ {
+ /* luma_wgt[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ { 31, 31, 20, 20, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 },
+ { 31, 31, 20, 20, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 },
+ { 31, 31, 20, 20, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 },
+ { 31, 31, 20, 20, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 },
+ { 31, 31, 20, 20, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 },
+ { 31, 31, 20, 20, 17, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 },
+ { 31, 31, 20, 20, 20, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
+ { 31, 31, 23, 23, 23, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21 },
+ { 31, 31, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 },
+ { 31, 31, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 28, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 }
+ },
+ /* texture_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ { 153, 153, 160, 145, 130, 130, 130, 105, 105, 105, 105, 85, 85, 85, 85, 85 },
+ { 172, 167, 190, 170, 145, 145, 145, 120, 120, 120, 120, 100, 100, 100, 100, 100 },
+ { 186, 178, 220, 195, 165, 165, 160, 140, 140, 135, 135, 120, 120, 120, 120, 120 },
+ { 201, 192, 255, 215, 180, 180, 175, 160, 160, 150, 150, 135, 135, 140, 140, 140 },
+ { 217, 207, 275, 230, 200, 200, 185, 175, 175, 160, 160, 150, 150, 160, 160, 160 },
+ { 233, 223, 285, 245, 210, 215, 200, 190, 190, 170, 170, 165, 165, 180, 180, 180 },
+ { 251, 239, 280, 260, 225, 225, 215, 205, 205, 180, 180, 185, 185, 200, 200, 200 },
+ { 269, 255, 275, 265, 240, 240, 230, 220, 220, 190, 190, 200, 200, 210, 210, 210 },
+ { 286, 272, 270, 270, 250, 250, 240, 225, 225, 200, 200, 220, 220, 220, 220, 220 },
+ { 300, 288, 265, 270, 250, 260, 245, 235, 235, 210, 210, 235, 235, 230, 230, 230 },
+ { 308, 299, 260, 265, 250, 270, 255, 245, 245, 220, 220, 245, 245, 230, 230, 230 },
+ { 312, 307, 260, 260, 250, 275, 260, 250, 250, 230, 230, 255, 255, 230, 230, 230 },
+ { 313, 310, 255, 255, 245, 280, 265, 255, 255, 235, 235, 265, 265, 230, 230, 230 },
+ { 311, 311, 250, 250, 240, 285, 270, 255, 255, 240, 240, 275, 275, 230, 230, 230 },
+ { 306, 311, 245, 245, 240, 290, 275, 250, 255, 245, 245, 280, 280, 230, 230, 230 },
+ { 297, 308, 240, 240, 240, 295, 280, 240, 250, 250, 250, 285, 285, 230, 230, 230 },
+ { 285, 301, 235, 235, 235, 295, 280, 235, 250, 250, 255, 290, 290, 230, 230, 230 },
+ { 273, 291, 230, 230, 230, 290, 280, 230, 250, 250, 260, 295, 295, 230, 230, 230 },
+ { 263, 281, 225, 225, 225, 285, 275, 225, 245, 250, 265, 300, 300, 225, 225, 225 },
+ { 255, 271, 225, 220, 220, 275, 270, 225, 245, 250, 270, 300, 300, 220, 220, 220 },
+ { 249, 259, 220, 215, 215, 270, 265, 225, 240, 245, 275, 300, 300, 210, 210, 210 },
+ { 243, 248, 220, 210, 210, 260, 260, 220, 235, 245, 280, 305, 305, 200, 200, 200 },
+ { 234, 238, 215, 205, 205, 255, 255, 220, 230, 240, 280, 305, 305, 190, 190, 190 },
+ { 224, 228, 215, 200, 200, 245, 245, 220, 230, 240, 285, 310, 310, 180, 180, 180 },
+ { 216, 218, 210, 195, 195, 235, 240, 215, 225, 235, 285, 310, 310, 175, 175, 175 },
+ { 208, 208, 200, 190, 190, 230, 235, 215, 220, 230, 285, 305, 305, 170, 170, 170 },
+ { 201, 201, 195, 180, 180, 220, 225, 210, 220, 225, 285, 305, 305, 160, 160, 160 },
+ { 195, 195, 185, 175, 175, 205, 220, 205, 215, 220, 285, 300, 300, 160, 160, 160 },
+ { 188, 188, 175, 170, 170, 195, 210, 195, 210, 215, 280, 300, 300, 150, 150, 150 },
+ { 181, 181, 170, 160, 160, 180, 205, 195, 205, 210, 280, 300, 300, 145, 145, 145 },
+ { 175, 175, 160, 155, 155, 165, 195, 195, 200, 205, 275, 300, 300, 130, 130, 130 },
+ { 171, 171, 150, 150, 150, 150, 150, 150, 195, 200, 270, 300, 300, 115, 115, 115 }
+ },
+ /* edge_strength */
+ {
+ { 195, 195, 195, 195, 195, 195, 400, 440, 500, 475, 475, 475, 475, 475, 475, 475 },
+ { 210, 210, 200, 200, 200, 200, 400, 440, 500, 485, 485, 485, 485, 485, 485, 485 },
+ { 235, 235, 220, 220, 220, 220, 400, 440, 500, 495, 495, 495, 495, 495, 495, 495 },
+ { 260, 260, 230, 230, 230, 230, 400, 440, 500, 500, 500, 500, 500, 500, 500, 500 },
+ { 295, 295, 240, 240, 240, 240, 400, 440, 500, 510, 510, 510, 510, 510, 510, 510 },
+ { 320, 320, 250, 250, 250, 250, 400, 440, 500, 520, 520, 520, 520, 520, 520, 520 },
+ { 340, 340, 260, 260, 260, 260, 420, 460, 540, 530, 530, 530, 530, 530, 530, 530 },
+ { 350, 350, 270, 270, 270, 270, 420, 460, 540, 540, 540, 540, 540, 540, 540, 540 },
+ { 360, 360, 280, 280, 280, 280, 420, 460, 540, 545, 545, 545, 545, 545, 545, 545 },
+ { 360, 360, 280, 280, 280, 280, 420, 460, 540, 550, 550, 550, 550, 550, 550, 550 },
+ { 355, 355, 285, 285, 285, 285, 420, 460, 540, 560, 560, 560, 560, 560, 560, 560 },
+ { 345, 345, 290, 290, 290, 290, 420, 460, 540, 565, 565, 565, 565, 565, 565, 565 },
+ { 335, 335, 290, 290, 290, 290, 420, 460, 540, 570, 570, 570, 570, 570, 570, 570 },
+ { 330, 330, 295, 295, 295, 295, 430, 470, 550, 575, 575, 575, 575, 575, 575, 575 },
+ { 325, 325, 295, 295, 295, 295, 430, 470, 550, 580, 580, 580, 580, 580, 580, 580 },
+ { 320, 320, 295, 295, 295, 295, 440, 470, 550, 575, 575, 575, 575, 575, 575, 575 },
+ { 315, 315, 295, 295, 295, 295, 440, 470, 550, 570, 570, 570, 570, 570, 570, 570 },
+ { 310, 310, 295, 295, 295, 295, 450, 480, 580, 565, 565, 565, 565, 565, 565, 565 },
+ { 305, 305, 295, 295, 295, 295, 460, 500, 580, 560, 560, 560, 560, 560, 560, 560 },
+ { 295, 295, 290, 290, 290, 290, 460, 500, 580, 555, 555, 555, 555, 555, 555, 555 },
+ { 285, 285, 285, 285, 285, 285, 460, 500, 580, 550, 550, 550, 550, 550, 550, 550 },
+ { 280, 280, 280, 280, 280, 280, 460, 500, 580, 540, 540, 540, 540, 540, 540, 540 },
+ { 275, 275, 275, 275, 275, 275, 460, 500, 580, 535, 535, 535, 535, 535, 535, 535 },
+ { 265, 265, 265, 265, 265, 265, 460, 500, 580, 530, 530, 530, 530, 530, 530, 530 },
+ { 250, 250, 250, 250, 250, 250, 460, 500, 580, 520, 520, 520, 520, 520, 520, 520 },
+ { 240, 240, 240, 240, 240, 240, 470, 500, 580, 515, 515, 515, 515, 515, 515, 515 },
+ { 220, 220, 220, 220, 220, 220, 470, 500, 580, 510, 510, 510, 510, 510, 510, 510 },
+ { 200, 200, 200, 200, 200, 200, 470, 500, 580, 500, 500, 500, 500, 500, 500, 500 },
+ { 180, 180, 180, 180, 180, 180, 480, 500, 580, 495, 495, 495, 495, 495, 495, 495 },
+ { 160, 160, 160, 160, 160, 160, 480, 500, 580, 485, 485, 485, 485, 485, 485, 485 },
+ { 140, 140, 140, 140, 140, 140, 480, 500, 580, 480, 480, 480, 480, 480, 480, 480 },
+ { 125, 125, 125, 125, 125, 125, 480, 500, 580, 470, 470, 470, 470, 470, 470, 470 }
+ },
+ /* texture_freq[OT_ISP_AUTO_ISO_NUM] */
+ { 180, 190, 190, 170, 170, 170, 160, 140, 128, 128, 128, 100, 100, 100, 100, 100 },
+ /* edge_freq[OT_ISP_AUTO_ISO_NUM] */
+ { 128, 100, 100, 100, 100, 100, 100, 100, 100, 100, 96, 96, 96, 96, 96, 96 },
+ /* over_shoot[OT_ISP_AUTO_ISO_NUM] */
+ { 60, 62, 62, 64, 64, 64, 56, 52, 50, 50, 30, 10, 10, 10, 10, 10 },
+ /* under_shoot[OT_ISP_AUTO_ISO_NUM] */
+ { 60, 62, 62, 64, 64, 64, 54, 50, 50, 30, 20, 20, 15, 15, 15, 15 },
+ /* motion_texture_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ { 153, 153, 160, 145, 130, 130, 130, 105, 105, 105, 105, 85, 85, 85, 85, 85 },
+ { 172, 167, 190, 170, 145, 145, 145, 120, 120, 120, 120, 100, 100, 100, 100, 100 },
+ { 186, 178, 220, 195, 165, 165, 160, 140, 140, 135, 135, 120, 120, 120, 120, 120 },
+ { 201, 192, 255, 215, 180, 180, 175, 160, 160, 150, 150, 135, 135, 140, 140, 140 },
+ { 217, 207, 275, 230, 200, 200, 185, 175, 175, 160, 160, 150, 150, 160, 160, 160 },
+ { 233, 223, 285, 245, 210, 215, 200, 190, 190, 170, 170, 165, 165, 180, 180, 180 },
+ { 251, 239, 280, 260, 225, 225, 215, 205, 205, 180, 180, 185, 185, 200, 200, 200 },
+ { 269, 255, 275, 265, 240, 240, 230, 220, 220, 190, 190, 200, 200, 210, 210, 210 },
+ { 286, 272, 270, 270, 250, 250, 240, 225, 225, 200, 200, 220, 220, 220, 220, 220 },
+ { 300, 288, 265, 270, 250, 260, 245, 235, 235, 210, 210, 235, 235, 230, 230, 230 },
+ { 308, 299, 260, 265, 250, 270, 255, 245, 245, 220, 220, 245, 245, 230, 230, 230 },
+ { 312, 307, 260, 260, 250, 275, 260, 250, 250, 230, 230, 255, 255, 230, 230, 230 },
+ { 313, 310, 255, 255, 245, 280, 265, 255, 255, 235, 235, 265, 265, 230, 230, 230 },
+ { 311, 311, 250, 250, 240, 285, 270, 255, 255, 240, 240, 275, 275, 230, 230, 230 },
+ { 306, 311, 245, 245, 240, 290, 275, 250, 255, 245, 245, 280, 280, 230, 230, 230 },
+ { 297, 308, 240, 240, 240, 295, 280, 240, 250, 250, 250, 285, 285, 230, 230, 230 },
+ { 285, 301, 235, 235, 235, 295, 280, 235, 250, 250, 255, 290, 290, 230, 230, 230 },
+ { 273, 291, 230, 230, 230, 290, 280, 230, 250, 250, 260, 295, 295, 230, 230, 230 },
+ { 263, 281, 225, 225, 225, 285, 275, 225, 245, 250, 265, 300, 300, 225, 225, 225 },
+ { 255, 271, 225, 220, 220, 275, 270, 225, 245, 250, 270, 300, 300, 220, 220, 220 },
+ { 249, 259, 220, 215, 215, 270, 265, 225, 240, 245, 275, 300, 300, 210, 210, 210 },
+ { 243, 248, 220, 210, 210, 260, 260, 220, 235, 245, 280, 305, 305, 200, 200, 200 },
+ { 234, 238, 215, 205, 205, 255, 255, 220, 230, 240, 280, 305, 305, 190, 190, 190 },
+ { 224, 228, 215, 200, 200, 245, 245, 220, 230, 240, 285, 310, 310, 180, 180, 180 },
+ { 216, 218, 210, 195, 195, 235, 240, 215, 225, 235, 285, 310, 310, 175, 175, 175 },
+ { 208, 208, 200, 190, 190, 230, 235, 215, 220, 230, 285, 305, 305, 170, 170, 170 },
+ { 201, 201, 195, 180, 180, 220, 225, 210, 220, 225, 285, 305, 305, 160, 160, 160 },
+ { 195, 195, 185, 175, 175, 205, 220, 205, 215, 220, 285, 300, 300, 160, 160, 160 },
+ { 188, 188, 175, 170, 170, 195, 210, 195, 210, 215, 280, 300, 300, 150, 150, 150 },
+ { 181, 181, 170, 160, 160, 180, 205, 195, 205, 210, 280, 300, 300, 145, 145, 145 },
+ { 175, 175, 160, 155, 155, 165, 195, 195, 200, 205, 275, 300, 300, 130, 130, 130 },
+ { 171, 171, 150, 150, 150, 150, 150, 150, 195, 200, 270, 300, 300, 115, 115, 115 }
+ },
+ /* motion_edge_strength */
+ {
+ { 195, 195, 195, 195, 195, 195, 400, 440, 500, 475, 475, 475, 475, 475, 475, 475 },
+ { 210, 210, 200, 200, 200, 200, 400, 440, 500, 485, 485, 485, 485, 485, 485, 485 },
+ { 235, 235, 220, 220, 220, 220, 400, 440, 500, 495, 495, 495, 495, 495, 495, 495 },
+ { 260, 260, 230, 230, 230, 230, 400, 440, 500, 500, 500, 500, 500, 500, 500, 500 },
+ { 295, 295, 240, 240, 240, 240, 400, 440, 500, 510, 510, 510, 510, 510, 510, 510 },
+ { 320, 320, 250, 250, 250, 250, 400, 440, 500, 520, 520, 520, 520, 520, 520, 520 },
+ { 340, 340, 260, 260, 260, 260, 420, 460, 540, 530, 530, 530, 530, 530, 530, 530 },
+ { 350, 350, 270, 270, 270, 270, 420, 460, 540, 540, 540, 540, 540, 540, 540, 540 },
+ { 360, 360, 280, 280, 280, 280, 420, 460, 540, 545, 545, 545, 545, 545, 545, 545 },
+ { 360, 360, 280, 280, 280, 280, 420, 460, 540, 550, 550, 550, 550, 550, 550, 550 },
+ { 355, 355, 285, 285, 285, 285, 420, 460, 540, 560, 560, 560, 560, 560, 560, 560 },
+ { 345, 345, 290, 290, 290, 290, 420, 460, 540, 565, 565, 565, 565, 565, 565, 565 },
+ { 335, 335, 290, 290, 290, 290, 420, 460, 540, 570, 570, 570, 570, 570, 570, 570 },
+ { 330, 330, 295, 295, 295, 295, 430, 470, 550, 575, 575, 575, 575, 575, 575, 575 },
+ { 325, 325, 295, 295, 295, 295, 430, 470, 550, 580, 580, 580, 580, 580, 580, 580 },
+ { 320, 320, 295, 295, 295, 295, 440, 470, 550, 575, 575, 575, 575, 575, 575, 575 },
+ { 315, 315, 295, 295, 295, 295, 440, 470, 550, 570, 570, 570, 570, 570, 570, 570 },
+ { 310, 310, 295, 295, 295, 295, 450, 480, 580, 565, 565, 565, 565, 565, 565, 565 },
+ { 305, 305, 295, 295, 295, 295, 460, 500, 580, 560, 560, 560, 560, 560, 560, 560 },
+ { 295, 295, 290, 290, 290, 290, 460, 500, 580, 555, 555, 555, 555, 555, 555, 555 },
+ { 285, 285, 285, 285, 285, 285, 460, 500, 580, 550, 550, 550, 550, 550, 550, 550 },
+ { 280, 280, 280, 280, 280, 280, 460, 500, 580, 540, 540, 540, 540, 540, 540, 540 },
+ { 275, 275, 275, 275, 275, 275, 460, 500, 580, 535, 535, 535, 535, 535, 535, 535 },
+ { 265, 265, 265, 265, 265, 265, 460, 500, 580, 530, 530, 530, 530, 530, 530, 530 },
+ { 250, 250, 250, 250, 250, 250, 460, 500, 580, 520, 520, 520, 520, 520, 520, 520 },
+ { 240, 240, 240, 240, 240, 240, 470, 500, 580, 515, 515, 515, 515, 515, 515, 515 },
+ { 220, 220, 220, 220, 220, 220, 470, 500, 580, 510, 510, 510, 510, 510, 510, 510 },
+ { 200, 200, 200, 200, 200, 200, 470, 500, 580, 500, 500, 500, 500, 500, 500, 500 },
+ { 180, 180, 180, 180, 180, 180, 480, 500, 580, 495, 495, 495, 495, 495, 495, 495 },
+ { 160, 160, 160, 160, 160, 160, 480, 500, 580, 485, 485, 485, 485, 485, 485, 485 },
+ { 140, 140, 140, 140, 140, 140, 480, 500, 580, 480, 480, 480, 480, 480, 480, 480 },
+ { 125, 125, 125, 125, 125, 125, 480, 500, 580, 470, 470, 470, 470, 470, 470, 470 }
+ },
+ /* motion_texture_freq[OT_ISP_AUTO_ISO_NUM] */
+ { 180, 190, 190, 170, 170, 170, 160, 140, 128, 128, 128, 100, 100, 100, 100, 100 },
+ /* motion_edge_freq[OT_ISP_AUTO_ISO_NUM] */
+ { 128, 100, 100, 100, 100, 100, 100, 100, 100, 100, 96, 96, 96, 96, 96, 96 },
+ /* motion_over_shoot[OT_ISP_AUTO_ISO_NUM] */
+ { 60, 62, 62, 64, 64, 64, 56, 52, 50, 50, 30, 10, 10, 10, 10, 10 },
+ /* motion_under_shoot[OT_ISP_AUTO_ISO_NUM] */
+ { 60, 62, 62, 64, 64, 64, 54, 50, 50, 30, 20, 20, 15, 15, 15, 15 },
+ /* shoot_sup_strength[OT_ISP_AUTO_ISO_NUM] */
+ { 8, 8, 7, 7, 7, 6, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* shoot_sup_adj[OT_ISP_AUTO_ISO_NUM] */
+ { 9, 9, 8, 8, 7, 7, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* detail_ctrl[OT_ISP_AUTO_ISO_NUM] */
+ { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 120, 120, 120, 120, 120, 120 },
+ /* detail_ctrl_threshold[OT_ISP_AUTO_ISO_NUM] */
+ { 180, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160 },
+ /* edge_filt_strength[OT_ISP_AUTO_ISO_NUM] */
+ { 60, 58, 60, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62 },
+ /* edge_filt_max_cap */
+ { 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
+ /* r_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 12, 16, 20, 24, 24, 24, 26, 28, 31, 31, 31, 31, 31, 31, 31, 31 },
+ /* g_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 },
+ /* b_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 18, 20, 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22 },
+ /* skin_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ /* max_sharp_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 30, 30, 30, 30, 30, 26, 20, 20, 18, 18, 18, 18, 18, 18, 18, 18 },
+ {
+ /* shoot_inner_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* shoot_outer_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* shoot_protect_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ },
+ {
+ /* edge_rly_fine_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* edge_rly_coarse_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* edge_overshoot[OT_ISP_AUTO_ISO_NUM] */
+ {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20},
+ /* edge_undershoot[OT_ISP_AUTO_ISO_NUM] */
+ {120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120},
+ /* edge_gain_by_rly[OT_ISP_SHARPEN_RLYWGT_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
+ },
+ /* edge_rly_by_mot[OT_ISP_SHARPEN_STDGAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}
+ },
+ /* edge_rly_by_luma[OT_ISP_SHARPEN_STDGAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}
+ },
+ },
+ {
+ /* mf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
+ },
+ /* hf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
+ },
+ /* lmf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}
+ },
+ },
+ },
+};
+
+static const ot_isp_sharpen_attr g_cmos_yuv_sharpen_wdr = {
+ /* en */
+ 1,
+ /* motion_en */
+ 0,
+ /* motion_threshold0 */
+ 2,
+ /* motion_threshold1 */
+ 8,
+ /* motion_gain0 */
+ 0,
+ /* motion_gain1 */
+ 256,
+ /* skin_umin */
+ 100,
+ /* skin_vmin */
+ 135,
+ /* skin_umax */
+ 128,
+ /* skin_vmax */
+ 150,
+ /* op_type */
+ OT_OP_MODE_AUTO,
+ /* detail_map */
+ OT_ISP_SHARPEN_NORMAL,
+ /* manual para */
+ {
+ /* luma_wgt[OT_ISP_SHARPEN_LUMA_NUM] */
+ {
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31
+ },
+ /* texture_strength[OT_ISP_SHARPEN_GAIN_NUM] */
+ {
+ 250, 420, 390, 390, 390, 390, 390, 370, 350, 330, 310, 290, 270, 270, 270, 270,
+ 270, 270, 266, 260, 244, 230, 230, 230, 230, 230, 230, 210, 190, 190, 170, 150
+ },
+ /* edge_strength[OT_ISP_SHARPEN_GAIN_NUM] */
+ {
+ 120, 123, 125, 128, 130, 135, 140, 148, 160, 168, 180, 190, 200, 210, 210, 210,
+ 210, 210, 200, 190, 185, 175, 165, 160, 146, 136, 130, 128, 125, 123, 120, 120
+ },
+ /* texture_freq */
+ 200,
+ /* edge_freq */
+ 128,
+ /* over_shoot */
+ 65,
+ /* under_shoot */
+ 75,
+ /* motion_texture_strength[OT_ISP_SHARPEN_GAIN_NUM] */
+ {
+ 250, 420, 390, 390, 390, 390, 390, 370, 350, 330, 310, 290, 270, 270, 270, 270,
+ 270, 270, 266, 260, 244, 230, 230, 230, 230, 230, 230, 210, 190, 190, 170, 150
+ },
+ /* motion_edge_strength[OT_ISP_SHARPEN_GAIN_NUM] */
+ {
+ 120, 123, 125, 128, 130, 135, 140, 148, 160, 168, 180, 190, 200, 210, 210, 210,
+ 210, 210, 200, 190, 185, 175, 165, 160, 146, 136, 130, 128, 125, 123, 120, 120
+ },
+ /* motion_texture_freq */
+ 200,
+ /* motion_edge_freq */
+ 128,
+ /* motion_over_shoot */
+ 65,
+ /* motion_under_shoot */
+ 75,
+ /* u8shoot_sup_str */
+ 7,
+ /* u8shoot_sup_adj */
+ 9,
+ /* detail_ctrl */
+ 128,
+ /* detail_ctrl_threshold */
+ 180,
+ /* edge_filt_strength */
+ 50,
+ /* edge_filt_max_cap */
+ 18,
+ /* r_gain */
+ 20,
+ /* g_gain */
+ 32,
+ /* b_gain */
+ 20,
+ /* skin_gain */
+ 25,
+ /* max_sharp_gain */
+ 40,
+ {
+ /* shoot_inner_threshold */
+ 0,
+ /* shoot_outer_threshold */
+ 0,
+ /* shoot_protect_threshold */
+ 0,
+ },
+
+ {
+ /* edge_rly_fine_threshold */
+ 0,
+ /* edge_rly_coarse_threshold */
+ 0,
+ /* edge_overshoot */
+ 65,
+ /* edge_undershoot */
+ 120,
+ /* edge_gain_by_rly[OT_ISP_SHARPEN_RLYWGT_NUM] */
+ {
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
+ },
+ /* edge_rly_by_mot[OT_ISP_SHARPEN_STDGAIN_NUM] */
+ {
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
+ },
+ /* edge_rly_by_luma[OT_ISP_SHARPEN_STDGAIN_NUM] */
+ {
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
+ },
+ },
+ {
+ /* mf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM] */
+ {
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
+ },
+ /* hf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM] */
+ {
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
+ },
+ /* lmt_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM] */
+ {
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
+ },
+ },
+ },
+ /* auto para */
+ {
+ /* luma_wgt[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ { 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 },
+ { 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 },
+ { 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 },
+ { 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 },
+ { 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26 },
+ { 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26 },
+ { 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26 },
+ { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27 },
+ { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27 },
+ { 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28 },
+ { 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28 },
+ { 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 },
+ { 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 },
+ { 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 },
+ { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },
+ { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },
+ { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },
+ { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },
+ { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 },
+ { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 }
+ },
+
+ /* texture_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {159, 159, 159, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73},
+ {167, 167, 167, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75},
+ {176, 176, 176, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78},
+ {186, 186, 186, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81},
+ {196, 196, 196, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85},
+ {206, 206, 206, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89},
+ {217, 217, 217, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93},
+ {227, 227, 227, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98},
+ {237, 237, 237, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102},
+ {246, 246, 246, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106},
+ {254, 254, 254, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109},
+ {261, 261, 261, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112},
+ {268, 268, 268, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115},
+ {272, 272, 272, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116},
+ {276, 276, 276, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117},
+ {277, 277, 277, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116},
+ {276, 276, 276, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114},
+ {274, 274, 274, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111},
+ {270, 270, 270, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107},
+ {265, 265, 265, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102},
+ {258, 258, 258, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96},
+ {250, 250, 250, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90},
+ {242, 242, 242, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83},
+ {233, 233, 233, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77},
+ {224, 224, 224, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70},
+ {215, 215, 215, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63},
+ {206, 206, 206, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56},
+ {198, 198, 198, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50},
+ {191, 191, 191, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44},
+ {184, 184, 184, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39},
+ {179, 179, 179, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35},
+ {175, 175, 175, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ },
+ /* edge_strength */
+ {
+ {149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149},
+ {152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152},
+ {157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157},
+ {163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163},
+ {170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170},
+ {178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178},
+ {185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185},
+ {193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193},
+ {201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201},
+ {208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208},
+ {215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215},
+ {220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220},
+ {225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225},
+ {227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227},
+ {228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228},
+ {227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227},
+ {223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223},
+ {218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218},
+ {210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210},
+ {201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201},
+ {191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191},
+ {180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180},
+ {168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168},
+ {156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156},
+ {143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143},
+ {131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131},
+ {119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119},
+ {108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108},
+ { 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97},
+ { 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88},
+ { 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81},
+ { 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75}
+ },
+ /* texture_freq[OT_ISP_AUTO_ISO_NUM] */
+ { 200, 180, 180, 220, 220, 200, 180, 140, 140, 128, 128, 100, 100, 100, 100, 100 },
+ /* edge_freq[OT_ISP_AUTO_ISO_NUM] */
+ { 128, 128, 128, 128, 128, 128, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 },
+ /* over_shoot[OT_ISP_AUTO_ISO_NUM] */
+ { 60, 60, 60, 60, 65, 55, 55, 50, 50, 50, 50, 50, 50, 50, 50, 50},
+ /* under_shoot[OT_ISP_AUTO_ISO_NUM] */
+ {60, 60, 60, 70, 75, 60, 55, 50, 50, 50, 50, 50, 50, 50, 50, 50 },
+ /* motion_texture_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149},
+ {154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154},
+ {161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161},
+ {170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170},
+ {180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180},
+ {190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190},
+ {202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202},
+ {213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213},
+ {224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224},
+ {235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235},
+ {246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246},
+ {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
+ {262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262},
+ {268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268},
+ {272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272},
+ {273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273},
+ {272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272},
+ {269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269},
+ {264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264},
+ {257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257},
+ {249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249},
+ {240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240},
+ {230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230},
+ {219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219},
+ {209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209},
+ {198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198},
+ {188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188},
+ {178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178},
+ {169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169},
+ {161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161},
+ {155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155},
+ {150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150},
+ },
+ /* motion_edge_strength */
+ {
+ {149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149},
+ {154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154},
+ {161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161},
+ {170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170},
+ {180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180},
+ {190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190},
+ {202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202},
+ {213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213},
+ {224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224},
+ {235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235},
+ {246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246},
+ {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
+ {262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262},
+ {268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268},
+ {272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272},
+ {273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273},
+ {272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272},
+ {269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269},
+ {264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264},
+ {257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257},
+ {249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249},
+ {240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240},
+ {230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230},
+ {219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219},
+ {209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209},
+ {198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198},
+ {188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188},
+ {178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178},
+ {169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169},
+ {161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161},
+ {155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155},
+ {150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150}
+ },
+ /* motion_texture_freq[OT_ISP_AUTO_ISO_NUM] */
+ { 200, 190, 190, 170, 170, 170, 160, 140, 128, 128, 128, 100, 100, 100, 100, 100 },
+ /* motion_edge_freq[OT_ISP_AUTO_ISO_NUM] */
+ { 128, 100, 100, 100, 100, 100, 100, 100, 100, 100, 96, 96, 96, 96, 96, 96 },
+ /* motion_over_shoot[OT_ISP_AUTO_ISO_NUM] */
+ { 65, 65, 62, 64, 64, 64, 56, 52, 50, 50, 30, 10, 10, 10, 10, 10 },
+ /* motion_under_shoot[OT_ISP_AUTO_ISO_NUM] */
+ { 65, 65, 62, 64, 64, 64, 54, 50, 50, 30, 20, 20, 15, 15, 15, 15 },
+ /* motion_shoot_sup_strength[OT_ISP_AUTO_ISO_NUM] */
+ { 4, 4, 4, 4, 4, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 },
+ /* shoot_sup_adj[OT_ISP_AUTO_ISO_NUM] */
+ {6, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+ /* detail_ctrl[OT_ISP_AUTO_ISO_NUM] */
+ {128, 128, 128, 128, 128, 128, 128, 110, 110, 100, 100, 100, 100, 100, 100, 100},
+ /* detail_ctrl_threshold[OT_ISP_AUTO_ISO_NUM] */
+ { 180, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160 },
+ /* edge_filt_strength[OT_ISP_AUTO_ISO_NUM] */
+ { 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61},
+ /* edge_filt_max_cap */
+ { 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
+ /* r_gain[OT_ISP_AUTO_ISO_NUM] */
+ {31, 31, 28, 28, 28, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 },
+ /* g_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 },
+ /* b_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 31, 31, 28, 28, 28, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 },
+ /* skin_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 },
+ /* max_sharp_gain[OT_ISP_AUTO_ISO_NUM] */
+ { 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 },
+ {
+ /* shoot_inner_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* shoot_outer_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* shoot_protect_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ },
+ {
+ /* edge_rly_fine_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* edge_rly_coarse_threshold[OT_ISP_AUTO_ISO_NUM] */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* edge_overshoot[OT_ISP_AUTO_ISO_NUM] */
+ {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20},
+ /* edge_undershoot[OT_ISP_AUTO_ISO_NUM] */
+ {120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120},
+ /* edge_gain_by_rly[OT_ISP_SHARPEN_RLYWGT_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
+ },
+ /* edge_rly_by_mot[OT_ISP_SHARPEN_STDGAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}
+ },
+ /* edge_rly_by_luma[OT_ISP_SHARPEN_STDGAIN_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}
+ },
+ },
+ {
+ /* mf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
+ },
+ /* hf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+ {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
+ },
+ /* lmf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM] */
+ {
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+ {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}
+ },
+ },
+ },
+};
+
+static ot_isp_awb_ccm g_awb_ccm = {
+ /* the number of CCM matrixes */
+ 4,
+ {
+ {
+ /* color temperature */
+ 6420,
+ /* CCM matrix */
+ { 0x0196, 0x8092, 0x8004, 0x805B, 0x01B4, 0x8059, 0x801A, 0x808C, 0x01A6 },
+ },
+ {
+ /* color temperature */
+ 4949,
+ /* CCM matrix */
+ { 0x01A0, 0x809F, 0x8001, 0x8066, 0x01A7, 0x8041, 0x800C, 0x80F1, 0x01FD },
+ },
+ {
+ /* color temperature */
+ 3630,
+ /* CCM matrix */
+ { 0x01A0, 0x8084, 0x801C, 0x8083, 0x01C3, 0x8040, 0x0008, 0x811E, 0x0216 },
+ },
+ {
+ /* color temperature */
+ 2525,
+ /* CCM matrix */
+ { 0x02A7, 0x81CC, 0x0025, 0x806D, 0x01A6, 0x8039, 0x802A, 0x8133, 0x025D },
+ },
+ {
+ /* color temperature */
+ 2100,
+ /* CCM matrix */
+ { 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
+ },
+ {
+ /* color temperature */
+ 1600,
+ /* CCM matrix */
+ { 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
+ },
+ {
+ /* color temperature */
+ 1400,
+ /* CCM matrix */
+ { 0x0100, 0x0000, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0000, 0x0100 },
+ },
+ },
+};
+
+static ot_isp_awb_agc_table g_awb_agc_table = {
+ /* bvalid */
+ 1,
+
+ /* 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 */
+ /* saturation */
+ { 128, 128, 128, 128, 124, 120, 116, 112, 108, 104, 100, 94, 90, 90, 90, 90 }
+};
+
+static const ot_isp_wdr_fs_attr g_cmos_wdr = {
+ /* ot_isp_wdr_merge_mode */
+ OT_ISP_MERGE_FUSION_MODE,
+
+ /* ot_isp_wdr_combine_attr */
+ {
+ /* motion_comp */
+ 1,
+
+ /* short_thr */
+ 4032,
+
+ /* long_thr */
+ 3008,
+
+ /* force_long */
+ 1,
+
+ /* force_long_low_threshold */
+ 500,
+
+ /* force_long_hig_threshold */
+ 700,
+
+ /* ot_isp_fswdr_mdt_attr */
+ {
+ /* short_expo_chk */
+ 0,
+
+ /* short_check_thd */
+ 8,
+
+ /* md_ref_flicker */
+ 1,
+
+ /* mdt_still_thd */
+ 20,
+
+ /* mdt_full_threshold */
+ 254,
+
+ /* mdt_long_blend */
+ 0,
+
+ /* ot_op_mode motion_comp */
+ OT_OP_MODE_AUTO,
+
+ /* ot_isp_fswdr_manual_attr */
+ {
+ /* md_thr_low_gain, md_thr_hig_gain */
+ 64, 64
+ },
+
+ /* ot_isp_fswdr_auto_attr */
+ {
+ /* md_thr_low_gain[10][16] */
+ {
+ { 45, 45, 45, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 45, 45, 45, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 24, 24, 24, 45, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 24, 24, 24, 45, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 45, 45, 45, 45, 64, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 45, 45, 45, 45, 64, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 64, 64, 64, 64, 128, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 128, 128, 128, 128, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 128, 128, 128, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
+ },
+
+ /* md_thr_hig_gain[10][16] */
+ {
+ { 64, 64, 64, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 64, 64, 64, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 45, 45, 45, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 45, 45, 45, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 64, 64, 64, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 64, 64, 64, 64, 96, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 128, 128, 128, 128, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
+ },
+ },
+ },
+ },
+
+ /* ot_isp_fusion_attr */
+ {
+ /* fusion blend en */
+ 1,
+ /* fusion_blend_wgt */
+ 4,
+ /* fusion_threshold */
+ { 3855, 3000, 3000, 3000 },
+ /* fusion_force_gray_en */
+ 1,
+ /* fusion_force_blend_threshold */
+ 14,
+ },
+
+};
+
+static const ot_isp_dehaze_attr g_cmos_dehaze = {
+ /* enable */
+ 0,
+ /* user_lut_enable */
+ 0,
+ /* dehaze_lut */
+ {
+ 0, 9, 13, 17, 21, 25, 29, 33, 37, 42, 46, 50, 54, 58, 62, 67, 71, 75, 79, 83, 87, 91,
+ 95, 99, 102, 106, 110, 114, 117, 121, 124, 128, 131, 134, 137, 141, 144, 147, 150,
+ 153, 156, 159, 162, 165, 168, 170, 173, 176, 178, 181, 184, 186, 189, 191, 193, 196,
+ 198, 200, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 222, 224, 226, 228, 229,
+ 231, 232, 234, 235, 237, 238, 240, 241, 242, 243, 244, 246, 247, 248, 249, 249, 250,
+ 251, 252, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 253, 253, 252, 251, 251, 250, 249,
+ 249, 248, 247, 247, 246, 245, 244, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235,
+ 233, 232, 231, 230, 229, 227, 226, 225, 223, 222, 221, 219, 218, 216, 215, 213, 212,
+ 210, 209, 208, 206, 205, 203, 201, 200, 198, 197, 195, 193, 192, 190, 188, 187, 185,
+ 183, 181, 180, 178, 176, 174, 172, 170, 169, 167, 165, 163, 161, 159, 157, 155, 153,
+ 151, 149, 147, 145, 143, 140, 138, 136, 134, 132, 130, 128, 125, 123, 121, 119, 116,
+ 114, 112, 110, 107, 105, 103, 100, 98, 96, 93, 91, 89, 86, 84, 81, 79, 77, 74, 72, 69,
+ 67, 64, 62, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 31, 29, 26, 24, 21, 18, 16, 13, 11,
+ 8, 5, 3, 0
+ },
+ /* op_type */
+ 0,
+ /* manual_strength */
+ {
+ 128
+ },
+ /* auto_strength */
+ {
+ 128
+ },
+ /* tmprflt_incr_coef */
+ 8,
+ /* tmprflt_decr_coef */
+ 64,
+};
+
+
+static const ot_isp_drc_attr g_cmos_drc = {
+ /* enable */
+ 1,
+ /* curve_select */
+ OT_ISP_DRC_CURVE_ASYMMETRY,
+ /* purple_reduction_strength */
+ 35,
+ /* bright_gain_limit */
+ 10,
+ /* bright_gain_limit_step */
+ 8,
+ /* dark_gain_limit_luma */
+ 0,
+ /* dark_gain_limit_chroma */
+ 0,
+ /* contrast_ctrl */
+ 8,
+ /* rim_reduction_strength */
+ 32,
+ /* rim_reduction_threshold */
+ 30,
+ /* color_correction_lut[OT_ISP_DRC_CC_NODE_NUM] */
+ {
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ },
+ /* tone_mapping_value[OT_ISP_DRC_TM_NODE_NUM] */
+ {
+ 8, 8, 16, 24, 31, 39, 48, 56, 65, 75, 85, 95, 106, 118, 130, 143,
+ 156, 170, 185, 201, 218, 235, 254, 274, 294, 316, 339, 364, 390, 417, 446, 477,
+ 509, 543, 579, 617, 658, 701, 746, 794, 844, 898, 955, 1015, 1078, 1145, 1216, 1291,
+ 1370, 1454, 1543, 1637, 1736, 1841, 1952, 2069, 2194, 2325, 2465, 2612, 2767, 2932, 3106, 3290,
+ 3485, 3691, 3909, 4140, 4384, 4641, 4914, 5202, 5507, 5830, 6171, 6531, 6913, 7316, 7742, 8193,
+ 8669, 9173, 9705, 10268, 10863, 11492, 12145, 12808, 13483, 14171, 14872, 15587, 16319, 17069, 17840, 18635,
+ 19458, 19881, 20313, 20754, 21204, 21661, 22122, 22586, 23053, 23525, 24000, 24480, 24965, 25455, 25950, 26451,
+ 26959, 27473, 27995, 28524, 29062, 29609, 30165, 30732, 31309, 31899, 32501, 33116, 33746, 34391, 35043, 35706,
+ 36381, 37066, 37763, 38472, 39192, 39925, 40671, 41429, 42201, 42591, 42986, 43383, 43784, 44189, 44597, 45008,
+ 45424, 45842, 46265, 46691, 47121, 47555, 47993, 48434, 48880, 49329, 49783, 50241, 50703, 51169, 51639, 52113,
+ 52592, 53075, 53564, 54056, 54552, 55054, 55560, 56071, 56586, 56846, 57107, 57369, 57632, 57896, 58162, 58429,
+ 58697, 58967, 59238, 59510, 59783, 60057, 60333, 60611, 60889, 61169, 61451, 61733, 62017, 62303, 62589, 62877,
+ 63167, 63458, 63750, 64044, 64340, 64636, 64934, 65234
+ },
+ /* spatial_filter_coef */
+ 1,
+ /* range_filter_coef */
+ 2,
+ /* detail_adjust_coef */
+ 8,
+ {
+ {
+ /* local_mixing_bright_max */
+ 96,
+ /* local_mixing_bright_min */
+ 48,
+ /* local_mixing_bright_threshold */
+ 100,
+ /* local_mixing_bright_slope */
+ -3,
+ },
+ },
+ {
+ {
+ /* local_mixing_dark_max */
+ 96,
+ /* local_mixing_dark_min */
+ 48,
+ /* local_mixing_dark_threshold */
+ 100,
+ /* local_mixing_dark_slope */
+ -3,
+ },
+ },
+ /* high_saturation_color_ctrl */
+ 15,
+ /* global_color_ctrl */
+ 0,
+ /* shoot_reduction_en */
+ 1,
+ /* op_type */
+ OT_OP_MODE_MANUAL,
+ /* manual_attr */
+ {
+ /* manual_strength */
+ 256,
+ },
+ /* auto_attr */
+ {
+ /* auto_strength */
+ 512,
+ /* auto_strength_max */
+ 1023,
+ /* auto_strength_min */
+ 512,
+ },
+ /* asymmetry_curve */
+ {
+ /* asymmetry */
+ 6,
+ /* second_pole */
+ 200,
+ /* stretch */
+ 40,
+ /* compress */
+ 170
+ },
+ /* auto_curve */
+ {
+ /* brightness */
+ 8,
+ /* contrast */
+ 8,
+ /* tolerance */
+ 6,
+ },
+ /* bcnr_attr */
+ {
+ /* bcnr_en */
+ 0,
+ /* bcnr_detail_restore */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* bcnr_strength */
+ 3,
+ }
+};
+
+#ifdef CONFIG_OT_ISP_CA_SUPPORT
+static const ot_isp_ca_attr g_cmos_ca = {
+ /* CA */
+ 1,
+ 0,
+ {
+ {
+ 36, 81, 111, 136, 158, 182, 207, 228, 259, 290, 317, 345, 369, 396, 420, 444, 468, 492, 515, 534,
+ 556, 574, 597, 614, 632, 648, 666, 681, 697, 709, 723, 734, 748, 758, 771, 780, 788, 800, 808,
+ 815, 822, 829, 837, 841, 848, 854, 858, 864, 868, 871, 878, 881, 885, 890, 893, 897, 900, 903,
+ 906, 909, 912, 915, 918, 921, 924, 926, 929, 931, 934, 936, 938, 941, 943, 945, 947, 949, 951,
+ 952, 954, 956, 958, 961, 962, 964, 966, 968, 969, 970, 971, 973, 974, 976, 977, 979, 980, 981,
+ 983, 984, 985, 986, 988, 989, 990, 991, 992, 993, 995, 996, 997, 998, 999, 1000, 1001, 1004,
+ 1005, 1006, 1007, 1009, 1010, 1011, 1012, 1014, 1016, 1017, 1019, 1020, 1022, 1024
+ },
+ /* ISO */
+ { 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1000, 950, 900, 900, 800, 800, 800, 800, 800 },
+ {
+ 811, 812, 812, 812, 812, 812, 811, 810, 810, 809, 808, 807, 807, 806, 805, 805, 804, 804, 804, 804,
+ 804, 805, 806, 807, 808, 810, 813, 815, 819, 822, 827, 831, 837, 843, 850, 857, 865, 874, 883,
+ 893, 903, 914, 925, 936, 947, 959, 971, 983, 995, 1007, 1018, 1030, 1042, 1053, 1065, 1075,
+ 1086, 1096, 1106, 1115, 1124, 1132, 1139, 1146, 1152, 1158, 1163, 1168, 1172, 1176, 1180,
+ 1183, 1186, 1189, 1192, 1194, 1196, 1198, 1200, 1201, 1202, 1204, 1205, 1206, 1207, 1208,
+ 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1217, 1218, 1220, 1222, 1224, 1226, 1227, 1229,
+ 1231, 1232, 1234, 1236, 1237, 1239, 1240, 1242, 1243, 1245, 1246, 1248, 1249, 1250, 1252,
+ 1253, 1255, 1256, 1258, 1259, 1260, 1262, 1263, 1265, 1266, 1268, 1269
+ },
+ },
+ {
+ {
+ 56, 60, 64, 68, 71, 74, 77, 79, 82, 85, 87, 89, 93, 96, 99, 102, 105, 108, 110, 112, 115, 117, 119,
+ 120, 122, 124, 125, 127, 128, 130, 131, 133, 135, 136, 138, 141, 143, 145, 147, 150, 152, 155,
+ 157, 159, 162, 164, 166, 168, 171, 173, 175, 177, 179, 181, 184, 186, 188, 190, 192, 193, 195,
+ 197, 198, 198, 199, 198, 198, 196, 195, 193, 191, 189, 186, 184, 181, 179, 177, 174, 172, 169,
+ 167, 164, 161, 159, 156, 153, 151, 148, 145, 142, 139, 136, 133, 130, 127, 124, 121, 118, 115,
+ 113, 110, 109, 108, 108, 109, 111, 113, 115, 118, 121, 124, 127, 130, 133, 136, 139, 142, 145,
+ 148, 151, 154, 157, 160, 163, 166, 169, 172, 175
+ },
+ {
+ 232, 225, 219, 214, 208, 202, 197, 192, 186, 181, 176, 171, 166, 161, 156, 151, 146, 141, 136, 132,
+ 128, 123, 119, 115, 110, 106, 101, 97, 92, 88, 83, 79, 75, 71, 67, 64, 61, 59, 57, 55, 54, 54,
+ 53, 52, 51, 50, 50, 49, 48, 48, 47, 46, 46, 45, 44, 44, 43, 42, 42, 41, 41, 40, 40, 40, 40, 40,
+ 40, 41, 41, 42, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 64, 65, 67, 68, 70, 72, 75, 78, 81, 84, 87, 91, 94, 97, 100, 103, 106, 109, 112, 115,
+ 118, 121, 124, 127, 130, 133, 136, 139, 143, 146, 149, 152, 155, 159, 162, 166
+ },
+ {
+ 92, 89, 87, 85, 83, 81, 79, 77, 75, 74, 72, 72, 73, 76, 78, 80, 82, 84, 85, 87, 88, 88, 89, 89, 89,
+ 88, 88, 87, 87, 87, 86, 87, 87, 88, 90, 92, 94, 96, 99, 101, 103, 106, 108, 110, 113, 115, 117,
+ 119, 121, 123, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 147, 149, 151, 153, 155, 157,
+ 159, 161, 163, 165, 166, 168, 170, 172, 173, 175, 176, 178, 180, 181, 183, 185, 186, 188, 190,
+ 191, 193, 194, 196, 198, 200, 201, 203, 205, 207, 208, 210, 212, 214, 215, 217, 218, 219, 219,
+ 219, 219, 218, 216, 215, 213, 211, 209, 207, 205, 203, 201, 199, 197, 195, 194, 192, 190, 188,
+ 186, 184, 182, 180, 178
+ },
+ },
+};
+#endif
+
+static const ot_isp_cmos_lsc g_cmos_lsc = {
+ /* cmos_lsc_attr */
+ {
+ /* en */
+ 1,
+ /* mesh_strength */
+ 4096,
+ /* blend_ratio */
+ 256,
+ },
+ /* cmos_lsc_lut */
+ {
+ /* mesh_scale */
+ 1,
+ /* x_grid_width */
+ {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40},
+ /* y_grid_width */
+ {40, 40, 40, 40, 40, 40, 40, 40, 40},
+ /* lsc_gain_lut */
+ {
+ {
+ /* r_gain: */
+ {
+ 745, 705, 635, 579, 534, 495, 461, 434, 413, 391, 374, 359, 348, 338, 334, 328, 327,
+ 328, 332, 338, 348, 357, 369, 385, 405, 431, 457, 490, 529, 575, 629, 689, 719, 711,
+ 680, 618, 564, 519, 481, 450, 423, 400, 380, 363, 349, 340, 331, 323, 320, 318, 319,
+ 322, 329, 336, 347, 359, 375, 393, 417, 444, 477, 514, 559, 611, 667, 697, 674, 646,
+ 590, 538, 496, 460, 430, 404, 383, 363, 347, 334, 324, 315, 308, 305, 303, 303, 306,
+ 312, 320, 331, 341, 358, 376, 399, 425, 456, 490, 533, 581, 635, 665, 647, 619, 564,
+ 515, 477, 442, 411, 387, 367, 349, 334, 321, 309, 301, 294, 290, 288, 289, 290, 296,
+ 303, 315, 327, 342, 360, 381, 407, 436, 469, 510, 557, 611, 640, 622, 593, 542, 498,
+ 460, 427, 398, 375, 354, 337, 321, 309, 299, 290, 283, 277, 276, 275, 278, 283, 291,
+ 301, 314, 330, 347, 368, 392, 421, 453, 491, 537, 591, 623, 601, 576, 528, 484, 447,
+ 415, 388, 365, 345, 328, 312, 300, 289, 281, 274, 268, 266, 265, 267, 273, 283, 291,
+ 304, 320, 337, 357, 380, 408, 440, 478, 520, 570, 600, 588, 562, 515, 473, 438, 407,
+ 380, 356, 337, 320, 306, 293, 283, 274, 266, 262, 260, 260, 261, 267, 275, 285, 297,
+ 312, 329, 349, 373, 400, 430, 467, 509, 558, 585, 580, 555, 508, 466, 432, 402, 375,
+ 352, 332, 316, 301, 288, 278, 268, 262, 259, 258, 258, 260, 263, 270, 282, 293, 307,
+ 323, 343, 365, 392, 423, 460, 501, 545, 569, 573, 551, 507, 465, 428, 397, 372, 350,
+ 329, 313, 298, 286, 276, 266, 260, 257, 256, 257, 259, 261, 269, 279, 292, 305, 321,
+ 340, 363, 389, 418, 453, 494, 538, 562, 571, 550, 505, 463, 428, 397, 372, 350, 329,
+ 312, 298, 286, 275, 266, 259, 256, 256, 256, 259, 261, 269, 280, 291, 305, 320, 339,
+ 362, 389, 418, 451, 491, 535, 559, 574, 551, 507, 466, 431, 401, 374, 350, 331, 314,
+ 300, 288, 278, 267, 261, 256, 256, 256, 259, 264, 272, 282, 293, 306, 322, 342, 364,
+ 390, 419, 452, 493, 537, 560, 585, 560, 513, 472, 437, 405, 378, 355, 335, 318, 304,
+ 292, 282, 272, 265, 261, 259, 260, 262, 268, 276, 286, 298, 311, 327, 346, 367, 393,
+ 422, 458, 499, 544, 569, 595, 571, 525, 481, 444, 412, 385, 363, 342, 325, 310, 298,
+ 288, 279, 273, 267, 266, 267, 270, 275, 282, 292, 304, 318, 334, 352, 375, 401, 431,
+ 467, 510, 555, 579, 612, 587, 537, 492, 453, 422, 395, 372, 351, 334, 320, 307, 297,
+ 287, 281, 277, 276, 276, 279, 283, 290, 301, 312, 326, 342, 361, 384, 411, 442, 479,
+ 521, 566, 590, 633, 607, 556, 509, 468, 435, 407, 383, 363, 345, 330, 318, 307, 299,
+ 292, 289, 286, 286, 289, 294, 301, 310, 322, 336, 353, 372, 396, 423, 455, 491, 535,
+ 582, 606, 660, 632, 579, 531, 488, 454, 424, 399, 378, 360, 344, 331, 320, 312, 305,
+ 301, 299, 299, 303, 306, 314, 323, 336, 349, 366, 386, 410, 438, 472, 510, 555, 604,
+ 628, 697, 665, 608, 556, 511, 475, 443, 415, 395, 376, 360, 346, 335, 326, 320, 316,
+ 314, 314, 316, 322, 328, 338, 351, 365, 383, 404, 429, 458, 492, 532, 578, 630, 659,
+ 739, 704, 641, 586, 540, 500, 467, 440, 415, 396, 379, 364, 353, 344, 337, 333, 331,
+ 331, 334, 340, 347, 356, 369, 383, 401, 424, 450, 480, 516, 558, 608, 665, 698, 762,
+ 728, 664, 606, 554, 514, 480, 452, 428, 406, 388, 374, 363, 353, 348, 343, 340, 341,
+ 345, 350, 357, 367, 380, 394, 414, 435, 462, 493, 530, 573, 626, 686, 716
+ },
+
+ /* gr_gain: */
+ {
+ 702, 669, 611, 559, 513, 478, 446, 420, 398, 379, 363, 349, 340, 331, 324, 321, 320,
+ 321, 326, 329, 338, 349, 359, 374, 394, 417, 442, 474, 511, 554, 605, 663, 695, 679,
+ 650, 594, 542, 500, 465, 434, 409, 389, 370, 354, 341, 331, 322, 316, 313, 311, 312,
+ 315, 321, 328, 339, 349, 364, 383, 406, 431, 461, 496, 539, 588, 642, 671, 649, 620,
+ 566, 517, 478, 445, 416, 392, 373, 354, 338, 327, 317, 308, 302, 298, 296, 297, 300,
+ 305, 313, 323, 334, 349, 366, 387, 412, 440, 473, 513, 561, 613, 640, 620, 593, 543,
+ 498, 460, 428, 401, 377, 358, 340, 326, 314, 304, 296, 290, 285, 283, 283, 286, 291,
+ 298, 308, 320, 334, 351, 371, 395, 424, 456, 494, 538, 589, 617, 598, 573, 526, 483,
+ 447, 415, 388, 365, 347, 331, 316, 304, 294, 286, 279, 274, 271, 271, 274, 279, 287,
+ 297, 309, 322, 340, 359, 382, 409, 440, 477, 520, 571, 601, 581, 557, 512, 470, 435,
+ 404, 379, 357, 338, 322, 308, 296, 286, 278, 271, 266, 263, 262, 265, 270, 278, 288,
+ 300, 314, 330, 350, 373, 398, 428, 464, 506, 556, 585, 569, 545, 501, 461, 427, 396,
+ 371, 350, 331, 315, 301, 290, 280, 271, 264, 260, 258, 257, 259, 264, 272, 282, 293,
+ 307, 324, 342, 364, 390, 419, 453, 495, 540, 564, 562, 538, 495, 456, 422, 393, 368,
+ 346, 326, 310, 297, 286, 276, 267, 261, 257, 256, 256, 258, 260, 268, 278, 290, 303,
+ 319, 337, 359, 385, 414, 447, 486, 529, 551, 557, 534, 491, 453, 419, 391, 366, 344,
+ 325, 309, 294, 283, 273, 265, 259, 256, 256, 256, 257, 260, 267, 277, 289, 301, 316,
+ 334, 356, 380, 409, 442, 481, 522, 543, 558, 534, 492, 453, 419, 390, 366, 343, 325,
+ 309, 295, 283, 273, 264, 258, 256, 256, 256, 257, 260, 268, 277, 289, 301, 316, 334,
+ 355, 380, 408, 440, 479, 520, 541, 559, 537, 495, 456, 422, 392, 367, 345, 327, 311,
+ 297, 286, 275, 267, 260, 256, 256, 256, 258, 262, 270, 280, 291, 303, 319, 337, 357,
+ 381, 408, 442, 482, 522, 543, 569, 544, 499, 460, 426, 397, 372, 350, 331, 314, 301,
+ 289, 279, 271, 264, 260, 258, 259, 262, 266, 274, 284, 295, 308, 323, 340, 362, 386,
+ 414, 446, 487, 530, 552, 579, 554, 509, 469, 434, 404, 378, 357, 337, 321, 307, 295,
+ 285, 278, 271, 267, 265, 266, 268, 273, 281, 290, 301, 313, 329, 347, 368, 392, 422,
+ 456, 496, 540, 562, 594, 569, 522, 480, 445, 415, 388, 366, 347, 330, 316, 304, 294,
+ 286, 280, 275, 274, 274, 278, 282, 289, 298, 309, 322, 338, 356, 377, 402, 431, 467,
+ 508, 551, 574, 617, 590, 542, 497, 459, 427, 401, 378, 358, 341, 327, 314, 304, 297,
+ 291, 287, 285, 286, 288, 292, 299, 308, 319, 332, 348, 367, 389, 415, 446, 481, 521,
+ 566, 590, 643, 616, 564, 517, 478, 444, 416, 392, 372, 355, 341, 328, 318, 310, 304,
+ 300, 298, 299, 300, 305, 312, 320, 332, 345, 361, 381, 403, 430, 460, 498, 541, 586,
+ 611, 677, 646, 592, 543, 500, 465, 436, 411, 390, 372, 357, 343, 333, 325, 318, 314,
+ 312, 313, 315, 320, 326, 335, 347, 360, 376, 398, 420, 447, 480, 519, 563, 613, 639,
+ 712, 679, 622, 570, 526, 489, 459, 433, 409, 389, 373, 361, 349, 341, 335, 331, 329,
+ 328, 331, 336, 342, 352, 364, 378, 397, 416, 440, 469, 504, 543, 590, 645, 675, 737,
+ 701, 641, 589, 542, 503, 470, 443, 421, 400, 384, 370, 361, 350, 344, 341, 338, 337,
+ 340, 345, 352, 362, 373, 389, 406, 426, 451, 482, 518, 557, 605, 661, 690
+ },
+
+ /* gb_gain: */
+ {
+ 705, 672, 611, 558, 514, 478, 447, 419, 398, 380, 363, 349, 339, 331, 325, 321, 320,
+ 322, 326, 330, 337, 348, 358, 374, 393, 415, 441, 473, 509, 551, 604, 661, 691, 681,
+ 651, 594, 542, 500, 465, 434, 409, 388, 370, 354, 341, 330, 322, 316, 311, 311, 311,
+ 315, 320, 328, 338, 348, 363, 382, 403, 430, 460, 494, 536, 586, 642, 673, 646, 619,
+ 567, 519, 479, 446, 416, 392, 373, 354, 338, 327, 316, 307, 301, 298, 296, 296, 299,
+ 305, 313, 322, 333, 347, 366, 386, 410, 439, 473, 512, 560, 610, 635, 619, 592, 544,
+ 499, 461, 428, 401, 378, 358, 340, 325, 314, 304, 296, 290, 286, 283, 283, 286, 290,
+ 298, 307, 320, 333, 352, 371, 395, 422, 455, 492, 536, 587, 616, 600, 574, 526, 484,
+ 446, 415, 389, 366, 348, 330, 316, 304, 294, 286, 279, 274, 272, 271, 274, 279, 287,
+ 295, 308, 322, 339, 358, 381, 408, 440, 477, 519, 569, 599, 581, 558, 513, 470, 436,
+ 405, 379, 357, 338, 322, 308, 296, 286, 277, 271, 266, 262, 262, 265, 270, 277, 287,
+ 299, 313, 330, 349, 371, 396, 427, 464, 505, 554, 583, 570, 546, 503, 462, 428, 398,
+ 372, 351, 332, 316, 302, 290, 279, 271, 264, 259, 257, 258, 259, 263, 271, 281, 293,
+ 306, 323, 342, 363, 389, 418, 452, 493, 538, 561, 562, 538, 495, 457, 423, 393, 369,
+ 347, 328, 311, 297, 285, 276, 267, 261, 257, 256, 257, 258, 261, 268, 278, 290, 303,
+ 319, 336, 358, 384, 413, 446, 485, 528, 551, 560, 536, 492, 453, 420, 391, 366, 344,
+ 325, 309, 295, 283, 274, 265, 258, 256, 256, 256, 257, 260, 266, 276, 289, 301, 316,
+ 335, 356, 381, 408, 441, 480, 522, 543, 559, 535, 492, 453, 419, 390, 365, 344, 326,
+ 309, 295, 283, 274, 265, 258, 256, 256, 256, 257, 261, 268, 278, 288, 301, 316, 334,
+ 355, 379, 408, 440, 478, 520, 542, 561, 539, 496, 457, 422, 393, 368, 346, 327, 311,
+ 297, 286, 275, 267, 260, 256, 256, 256, 257, 262, 270, 280, 290, 303, 318, 336, 357,
+ 381, 409, 442, 481, 523, 544, 569, 544, 501, 461, 427, 398, 373, 351, 332, 315, 301,
+ 290, 280, 272, 264, 260, 259, 259, 261, 267, 274, 284, 295, 308, 323, 341, 361, 386,
+ 414, 447, 487, 530, 552, 580, 556, 511, 470, 435, 405, 379, 358, 338, 322, 307, 296,
+ 286, 277, 272, 267, 266, 266, 269, 274, 281, 290, 301, 314, 329, 347, 368, 393, 422,
+ 456, 496, 538, 560, 597, 572, 526, 483, 446, 415, 390, 366, 347, 330, 316, 305, 295,
+ 286, 280, 276, 275, 275, 278, 282, 289, 298, 310, 322, 338, 356, 377, 402, 432, 467,
+ 507, 549, 572, 618, 593, 545, 500, 461, 429, 402, 379, 360, 343, 328, 316, 307, 298,
+ 291, 287, 285, 285, 288, 293, 299, 309, 319, 333, 348, 368, 389, 415, 445, 480, 521,
+ 565, 588, 645, 618, 566, 519, 479, 446, 417, 393, 374, 356, 342, 330, 319, 311, 304,
+ 301, 298, 299, 301, 305, 312, 321, 332, 346, 361, 381, 404, 430, 461, 498, 540, 586,
+ 613, 678, 647, 594, 545, 501, 467, 438, 411, 390, 373, 358, 345, 334, 325, 318, 315,
+ 313, 313, 316, 321, 327, 336, 347, 361, 378, 398, 421, 448, 481, 519, 563, 613, 640,
+ 714, 683, 626, 573, 529, 492, 460, 433, 410, 390, 374, 362, 350, 342, 336, 332, 330,
+ 329, 332, 336, 343, 353, 364, 379, 396, 416, 440, 469, 503, 543, 591, 644, 674, 739,
+ 705, 645, 592, 546, 505, 472, 445, 422, 402, 385, 371, 360, 351, 346, 341, 340, 338,
+ 341, 345, 353, 363, 374, 388, 405, 427, 451, 480, 517, 559, 609, 663, 693
+ },
+
+ /* b_gain: */
+ {
+ 669, 641, 588, 539, 498, 465, 435, 408, 389, 371, 355, 342, 334, 327, 321, 317, 316,
+ 317, 320, 326, 334, 342, 355, 370, 387, 410, 435, 465, 498, 541, 590, 648, 682, 653,
+ 625, 571, 524, 485, 451, 423, 399, 380, 362, 346, 335, 325, 318, 312, 308, 307, 308,
+ 312, 317, 325, 335, 345, 359, 376, 398, 423, 452, 486, 527, 575, 627, 654, 621, 595,
+ 546, 501, 464, 433, 405, 384, 364, 347, 333, 321, 312, 304, 298, 295, 293, 294, 297,
+ 303, 309, 319, 330, 344, 361, 381, 404, 433, 466, 502, 547, 596, 619, 600, 573, 524,
+ 482, 447, 417, 391, 370, 350, 334, 321, 310, 301, 292, 286, 283, 281, 280, 285, 288,
+ 295, 305, 316, 330, 346, 366, 389, 416, 447, 483, 525, 574, 604, 579, 553, 508, 469,
+ 435, 405, 380, 359, 341, 326, 312, 302, 292, 283, 277, 272, 270, 270, 272, 277, 285,
+ 295, 306, 319, 336, 355, 377, 402, 433, 468, 509, 558, 586, 562, 538, 495, 456, 424,
+ 395, 371, 351, 333, 318, 304, 293, 284, 275, 269, 264, 262, 261, 263, 269, 277, 286,
+ 297, 311, 327, 346, 367, 393, 421, 456, 495, 542, 572, 548, 527, 486, 449, 416, 389,
+ 364, 344, 327, 311, 299, 288, 278, 270, 263, 259, 257, 258, 260, 263, 271, 280, 292,
+ 306, 321, 339, 360, 385, 414, 446, 486, 529, 552, 544, 522, 482, 445, 412, 385, 361,
+ 341, 323, 307, 295, 284, 273, 265, 260, 256, 256, 257, 258, 261, 267, 277, 289, 301,
+ 317, 335, 356, 379, 407, 439, 478, 519, 540, 538, 519, 479, 443, 410, 382, 359, 338,
+ 320, 305, 292, 281, 271, 263, 258, 256, 256, 256, 258, 261, 266, 277, 287, 299, 314,
+ 332, 353, 376, 405, 437, 474, 512, 533, 539, 519, 480, 443, 410, 382, 359, 338, 320,
+ 305, 292, 280, 271, 263, 257, 256, 256, 256, 257, 261, 267, 277, 288, 300, 314, 332,
+ 352, 376, 403, 434, 471, 510, 531, 541, 521, 481, 445, 413, 385, 361, 341, 323, 307,
+ 294, 283, 274, 265, 259, 256, 256, 256, 259, 262, 269, 279, 290, 302, 317, 334, 354,
+ 378, 405, 435, 474, 514, 534, 548, 528, 486, 449, 418, 390, 366, 345, 327, 311, 298,
+ 288, 278, 270, 264, 260, 258, 260, 262, 267, 273, 284, 294, 306, 321, 338, 359, 382,
+ 409, 442, 481, 520, 538, 561, 538, 496, 457, 424, 396, 373, 352, 333, 318, 305, 294,
+ 284, 276, 270, 266, 264, 265, 268, 273, 280, 289, 299, 313, 328, 344, 365, 390, 417,
+ 450, 488, 528, 549, 574, 554, 511, 469, 435, 406, 381, 360, 342, 327, 313, 302, 292,
+ 284, 278, 274, 273, 274, 276, 282, 288, 296, 308, 321, 335, 353, 374, 398, 427, 459,
+ 498, 539, 562, 599, 573, 526, 484, 448, 419, 392, 372, 352, 336, 323, 313, 303, 296,
+ 289, 284, 284, 285, 286, 292, 298, 307, 318, 331, 346, 363, 384, 410, 438, 472, 512,
+ 554, 576, 624, 597, 548, 504, 466, 435, 409, 387, 368, 352, 338, 324, 316, 308, 301,
+ 298, 297, 298, 299, 303, 310, 319, 330, 344, 358, 376, 398, 425, 455, 490, 530, 575,
+ 600, 650, 625, 573, 528, 489, 455, 427, 403, 384, 367, 353, 340, 330, 321, 316, 313,
+ 312, 312, 314, 317, 325, 333, 345, 358, 374, 394, 416, 442, 473, 509, 552, 597, 621,
+ 685, 658, 605, 556, 514, 480, 448, 423, 402, 384, 369, 356, 346, 338, 334, 328, 327,
+ 327, 330, 334, 341, 350, 362, 375, 391, 412, 436, 462, 495, 533, 577, 629, 656, 705,
+ 678, 626, 573, 528, 492, 462, 437, 416, 393, 380, 366, 355, 350, 343, 338, 337, 337,
+ 340, 343, 351, 359, 370, 386, 401, 421, 444, 474, 507, 548, 593, 649, 682
+ },
+ },
+ {
+ /* r_gain: */
+ {
+ 745, 705, 635, 579, 534, 495, 461, 434, 413, 391, 374, 359, 348, 338, 334, 328, 327,
+ 328, 332, 338, 348, 357, 369, 385, 405, 431, 457, 490, 529, 575, 629, 689, 719, 711,
+ 680, 618, 564, 519, 481, 450, 423, 400, 380, 363, 349, 340, 331, 323, 320, 318, 319,
+ 322, 329, 336, 347, 359, 375, 393, 417, 444, 477, 514, 559, 611, 667, 697, 674, 646,
+ 590, 538, 496, 460, 430, 404, 383, 363, 347, 334, 324, 315, 308, 305, 303, 303, 306,
+ 312, 320, 331, 341, 358, 376, 399, 425, 456, 490, 533, 581, 635, 665, 647, 619, 564,
+ 515, 477, 442, 411, 387, 367, 349, 334, 321, 309, 301, 294, 290, 288, 289, 290, 296,
+ 303, 315, 327, 342, 360, 381, 407, 436, 469, 510, 557, 611, 640, 622, 593, 542, 498,
+ 460, 427, 398, 375, 354, 337, 321, 309, 299, 290, 283, 277, 276, 275, 278, 283, 291,
+ 301, 314, 330, 347, 368, 392, 421, 453, 491, 537, 591, 623, 601, 576, 528, 484, 447,
+ 415, 388, 365, 345, 328, 312, 300, 289, 281, 274, 268, 266, 265, 267, 273, 283, 291,
+ 304, 320, 337, 357, 380, 408, 440, 478, 520, 570, 600, 588, 562, 515, 473, 438, 407,
+ 380, 356, 337, 320, 306, 293, 283, 274, 266, 262, 260, 260, 261, 267, 275, 285, 297,
+ 312, 329, 349, 373, 400, 430, 467, 509, 558, 585, 580, 555, 508, 466, 432, 402, 375,
+ 352, 332, 316, 301, 288, 278, 268, 262, 259, 258, 258, 260, 263, 270, 282, 293, 307,
+ 323, 343, 365, 392, 423, 460, 501, 545, 569, 573, 551, 507, 465, 428, 397, 372, 350,
+ 329, 313, 298, 286, 276, 266, 260, 257, 256, 257, 259, 261, 269, 279, 292, 305, 321,
+ 340, 363, 389, 418, 453, 494, 538, 562, 571, 550, 505, 463, 428, 397, 372, 350, 329,
+ 312, 298, 286, 275, 266, 259, 256, 256, 256, 259, 261, 269, 280, 291, 305, 320, 339,
+ 362, 389, 418, 451, 491, 535, 559, 574, 551, 507, 466, 431, 401, 374, 350, 331, 314,
+ 300, 288, 278, 267, 261, 256, 256, 256, 259, 264, 272, 282, 293, 306, 322, 342, 364,
+ 390, 419, 452, 493, 537, 560, 585, 560, 513, 472, 437, 405, 378, 355, 335, 318, 304,
+ 292, 282, 272, 265, 261, 259, 260, 262, 268, 276, 286, 298, 311, 327, 346, 367, 393,
+ 422, 458, 499, 544, 569, 595, 571, 525, 481, 444, 412, 385, 363, 342, 325, 310, 298,
+ 288, 279, 273, 267, 266, 267, 270, 275, 282, 292, 304, 318, 334, 352, 375, 401, 431,
+ 467, 510, 555, 579, 612, 587, 537, 492, 453, 422, 395, 372, 351, 334, 320, 307, 297,
+ 287, 281, 277, 276, 276, 279, 283, 290, 301, 312, 326, 342, 361, 384, 411, 442, 479,
+ 521, 566, 590, 633, 607, 556, 509, 468, 435, 407, 383, 363, 345, 330, 318, 307, 299,
+ 292, 289, 286, 286, 289, 294, 301, 310, 322, 336, 353, 372, 396, 423, 455, 491, 535,
+ 582, 606, 660, 632, 579, 531, 488, 454, 424, 399, 378, 360, 344, 331, 320, 312, 305,
+ 301, 299, 299, 303, 306, 314, 323, 336, 349, 366, 386, 410, 438, 472, 510, 555, 604,
+ 628, 697, 665, 608, 556, 511, 475, 443, 415, 395, 376, 360, 346, 335, 326, 320, 316,
+ 314, 314, 316, 322, 328, 338, 351, 365, 383, 404, 429, 458, 492, 532, 578, 630, 659,
+ 739, 704, 641, 586, 540, 500, 467, 440, 415, 396, 379, 364, 353, 344, 337, 333, 331,
+ 331, 334, 340, 347, 356, 369, 383, 401, 424, 450, 480, 516, 558, 608, 665, 698, 762,
+ 728, 664, 606, 554, 514, 480, 452, 428, 406, 388, 374, 363, 353, 348, 343, 340, 341,
+ 345, 350, 357, 367, 380, 394, 414, 435, 462, 493, 530, 573, 626, 686, 716
+ },
+
+ /* gr_gain: */
+ {
+ 702, 669, 611, 559, 513, 478, 446, 420, 398, 379, 363, 349, 340, 331, 324, 321, 320,
+ 321, 326, 329, 338, 349, 359, 374, 394, 417, 442, 474, 511, 554, 605, 663, 695, 679,
+ 650, 594, 542, 500, 465, 434, 409, 389, 370, 354, 341, 331, 322, 316, 313, 311, 312,
+ 315, 321, 328, 339, 349, 364, 383, 406, 431, 461, 496, 539, 588, 642, 671, 649, 620,
+ 566, 517, 478, 445, 416, 392, 373, 354, 338, 327, 317, 308, 302, 298, 296, 297, 300,
+ 305, 313, 323, 334, 349, 366, 387, 412, 440, 473, 513, 561, 613, 640, 620, 593, 543,
+ 498, 460, 428, 401, 377, 358, 340, 326, 314, 304, 296, 290, 285, 283, 283, 286, 291,
+ 298, 308, 320, 334, 351, 371, 395, 424, 456, 494, 538, 589, 617, 598, 573, 526, 483,
+ 447, 415, 388, 365, 347, 331, 316, 304, 294, 286, 279, 274, 271, 271, 274, 279, 287,
+ 297, 309, 322, 340, 359, 382, 409, 440, 477, 520, 571, 601, 581, 557, 512, 470, 435,
+ 404, 379, 357, 338, 322, 308, 296, 286, 278, 271, 266, 263, 262, 265, 270, 278, 288,
+ 300, 314, 330, 350, 373, 398, 428, 464, 506, 556, 585, 569, 545, 501, 461, 427, 396,
+ 371, 350, 331, 315, 301, 290, 280, 271, 264, 260, 258, 257, 259, 264, 272, 282, 293,
+ 307, 324, 342, 364, 390, 419, 453, 495, 540, 564, 562, 538, 495, 456, 422, 393, 368,
+ 346, 326, 310, 297, 286, 276, 267, 261, 257, 256, 256, 258, 260, 268, 278, 290, 303,
+ 319, 337, 359, 385, 414, 447, 486, 529, 551, 557, 534, 491, 453, 419, 391, 366, 344,
+ 325, 309, 294, 283, 273, 265, 259, 256, 256, 256, 257, 260, 267, 277, 289, 301, 316,
+ 334, 356, 380, 409, 442, 481, 522, 543, 558, 534, 492, 453, 419, 390, 366, 343, 325,
+ 309, 295, 283, 273, 264, 258, 256, 256, 256, 257, 260, 268, 277, 289, 301, 316, 334,
+ 355, 380, 408, 440, 479, 520, 541, 559, 537, 495, 456, 422, 392, 367, 345, 327, 311,
+ 297, 286, 275, 267, 260, 256, 256, 256, 258, 262, 270, 280, 291, 303, 319, 337, 357,
+ 381, 408, 442, 482, 522, 543, 569, 544, 499, 460, 426, 397, 372, 350, 331, 314, 301,
+ 289, 279, 271, 264, 260, 258, 259, 262, 266, 274, 284, 295, 308, 323, 340, 362, 386,
+ 414, 446, 487, 530, 552, 579, 554, 509, 469, 434, 404, 378, 357, 337, 321, 307, 295,
+ 285, 278, 271, 267, 265, 266, 268, 273, 281, 290, 301, 313, 329, 347, 368, 392, 422,
+ 456, 496, 540, 562, 594, 569, 522, 480, 445, 415, 388, 366, 347, 330, 316, 304, 294,
+ 286, 280, 275, 274, 274, 278, 282, 289, 298, 309, 322, 338, 356, 377, 402, 431, 467,
+ 508, 551, 574, 617, 590, 542, 497, 459, 427, 401, 378, 358, 341, 327, 314, 304, 297,
+ 291, 287, 285, 286, 288, 292, 299, 308, 319, 332, 348, 367, 389, 415, 446, 481, 521,
+ 566, 590, 643, 616, 564, 517, 478, 444, 416, 392, 372, 355, 341, 328, 318, 310, 304,
+ 300, 298, 299, 300, 305, 312, 320, 332, 345, 361, 381, 403, 430, 460, 498, 541, 586,
+ 611, 677, 646, 592, 543, 500, 465, 436, 411, 390, 372, 357, 343, 333, 325, 318, 314,
+ 312, 313, 315, 320, 326, 335, 347, 360, 376, 398, 420, 447, 480, 519, 563, 613, 639,
+ 712, 679, 622, 570, 526, 489, 459, 433, 409, 389, 373, 361, 349, 341, 335, 331, 329,
+ 328, 331, 336, 342, 352, 364, 378, 397, 416, 440, 469, 504, 543, 590, 645, 675, 737,
+ 701, 641, 589, 542, 503, 470, 443, 421, 400, 384, 370, 361, 350, 344, 341, 338, 337,
+ 340, 345, 352, 362, 373, 389, 406, 426, 451, 482, 518, 557, 605, 661, 690
+ },
+
+ /* gb_gain: */
+ {
+ 705, 672, 611, 558, 514, 478, 447, 419, 398, 380, 363, 349, 339, 331, 325, 321, 320,
+ 322, 326, 330, 337, 348, 358, 374, 393, 415, 441, 473, 509, 551, 604, 661, 691, 681,
+ 651, 594, 542, 500, 465, 434, 409, 388, 370, 354, 341, 330, 322, 316, 311, 311, 311,
+ 315, 320, 328, 338, 348, 363, 382, 403, 430, 460, 494, 536, 586, 642, 673, 646, 619,
+ 567, 519, 479, 446, 416, 392, 373, 354, 338, 327, 316, 307, 301, 298, 296, 296, 299,
+ 305, 313, 322, 333, 347, 366, 386, 410, 439, 473, 512, 560, 610, 635, 619, 592, 544,
+ 499, 461, 428, 401, 378, 358, 340, 325, 314, 304, 296, 290, 286, 283, 283, 286, 290,
+ 298, 307, 320, 333, 352, 371, 395, 422, 455, 492, 536, 587, 616, 600, 574, 526, 484,
+ 446, 415, 389, 366, 348, 330, 316, 304, 294, 286, 279, 274, 272, 271, 274, 279, 287,
+ 295, 308, 322, 339, 358, 381, 408, 440, 477, 519, 569, 599, 581, 558, 513, 470, 436,
+ 405, 379, 357, 338, 322, 308, 296, 286, 277, 271, 266, 262, 262, 265, 270, 277, 287,
+ 299, 313, 330, 349, 371, 396, 427, 464, 505, 554, 583, 570, 546, 503, 462, 428, 398,
+ 372, 351, 332, 316, 302, 290, 279, 271, 264, 259, 257, 258, 259, 263, 271, 281, 293,
+ 306, 323, 342, 363, 389, 418, 452, 493, 538, 561, 562, 538, 495, 457, 423, 393, 369,
+ 347, 328, 311, 297, 285, 276, 267, 261, 257, 256, 257, 258, 261, 268, 278, 290, 303,
+ 319, 336, 358, 384, 413, 446, 485, 528, 551, 560, 536, 492, 453, 420, 391, 366, 344,
+ 325, 309, 295, 283, 274, 265, 258, 256, 256, 256, 257, 260, 266, 276, 289, 301, 316,
+ 335, 356, 381, 408, 441, 480, 522, 543, 559, 535, 492, 453, 419, 390, 365, 344, 326,
+ 309, 295, 283, 274, 265, 258, 256, 256, 256, 257, 261, 268, 278, 288, 301, 316, 334,
+ 355, 379, 408, 440, 478, 520, 542, 561, 539, 496, 457, 422, 393, 368, 346, 327, 311,
+ 297, 286, 275, 267, 260, 256, 256, 256, 257, 262, 270, 280, 290, 303, 318, 336, 357,
+ 381, 409, 442, 481, 523, 544, 569, 544, 501, 461, 427, 398, 373, 351, 332, 315, 301,
+ 290, 280, 272, 264, 260, 259, 259, 261, 267, 274, 284, 295, 308, 323, 341, 361, 386,
+ 414, 447, 487, 530, 552, 580, 556, 511, 470, 435, 405, 379, 358, 338, 322, 307, 296,
+ 286, 277, 272, 267, 266, 266, 269, 274, 281, 290, 301, 314, 329, 347, 368, 393, 422,
+ 456, 496, 538, 560, 597, 572, 526, 483, 446, 415, 390, 366, 347, 330, 316, 305, 295,
+ 286, 280, 276, 275, 275, 278, 282, 289, 298, 310, 322, 338, 356, 377, 402, 432, 467,
+ 507, 549, 572, 618, 593, 545, 500, 461, 429, 402, 379, 360, 343, 328, 316, 307, 298,
+ 291, 287, 285, 285, 288, 293, 299, 309, 319, 333, 348, 368, 389, 415, 445, 480, 521,
+ 565, 588, 645, 618, 566, 519, 479, 446, 417, 393, 374, 356, 342, 330, 319, 311, 304,
+ 301, 298, 299, 301, 305, 312, 321, 332, 346, 361, 381, 404, 430, 461, 498, 540, 586,
+ 613, 678, 647, 594, 545, 501, 467, 438, 411, 390, 373, 358, 345, 334, 325, 318, 315,
+ 313, 313, 316, 321, 327, 336, 347, 361, 378, 398, 421, 448, 481, 519, 563, 613, 640,
+ 714, 683, 626, 573, 529, 492, 460, 433, 410, 390, 374, 362, 350, 342, 336, 332, 330,
+ 329, 332, 336, 343, 353, 364, 379, 396, 416, 440, 469, 503, 543, 591, 644, 674, 739,
+ 705, 645, 592, 546, 505, 472, 445, 422, 402, 385, 371, 360, 351, 346, 341, 340, 338,
+ 341, 345, 353, 363, 374, 388, 405, 427, 451, 480, 517, 559, 609, 663, 693
+ },
+
+ /* b_gain: */
+ {
+ 669, 641, 588, 539, 498, 465, 435, 408, 389, 371, 355, 342, 334, 327, 321, 317, 316,
+ 317, 320, 326, 334, 342, 355, 370, 387, 410, 435, 465, 498, 541, 590, 648, 682, 653,
+ 625, 571, 524, 485, 451, 423, 399, 380, 362, 346, 335, 325, 318, 312, 308, 307, 308,
+ 312, 317, 325, 335, 345, 359, 376, 398, 423, 452, 486, 527, 575, 627, 654, 621, 595,
+ 546, 501, 464, 433, 405, 384, 364, 347, 333, 321, 312, 304, 298, 295, 293, 294, 297,
+ 303, 309, 319, 330, 344, 361, 381, 404, 433, 466, 502, 547, 596, 619, 600, 573, 524,
+ 482, 447, 417, 391, 370, 350, 334, 321, 310, 301, 292, 286, 283, 281, 280, 285, 288,
+ 295, 305, 316, 330, 346, 366, 389, 416, 447, 483, 525, 574, 604, 579, 553, 508, 469,
+ 435, 405, 380, 359, 341, 326, 312, 302, 292, 283, 277, 272, 270, 270, 272, 277, 285,
+ 295, 306, 319, 336, 355, 377, 402, 433, 468, 509, 558, 586, 562, 538, 495, 456, 424,
+ 395, 371, 351, 333, 318, 304, 293, 284, 275, 269, 264, 262, 261, 263, 269, 277, 286,
+ 297, 311, 327, 346, 367, 393, 421, 456, 495, 542, 572, 548, 527, 486, 449, 416, 389,
+ 364, 344, 327, 311, 299, 288, 278, 270, 263, 259, 257, 258, 260, 263, 271, 280, 292,
+ 306, 321, 339, 360, 385, 414, 446, 486, 529, 552, 544, 522, 482, 445, 412, 385, 361,
+ 341, 323, 307, 295, 284, 273, 265, 260, 256, 256, 257, 258, 261, 267, 277, 289, 301,
+ 317, 335, 356, 379, 407, 439, 478, 519, 540, 538, 519, 479, 443, 410, 382, 359, 338,
+ 320, 305, 292, 281, 271, 263, 258, 256, 256, 256, 258, 261, 266, 277, 287, 299, 314,
+ 332, 353, 376, 405, 437, 474, 512, 533, 539, 519, 480, 443, 410, 382, 359, 338, 320,
+ 305, 292, 280, 271, 263, 257, 256, 256, 256, 257, 261, 267, 277, 288, 300, 314, 332,
+ 352, 376, 403, 434, 471, 510, 531, 541, 521, 481, 445, 413, 385, 361, 341, 323, 307,
+ 294, 283, 274, 265, 259, 256, 256, 256, 259, 262, 269, 279, 290, 302, 317, 334, 354,
+ 378, 405, 435, 474, 514, 534, 548, 528, 486, 449, 418, 390, 366, 345, 327, 311, 298,
+ 288, 278, 270, 264, 260, 258, 260, 262, 267, 273, 284, 294, 306, 321, 338, 359, 382,
+ 409, 442, 481, 520, 538, 561, 538, 496, 457, 424, 396, 373, 352, 333, 318, 305, 294,
+ 284, 276, 270, 266, 264, 265, 268, 273, 280, 289, 299, 313, 328, 344, 365, 390, 417,
+ 450, 488, 528, 549, 574, 554, 511, 469, 435, 406, 381, 360, 342, 327, 313, 302, 292,
+ 284, 278, 274, 273, 274, 276, 282, 288, 296, 308, 321, 335, 353, 374, 398, 427, 459,
+ 498, 539, 562, 599, 573, 526, 484, 448, 419, 392, 372, 352, 336, 323, 313, 303, 296,
+ 289, 284, 284, 285, 286, 292, 298, 307, 318, 331, 346, 363, 384, 410, 438, 472, 512,
+ 554, 576, 624, 597, 548, 504, 466, 435, 409, 387, 368, 352, 338, 324, 316, 308, 301,
+ 298, 297, 298, 299, 303, 310, 319, 330, 344, 358, 376, 398, 425, 455, 490, 530, 575,
+ 600, 650, 625, 573, 528, 489, 455, 427, 403, 384, 367, 353, 340, 330, 321, 316, 313,
+ 312, 312, 314, 317, 325, 333, 345, 358, 374, 394, 416, 442, 473, 509, 552, 597, 621,
+ 685, 658, 605, 556, 514, 480, 448, 423, 402, 384, 369, 356, 346, 338, 334, 328, 327,
+ 327, 330, 334, 341, 350, 362, 375, 391, 412, 436, 462, 495, 533, 577, 629, 656, 705,
+ 678, 626, 573, 528, 492, 462, 437, 416, 393, 380, 366, 355, 350, 343, 338, 337, 337,
+ 340, 343, 351, 359, 370, 386, 401, 421, 444, 474, 507, 548, 593, 649, 682
+ },
+ },
+ },
+ }
+};
+
+static const ot_isp_cmos_acs g_cmos_acs = {
+ /* acs_attr */
+ {
+ /* en */
+ 1,
+ /* y_strength */
+ 256,
+ /* run_interval */
+ 2,
+ /* lock_en */
+ 0,
+ },
+ /* acs_calib_param */
+ {
+ /* light_index */
+ {
+ -1, 23, 10, 5, 4, 1, 5, -1, 6, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 22,
+ -1, 0, 10, 14, 3, 14, 5, -1, 2, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 23,
+ },
+ /* model_ar_min */
+ -0.08f,
+ /* model_ar_step */
+ 0.098f,
+ /* model_ab_min */
+ 0,
+ /* model_ab_step */
+ 0.28f,
+ /* light_type_g_high */
+ 1,
+ /* light_type_g_low */
+ 2
+ },
+
+ /* acs_y_shading_lut */
+ {
+ /* g_param_high_ct */
+ {
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ },
+ /* g_param_low_ct */
+ {
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+ },
+ },
+
+ /* acs_color_shading_lut */
+ {
+ /* avg_rg_map */
+ {
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000
+ },
+
+ /* avg_bg_map */
+ {
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000
+ },
+
+ /* prof_rg_map */
+ {
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000
+ },
+
+ /* prof_bg_map */
+ {
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000, 1.000000000,
+ 1.000000000, 1.000000000, 1.000000000
+ }
+ }
+};
+
+static const ot_isp_cmos_clut g_cmos_clut = {
+ {
+ 1,
+ 128,
+ 128,
+ 128,
+ },
+ {
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 0, 67174464, 0, 67174464, 67174464, 67174464, 67174464, 0, 67174464,
+ 0, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 0, 67174464, 0, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 0, 67174464, 0, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 0, 67174464, 0, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 0, 67174464, 0, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 0, 67174464, 0,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 0, 67174464, 0, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 0,
+ 67174464, 0, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 0, 67174464, 0, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 0, 67174464, 0, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464,
+ 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 67174464, 0, 67174464, 0,
+ 67174464, 67174464, 0, 67174464, 0, 67174464, 67174464, 67174464, 0, 67174464, 67174464,
+ 67174464, 0, 67174464, 67174464, 67174464, 0, 67174464, 67174464, 67174464, 0, 67174464,
+ 67174464, 67174464, 0, 67174464, 67174464, 67174464, 0, 67174464, 67174464, 67174464, 0, 0, 0,
+ 0, 0, 67174464, 67174464, 0, 0, 67174464, 67174464, 0, 0, 67174464, 67174464, 0, 0, 67174464,
+ 67174464, 0, 0, 67174464, 67174464, 0, 0, 67174464, 67174464, 0, 0, 67174464, 67174464, 0, 0,
+ 67174464, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464,
+ 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0,
+ 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464,
+ 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464,
+ 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464,
+ 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0,
+ 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464,
+ 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0,
+ 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464,
+ 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0,
+ 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0,
+ 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0,
+ 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464,
+ 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464,
+ 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464,
+ 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464,
+ 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0,
+ 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0,
+ 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464,
+ 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464,
+ 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0,
+ 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464,
+ 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0,
+ 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464,
+ 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0,
+ 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0,
+ 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464,
+ 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0,
+ 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 0, 0,
+ 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0,
+ 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0, 67174464, 0, 0, 0,
+ 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67174464,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 67174464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0
+ }
+ },
+};
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif /* End of #ifdef __cplusplus */
+
+#endif /* SC035HGS_CMOS_PARAM_H */
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_sensor_ctrl.c b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_sensor_ctrl.c
new file mode 100644
index 0000000..467abf4
--- /dev/null
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_sensor_ctrl.c
@@ -0,0 +1,93 @@
+/*
+ Copyright (c), 2001-2025, Shenshu Tech. Co., Ltd.
+ */
+
+#include "sensor_common.h"
+#include "sc035hgs_cfg.h"
+#include "sc035hgs_cmos.h"
+
+static void sc035hgs_default_reg_init(cis_info *cis)
+{
+ td_u32 i;
+ td_s32 ret = TD_SUCCESS;
+ ot_isp_sns_state *past_sensor = TD_NULL;
+
+ past_sensor = cis->sns_state;
+ for (i = 0; i < past_sensor->regs_info[0].reg_num; i++) {
+ ret += cis_write_reg(&cis->i2c,
+ past_sensor->regs_info[0].i2c_data[i].reg_addr,
+ past_sensor->regs_info[0].i2c_data[i].data);
+ }
+
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("write register failed!\n");
+ }
+ return;
+}
+
+static td_s32 sc035hgs_reg_init(cis_info *cis, cis_reg_cfg *cfg, td_u32 len)
+{
+ td_u32 i;
+
+ sns_check_return(cis_write_reg(&cis->i2c, 0x0103, 0x01));
+ cis_delay_ms(1); /* 1ms */
+
+ for (i = 0; i < len; i++) {
+ sns_check_return(cis_write_reg(&cis->i2c, cfg->addr, cfg->data));
+ cfg++;
+ }
+
+ sc035hgs_default_reg_init(cis);
+
+ sns_check_return(cis_write_reg(&cis->i2c, 0x0100, 0x01));
+
+ return TD_SUCCESS;
+}
+
+td_s32 sc035hgs_linear_640x480_180fps_10bit_init(cis_info *cis)
+{
+ td_s32 ret;
+ td_u32 len;
+ cis_reg_cfg *cfg = TD_NULL;
+ ot_isp_sns_state *sns_state = TD_NULL;
+
+ sns_check_pointer_return(cis);
+ sns_state = cis->sns_state;
+ sns_check_pointer_return(sns_state);
+
+ if (sns_state->img_mode == SC035HGS_640X480_180FPS_10BIT_LINEAR_MODE) {
+ cfg = sc035hgs_linear_640x480_180fps_10bit;
+ len = (td_u32)(sizeof(sc035hgs_linear_640x480_180fps_10bit) /
+ sizeof(sc035hgs_linear_640x480_180fps_10bit[0]));
+ } else {
+ return TD_FAILURE;
+ }
+ ret = sc035hgs_reg_init(cis, cfg, len);
+ if (ret != TD_SUCCESS) {
+ isp_err_trace("sc035hgs_reg_init failed!\n");
+ return ret;
+ }
+
+ printf("===================================================================================\n");
+ printf("vi_pipe:%d,== SC035HGS_MIPI_24Minput_2lane_10bit_405Mbps_640x480_180fps Init OK! ==\n",
+ cis->pipe);
+ printf("===================================================================================\n");
+
+ return TD_SUCCESS;
+}
+
+td_s32 sc035hgs_get_standby_cfg(ot_isp_sns_regs_info *standby_cfg)
+{
+ td_u32 i;
+ standby_cfg->reg_num = (td_u32)(sizeof(sc035hgs_standby_cfg) / sizeof(sc035hgs_standby_cfg[0]));
+
+ for (i = 0; i < standby_cfg->reg_num; i++) {
+ standby_cfg->i2c_data[i].dev_addr = SC035HGS_I2C_ADDR;
+ standby_cfg->i2c_data[i].addr_byte_num = SC035HGS_ADDR_BYTE;
+ standby_cfg->i2c_data[i].data_byte_num = SC035HGS_DATA_BYTE;
+ standby_cfg->i2c_data[i].reg_addr = sc035hgs_standby_cfg[i].addr;
+ standby_cfg->i2c_data[i].data = sc035hgs_standby_cfg[i].data;
+ }
+
+ return TD_SUCCESS;
+}
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_sensor_ctrl.h b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_sensor_ctrl.h
new file mode 100644
index 0000000..5b845b1
--- /dev/null
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/cbb/isp/user/sensor/hi3516cv610/smart_sc035hgs/sc035hgs_sensor_ctrl.h
@@ -0,0 +1,24 @@
+/*
+ Copyright (c), 2001-2025, Shenshu Tech. Co., Ltd.
+ */
+
+#ifndef SC035HGS_SENSOR_CTRL_H
+#define SC035HGS_SENSOR_CTRL_H
+
+#include "sensor_common.h"
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C" {
+#endif
+#endif
+
+td_s32 sc035hgs_linear_640x480_180fps_10bit_init(cis_info *cis);
+td_s32 sc035hgs_get_standby_cfg(ot_isp_sns_regs_info *standby_cfg);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/Makefile.param b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/Makefile.param
index f197af3..27c87d7 100644
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/Makefile.param
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/Makefile.param
@@ -13,9 +13,10 @@ endif
#### OS04D10_MIPI_4M_30FPS_10BIT #################
#### SC4336P_MIPI_3M_30FPS_10BIT #################
#### SC4336P_MIPI_2M_30FPS_10BIT #################
+#### SC035HGS_MIPI_640X480_180FPS_10BIT #################
-SENSOR0_TYPE ?= SC4336P_MIPI_4M_30FPS_10BIT
-SENSOR1_TYPE ?= SC4336P_MIPI_4M_30FPS_10BIT
+SENSOR0_TYPE ?= SC035HGS_MIPI_640X480_180FPS_10BIT
+SENSOR1_TYPE ?= SC035HGS_MIPI_640X480_180FPS_10BIT
################# select board type for your sample ###############################
#### DMEB_BGA #################
@@ -44,6 +45,7 @@ MPI_LIBS += $(REL_LIB)/libcalcflicker.a
MPI_LIBS += $(REL_LIB)/libir_auto.a
MPI_LIBS += $(REL_LIB)/libacs.a
MPI_LIBS += $(REL_LIB)/libsns_sc4336p.a
+MPI_LIBS += $(REL_LIB)/libsns_sc035hgs.a
MPI_LIBS += $(REL_LIB)/libsns_gc4023.a
MPI_LIBS += $(REL_LIB)/libsns_sc431hai.a
MPI_LIBS += $(REL_LIB)/libsns_sc450ai.a
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm.h b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm.h
index 8c92986..10d7dd0 100644
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm.h
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm.h
@@ -235,6 +235,7 @@ typedef enum {
SC500AI_MIPI_5M_30FPS_10BIT_WDR2TO1,
SC4336P_MIPI_3M_30FPS_10BIT,
SC4336P_MIPI_2M_30FPS_10BIT,
+ SC035HGS_MIPI_640X480_180FPS_10BIT,
SNS_TYPE_BUTT,
} sample_sns_type;
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm_isp.c b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm_isp.c
index d8d43e4..a0980d7 100644
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm_isp.c
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm_isp.c
@@ -81,6 +81,21 @@ static ot_isp_pub_attr g_isp_pub_attr_sc4336p_mipi_2m_30fps = {
},
};
+static ot_isp_pub_attr g_isp_pub_attr_sc035hgs_mipi_640x480_180fps = {
+ { 0, 0, 640, 480 },
+ { 640, 480 },
+ 180,
+ OT_ISP_BAYER_BGGR,
+ OT_WDR_MODE_NONE,
+ 0,
+ 0,
+ 0,
+ {
+ 0,
+ { 0, 0, 640, 480 },
+ },
+};
+
static ot_isp_pub_attr g_isp_pub_attr_os04d10_mipi_4m_30fps = {
{ 0, 0, 2560, 1440 },
{ 2560, 1440 },
@@ -237,6 +252,10 @@ td_s32 sample_comm_isp_get_pub_attr_by_sns(sample_sns_type sns_type, ot_isp_pub_
(td_void)memcpy_s(pub_attr, sizeof(ot_isp_pub_attr),
&g_isp_pub_attr_sc4336p_mipi_2m_30fps, sizeof(ot_isp_pub_attr));
break;
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
+ (td_void)memcpy_s(pub_attr, sizeof(ot_isp_pub_attr),
+ &g_isp_pub_attr_sc035hgs_mipi_640x480_180fps, sizeof(ot_isp_pub_attr));
+ break;
case GC4023_MIPI_4M_30FPS_10BIT:
(td_void)memcpy_s(pub_attr, sizeof(ot_isp_pub_attr),
&g_isp_pub_attr_gc4023_mipi_4m_30fps, sizeof(ot_isp_pub_attr));
@@ -282,6 +301,10 @@ ot_isp_sns_obj *sample_comm_isp_get_sns_obj(sample_sns_type sns_type)
case SC4336P_MIPI_2M_30FPS_10BIT:
return &g_sns_sc4336p_obj;
#endif
+#ifdef SC035HGS_MIPI_640X480_180FPS_10BIT_SELECT
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
+ return &g_sns_sc035hgs_obj;
+#endif
#ifdef GC4023_MIPI_4M_30FPS_10BIT_SELECT
case GC4023_MIPI_4M_30FPS_10BIT:
return &g_sns_gc4023_obj;
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm_vi.c b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm_vi.c
index dccfc8a..6ba5dee 100644
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm_vi.c
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample/common/sample_comm_vi.c
@@ -29,6 +29,8 @@
#define FPN_FILE_NAME_LENGTH 150
#define WIDTH_1920 1920
#define HEIGHT_1080 1080
+#define WIDTH_640 640
+#define HEIGHT_480 480
#define WIDTH_2560 2560
#define HEIGHT_1440 1440
#define WIDTH_2688 2688
@@ -44,6 +46,7 @@
#define OB_HEIGHT_END 24
#define OB_HEIGHT_START 0
#define SC4336P_FULL_LINES_STD 1500
+#define SC035HGS_FULL_LINES_STD 528
#define OS04D10_FULL_LINES_STD 1473
#define SC450AI_FULL_LINES_STD 1560
#define SC500AI_FULL_LINES_STD 1650
@@ -172,6 +175,42 @@ static combo_dev_attr_t g_mipi_2lane_chn0_sensor_sc4336p_10bit_2m_nowdr_dev1_att
}
};
+static combo_dev_attr_t g_mipi_2lane_chn0_sensor_sc035hgs_10bit_640x480_nowdr_attr = {
+ .devno = 0,
+ .input_mode = INPUT_MODE_MIPI,
+ .data_rate = MIPI_DATA_RATE_X1,
+ .img_rect = {0, 0, WIDTH_640, HEIGHT_480},
+ .mipi_attr = {
+ DATA_TYPE_RAW_10BIT,
+ OT_MIPI_WDR_MODE_NONE,
+ {0, 1, -1, -1}
+ }
+};
+
+static combo_dev_attr_t g_mipi_2lane_chn0_sensor_sc035hgs_10bit_640x480_nowdr_dev0_attr = {
+ .devno = 0,
+ .input_mode = INPUT_MODE_MIPI,
+ .data_rate = MIPI_DATA_RATE_X1,
+ .img_rect = {0, 0, WIDTH_640, HEIGHT_480},
+ .mipi_attr = {
+ DATA_TYPE_RAW_10BIT,
+ OT_MIPI_WDR_MODE_NONE,
+ {0, 1, -1, -1}
+ }
+};
+
+static combo_dev_attr_t g_mipi_2lane_chn0_sensor_sc035hgs_10bit_640x480_nowdr_dev1_attr = {
+ .devno = 1,
+ .input_mode = INPUT_MODE_MIPI,
+ .data_rate = MIPI_DATA_RATE_X1,
+ .img_rect = {0, 0, WIDTH_640, HEIGHT_480},
+ .mipi_attr = {
+ DATA_TYPE_RAW_10BIT,
+ OT_MIPI_WDR_MODE_NONE,
+ {2, 3, -1, -1}
+ }
+};
+
static combo_dev_attr_t g_mipi_2lane_chn0_sensor_os04d10_10bit_4m_nowdr_attr = {
.devno = 0,
.input_mode = INPUT_MODE_MIPI,
@@ -369,6 +408,9 @@ static td_u32 sample_comm_vi_get_sensor_pixel_rate_by_type(sample_sns_type sns_t
case SC4336P_MIPI_3M_30FPS_10BIT:
pixel_rate = sample_comm_vi_calc_pipe_pixel_rate(630, 2, 10, 1); /* 630Mbps * 2lane / 10bit */
break;
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
+ pixel_rate = sample_comm_vi_calc_pipe_pixel_rate(405, 2, 10, 1); /* 405Mbps * 2lane / 10bit */
+ break;
case OS04D10_MIPI_4M_30FPS_10BIT:
pixel_rate = sample_comm_vi_calc_pipe_pixel_rate(720, 2, 10, 1); /* 720Mbps * 2lane / 10bit */
break;
@@ -416,6 +458,10 @@ static td_void sample_comm_vi_get_mipi_attr(sample_sns_type sns_type, combo_dev_
(td_void)memcpy_s(combo_attr, sizeof(combo_dev_attr_t),
&g_mipi_2lane_chn0_sensor_sc4336p_10bit_2m_nowdr_attr, sizeof(combo_dev_attr_t));
break;
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
+ (td_void)memcpy_s(combo_attr, sizeof(combo_dev_attr_t),
+ &g_mipi_2lane_chn0_sensor_sc035hgs_10bit_640x480_nowdr_attr, sizeof(combo_dev_attr_t));
+ break;
case OS04D10_MIPI_4M_30FPS_10BIT:
(td_void)memcpy_s(combo_attr, sizeof(combo_dev_attr_t),
&g_mipi_2lane_chn0_sensor_os04d10_10bit_4m_nowdr_attr, sizeof(combo_dev_attr_t));
@@ -462,6 +508,7 @@ static td_void sample_comm_vi_get_mipi_ext_data_attr(sample_sns_type sns_type, e
case SC4336P_MIPI_4M_30FPS_10BIT:
case SC4336P_MIPI_3M_30FPS_10BIT:
case SC4336P_MIPI_2M_30FPS_10BIT:
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
case GC4023_MIPI_4M_30FPS_10BIT:
case OS04D10_MIPI_4M_30FPS_10BIT:
case SC431HAI_MIPI_4M_30FPS_10BIT:
@@ -537,6 +584,15 @@ static td_void sample_comm_vi_get_mipi_attr_by_dev_id(sample_sns_type sns_type,
&g_mipi_2lane_chn0_sensor_sc4336p_10bit_2m_nowdr_dev1_attr, sizeof(combo_dev_attr_t));
}
break;
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
+ if (vi_dev == 0) {
+ (td_void)memcpy_s(combo_attr, sizeof(combo_dev_attr_t),
+ &g_mipi_2lane_chn0_sensor_sc035hgs_10bit_640x480_nowdr_dev0_attr, sizeof(combo_dev_attr_t));
+ } else if (vi_dev == 1) { /* dev1 */
+ (td_void)memcpy_s(combo_attr, sizeof(combo_dev_attr_t),
+ &g_mipi_2lane_chn0_sensor_sc035hgs_10bit_640x480_nowdr_dev1_attr, sizeof(combo_dev_attr_t));
+ }
+ break;
case GC4023_MIPI_4M_30FPS_10BIT:
if (vi_dev == 0) {
(td_void)memcpy_s(combo_attr, sizeof(combo_dev_attr_t),
@@ -657,6 +713,10 @@ td_void sample_comm_vi_get_size_by_sns_type(sample_sns_type sns_type, ot_size *s
size->width = WIDTH_1920;
size->height = HEIGHT_1080;
break;
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
+ size->width = WIDTH_640;
+ size->height = HEIGHT_480;
+ break;
default:
size->width = WIDTH_1920;
@@ -673,6 +733,9 @@ td_void sample_comm_vi_get_full_lines_std_by_sns_type(sample_sns_type sns_type,
case SC431HAI_MIPI_4M_30FPS_10BIT:
*full_lines_std = SC4336P_FULL_LINES_STD;
break;
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
+ *full_lines_std = SC035HGS_FULL_LINES_STD;
+ break;
case OS04D10_MIPI_4M_30FPS_10BIT:
*full_lines_std = OS04D10_FULL_LINES_STD;
break;
@@ -695,6 +758,7 @@ td_u32 sample_comm_vi_get_obheight_by_sns_type(sample_sns_type sns_type)
case SC4336P_MIPI_4M_30FPS_10BIT:
case SC4336P_MIPI_3M_30FPS_10BIT:
case SC4336P_MIPI_2M_30FPS_10BIT:
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
case GC4023_MIPI_4M_30FPS_10BIT:
case OS04D10_MIPI_4M_30FPS_10BIT:
case SC431HAI_MIPI_4M_30FPS_10BIT:
@@ -718,6 +782,7 @@ static td_u32 sample_comm_vi_get_pipe_num_by_sns_type(sample_sns_type sns_type)
case SC4336P_MIPI_4M_30FPS_10BIT:
case SC4336P_MIPI_3M_30FPS_10BIT:
case SC4336P_MIPI_2M_30FPS_10BIT:
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
case SC431HAI_MIPI_4M_30FPS_10BIT:
case SC450AI_MIPI_4M_30FPS_10BIT:
case SC500AI_MIPI_5M_30FPS_10BIT:
@@ -740,6 +805,7 @@ static ot_wdr_mode sample_comm_vi_get_wdr_mode_by_sns_type(sample_sns_type sns_t
case SC4336P_MIPI_4M_30FPS_10BIT:
case SC4336P_MIPI_3M_30FPS_10BIT:
case SC4336P_MIPI_2M_30FPS_10BIT:
+ case SC035HGS_MIPI_640X480_180FPS_10BIT:
case GC4023_MIPI_4M_30FPS_10BIT:
case OS04D10_MIPI_4M_30FPS_10BIT:
case SC431HAI_MIPI_4M_30FPS_10BIT:
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/include/ot_sns_ctrl.h b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/include/ot_sns_ctrl.h
index d75c887..6ec8215 100644
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/include/ot_sns_ctrl.h
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/include/ot_sns_ctrl.h
@@ -79,6 +79,7 @@ extern ot_isp_sns_obj g_sns_sc500ai_obj;
extern ot_isp_sns_obj g_sns_sc850sl_obj;
extern ot_isp_sns_obj g_sns_gst412c_obj;
extern ot_isp_sns_obj g_sns_sc4336p_obj;
+extern ot_isp_sns_obj g_sns_sc035hgs_obj;
extern ot_isp_sns_obj g_sns_gc4023_obj;
extern ot_isp_sns_obj g_sns_sc431hai_obj;
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/ko/load3516cv610/load3516cv610_20s b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/ko/load3516cv610/load3516cv610_20s
index b19072b..22c7b20 100644
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/ko/load3516cv610/load3516cv610_20s
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/ko/load3516cv610/load3516cv610_20s
@@ -10,6 +10,7 @@
####### select sensor type for your test ########################
#### sc4336p ####
+#### sc035hgs ####
#### gc4023 ####
#### sc450ai ####
#### sc500ai ####
@@ -166,8 +167,8 @@ load_usage()
echo " -ir_auto config ir_auto enable [default: 0]"
echo " -profile config sys_profile [default: 0]"
echo " -h help information"
- echo -e "Available sensors:sc4336p gc4023 sc450ai sc500ai bt1120/bt656/bt601"
- echo -e "for example: $0 -i -sensor0 sc4336p -sensor1 sc4336p -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1\n"
+ echo -e "Available sensors:sc4336p sc035hgs gc4023 sc450ai sc500ai bt1120/bt656/bt601"
+ echo -e "for example: $0 -i -sensor0 sc035hgs -sensor1 sc035hgs -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1\n"
}
b_arg_insmod=0
diff --git a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/ko/load3516cv610/load3516cv610_20s_debug b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/ko/load3516cv610/load3516cv610_20s_debug
index 299134c..7a79452 100755
--- a/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/ko/load3516cv610/load3516cv610_20s_debug
+++ b/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/ko/load3516cv610/load3516cv610_20s_debug
@@ -10,6 +10,7 @@
####### select sensor type for your test ########################
#### sc4336p ####
+#### sc035hgs ####
#### gc4023 ####
#### sc450ai ####
#### sc500ai ####
@@ -166,8 +167,8 @@ load_usage()
echo " -ir_auto config ir_auto enable [default: 0]"
echo " -profile config sys_profile [default: 0]"
echo " -h help information"
- echo -e "Available sensors:sc4336p gc4023 sc450ai sc500ai bt1120/bt656/bt601"
- echo -e "for example: $0 -i -sensor0 sc4336p -sensor1 sc4336p -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1\n"
+ echo -e "Available sensors:sc4336p sc035hgs gc4023 sc450ai sc500ai bt1120/bt656/bt601"
+ echo -e "for example: $0 -i -sensor0 sc035hgs -sensor1 sc035hgs -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1\n"
}
b_arg_insmod=0
374

被折叠的 条评论
为什么被折叠?



