xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/iq_parser/RkAiqCalibDbTypes.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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