1 #ifndef _RK_AIQ_CALIB_TYPES_H_
2 #define _RK_AIQ_CALIB_TYPES_H_
3 #include "rk_aiq_algo_des.h"
4
5 #include "common/list.h"
6 #include "RkAiqCalibDbTypesIsp20.h"
7 #include "RkAiqCalibDbTypesIsp21.h"
8
9 #pragma pack(4)
10
11 #ifndef CAMCALIBDBCONTEXT_T
12 #define CAMCALIBDBCONTEXT_T
13 typedef void CamCalibDbContext_t;
14 #endif
15
16 #if 0
17 #define RKAIQ_CALIB_GET_HW_VER(ctx) \
18 ((CalibDb_Header_t*)(ctx))->isp_hw_version
19 #endif
20
21 #define TO_CALIBDBV1_ISP20(ctx) \
22 ((CamCalibDbContextIsp20_t*)ctx)
23
24 #define TO_CALIBDBV1_ISP21(ctx) \
25 ((CamCalibDbContextIsp21_t*)ctx)
26
27 #define CALIB_MODULE_RELATIVE_OFFSET(type, x) \
28 (long)(&((type*)0)->x)
29
30 #define CALIB_MODULE_PTR(ctx, type, mn) \
31 ((char*)(ctx) + CALIB_MODULE_RELATIVE_OFFSET(type, mn))
32
33
34 #define CALIB_FN_DEFINE_COMMON(module) \
35 static inline void* calibdb_get_##module##_ptr(void* ctx) { \
36 if (CHECK_ISP_HW_V20()) \
37 return CALIB_MODULE_PTR(ctx, CamCalibDbContextIsp20_t, module); \
38 else if (CHECK_ISP_HW_V21()) \
39 return CALIB_MODULE_PTR(ctx, CamCalibDbContextIsp21_t, module); \
40 else \
41 return NULL; \
42 }
43
44 #define CALIB_FN_DEFINE_SPEC(ver, module) \
45 static inline void* calibdb_get_##module##_ptr(void* ctx) { \
46 if (g_rkaiq_isp_hw_ver == ver) \
47 return CALIB_MODULE_PTR(ctx, CamCalibDbContextIsp##ver##_t, module); \
48 else \
49 return NULL; \
50 }
51
52 typedef struct calibdb_ctx_member_offset_info_s {
53 const char* module_name;
54 long offset;
55 } calibdb_ctx_member_offset_info_t;
56
57 #define CALIB_MODULE_RELATIVE_OFFSET_ISP20(nm) \
58 CALIB_MODULE_RELATIVE_OFFSET(CamCalibDbContextIsp20_t, nm)
59
60 static calibdb_ctx_member_offset_info_t info_CamCalibDbContextIsp20_t[] = {
61 { "header", CALIB_MODULE_RELATIVE_OFFSET_ISP20(header)},
62 { "awb_calib_para_v200", CALIB_MODULE_RELATIVE_OFFSET_ISP20(awb_calib_para_v200)},
63 { "awb_adjust_para", CALIB_MODULE_RELATIVE_OFFSET_ISP20(awb_adjust_para)},
64 { "lut3d", CALIB_MODULE_RELATIVE_OFFSET_ISP20(lut3d)},
65 { "aec", CALIB_MODULE_RELATIVE_OFFSET_ISP20(aec)},
66 { "af", CALIB_MODULE_RELATIVE_OFFSET_ISP20(af)},
67 { "amerge", CALIB_MODULE_RELATIVE_OFFSET_ISP20(amerge)},
68 { "atmo", CALIB_MODULE_RELATIVE_OFFSET_ISP20(atmo)},
69 { "blc", CALIB_MODULE_RELATIVE_OFFSET_ISP20(blc)},
70 { "dpcc", CALIB_MODULE_RELATIVE_OFFSET_ISP20(dpcc)},
71 { "bayerNr", CALIB_MODULE_RELATIVE_OFFSET_ISP20(bayerNr)},
72 { "lsc", CALIB_MODULE_RELATIVE_OFFSET_ISP20(lsc)},
73 { "dm", CALIB_MODULE_RELATIVE_OFFSET_ISP20(dm)},
74 { "ccm", CALIB_MODULE_RELATIVE_OFFSET_ISP20(ccm)},
75 { "uvnr", CALIB_MODULE_RELATIVE_OFFSET_ISP20(uvnr)},
76 { "gamma", CALIB_MODULE_RELATIVE_OFFSET_ISP20(gamma)},
77 { "degamma", CALIB_MODULE_RELATIVE_OFFSET_ISP20(degamma)},
78 { "ynr", CALIB_MODULE_RELATIVE_OFFSET_ISP20(ynr)},
79 { "gic", CALIB_MODULE_RELATIVE_OFFSET_ISP20(gic)},
80 { "mfnr", CALIB_MODULE_RELATIVE_OFFSET_ISP20(mfnr)},
81 { "sharp", CALIB_MODULE_RELATIVE_OFFSET_ISP20(sharp)},
82 { "edgeFilter", CALIB_MODULE_RELATIVE_OFFSET_ISP20(edgeFilter)},
83 { "dehaze", CALIB_MODULE_RELATIVE_OFFSET_ISP20(dehaze)},
84 { "afec", CALIB_MODULE_RELATIVE_OFFSET_ISP20(afec)},
85 { "aldch", CALIB_MODULE_RELATIVE_OFFSET_ISP20(aldch)},
86 { "lumaDetect", CALIB_MODULE_RELATIVE_OFFSET_ISP20(lumaDetect)},
87 { "orb", CALIB_MODULE_RELATIVE_OFFSET_ISP20(orb)},
88 { "sensor", CALIB_MODULE_RELATIVE_OFFSET_ISP20(sensor)},
89 { "module", CALIB_MODULE_RELATIVE_OFFSET_ISP20(module)},
90 { "cpsl", CALIB_MODULE_RELATIVE_OFFSET_ISP20(cpsl)},
91 { "colorAsGrey", CALIB_MODULE_RELATIVE_OFFSET_ISP20(colorAsGrey)},
92 { "cProc", CALIB_MODULE_RELATIVE_OFFSET_ISP20(cProc)},
93 { "ie", CALIB_MODULE_RELATIVE_OFFSET_ISP20(ie)},
94 { "sysContrl", CALIB_MODULE_RELATIVE_OFFSET_ISP20(sysContrl)},
95 { NULL, 0},
96 };
97
98 #define CALIB_MODULE_RELATIVE_OFFSET_ISP21(nm) \
99 CALIB_MODULE_RELATIVE_OFFSET(CamCalibDbContextIsp21_t, nm)
100
101 static calibdb_ctx_member_offset_info_t info_CamCalibDbContextIsp21_t[] = {
102 { "header", CALIB_MODULE_RELATIVE_OFFSET_ISP21(header)},
103 { "awb_calib_para_v201", CALIB_MODULE_RELATIVE_OFFSET_ISP21(awb_calib_para_v201)},
104 { "awb_adjust_para", CALIB_MODULE_RELATIVE_OFFSET_ISP21(awb_adjust_para)},
105 { "lut3d", CALIB_MODULE_RELATIVE_OFFSET_ISP21(lut3d)},
106 { "ae_calib_para", CALIB_MODULE_RELATIVE_OFFSET_ISP21(ae_calib_para)},
107 { "ae_tuning_para", CALIB_MODULE_RELATIVE_OFFSET_ISP21(ae_tuning_para)},
108 { "af", CALIB_MODULE_RELATIVE_OFFSET_ISP21(af)},
109 { "amerge", CALIB_MODULE_RELATIVE_OFFSET_ISP21(amerge)},
110 { "adrc", CALIB_MODULE_RELATIVE_OFFSET_ISP21(adrc)},
111 { "blc", CALIB_MODULE_RELATIVE_OFFSET_ISP21(blc)},
112 { "dpcc", CALIB_MODULE_RELATIVE_OFFSET_ISP21(dpcc)},
113 { "lsc", CALIB_MODULE_RELATIVE_OFFSET_ISP21(lsc)},
114 { "dm", CALIB_MODULE_RELATIVE_OFFSET_ISP21(dm)},
115 { "ccm", CALIB_MODULE_RELATIVE_OFFSET_ISP21(ccm)},
116 { "gamma", CALIB_MODULE_RELATIVE_OFFSET_ISP21(gamma)},
117 { "degamma", CALIB_MODULE_RELATIVE_OFFSET_ISP21(degamma)},
118 { "gic", CALIB_MODULE_RELATIVE_OFFSET_ISP21(gic)},
119 { "dehaze", CALIB_MODULE_RELATIVE_OFFSET_ISP21(dehaze)},
120 { "aldch", CALIB_MODULE_RELATIVE_OFFSET_ISP21(aldch)},
121 { "lumaDetect", CALIB_MODULE_RELATIVE_OFFSET_ISP21(lumaDetect)},
122 { "expset", CALIB_MODULE_RELATIVE_OFFSET_ISP21(expset)},
123 { "module", CALIB_MODULE_RELATIVE_OFFSET_ISP21(module)},
124 { "cpsl", CALIB_MODULE_RELATIVE_OFFSET_ISP21(cpsl)},
125 { "colorAsGrey", CALIB_MODULE_RELATIVE_OFFSET_ISP21(colorAsGrey)},
126 { "cProc", CALIB_MODULE_RELATIVE_OFFSET_ISP21(cProc)},
127 { "ie", CALIB_MODULE_RELATIVE_OFFSET_ISP21(ie)},
128 { "list_bayernr_v2", CALIB_MODULE_RELATIVE_OFFSET_ISP21(list_bayernr_v2)},
129 { "list_ynr_v2", CALIB_MODULE_RELATIVE_OFFSET_ISP21(list_ynr_v2)},
130 { "list_cnr_v1", CALIB_MODULE_RELATIVE_OFFSET_ISP21(list_cnr_v1)},
131 { "list_sharp_v3", CALIB_MODULE_RELATIVE_OFFSET_ISP21(list_sharp_v3)},
132 { NULL, 0},
133 };
134
135 typedef struct calibdb_ctx_infos_s {
136 int ver;
137 calibdb_ctx_member_offset_info_t* offset_info;
138 } calibdb_ctx_infos_t;
139
140 #pragma GCC diagnostic push
141 #pragma GCC diagnostic ignored "-Wunused-variable"
142 static calibdb_ctx_infos_t info_CamCalibDbContext_array[] = {
143 { 20, info_CamCalibDbContextIsp20_t },
144 { 21, info_CamCalibDbContextIsp21_t },
145 { 0, NULL},
146 };
147 #pragma GCC diagnostic pop
148
149 static inline void*
calibdb_get_module_ptr(void * ctx,calibdb_ctx_infos_t * info_array,const char * module_name)150 calibdb_get_module_ptr(void* ctx,
151 calibdb_ctx_infos_t* info_array,
152 const char* module_name) {
153 calibdb_ctx_infos_t* ctx_info = NULL;
154 int i;
155 for (i = 0; info_array[i].offset_info != NULL; i++) {
156 if (g_rkaiq_isp_hw_ver == info_array[i].ver) {
157 ctx_info = &info_array[i];
158 break;
159 }
160 }
161 if (!ctx_info)
162 return NULL;
163
164 calibdb_ctx_member_offset_info_t* ctx_offset_infos = ctx_info->offset_info;
165 while (ctx_offset_infos->module_name != NULL) {
166 if (strcmp(ctx_offset_infos->module_name, module_name) == 0)
167 break;
168 ctx_offset_infos++;
169 }
170 if (ctx_offset_infos->module_name != NULL)
171 return ((char*)(ctx) + ctx_offset_infos->offset);
172
173 return NULL;
174 }
175
176 #define CALIBDB_GET_MODULE_PTR(ctx, module) \
177 calibdb_get_module_ptr(ctx, info_CamCalibDbContext_array, #module)
178
179 #pragma pack()
180
181 #endif
182