xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/accm/rk_aiq_uapi_accm_int.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "rk_aiq_uapi_accm_int.h"
2 #include "accm/rk_aiq_types_accm_algo_prvt.h"
3 
4 #if RKAIQ_HAVE_CCM_V1
5 XCamReturn
rk_aiq_uapi_accm_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_ccm_attrib_t * attr,bool need_sync)6 rk_aiq_uapi_accm_SetAttrib(RkAiqAlgoContext *ctx,
7                            const rk_aiq_ccm_attrib_t* attr,
8                            bool need_sync)
9 {
10 
11     accm_context_t* ccm_contex = (accm_context_t*)ctx->accm_para;
12     ccm_contex->invarMode = ccm_contex->mCurAtt.mode & attr->mode;
13     ccm_contex->mCurAtt = *attr;
14     ccm_contex->updateAtt = true;
15     return XCAM_RETURN_NO_ERROR;
16 }
17 
18 XCamReturn
rk_aiq_uapi_accm_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_ccm_attrib_t * attr)19 rk_aiq_uapi_accm_GetAttrib(const RkAiqAlgoContext *ctx,
20                            rk_aiq_ccm_attrib_t *attr)
21 {
22 
23     accm_context_t* ccm_contex = (accm_context_t*)ctx->accm_para;
24     memcpy(ccm_contex->mCurAtt.stManual.ccMatrix, ccm_contex->ccmHwConf.matrix, sizeof(ccm_contex->ccmHwConf.matrix));
25     memcpy(ccm_contex->mCurAtt.stManual.ccOffsets, ccm_contex->ccmHwConf.offs, sizeof(ccm_contex->ccmHwConf.offs));
26     memcpy(ccm_contex->mCurAtt.stManual.y_alpha_curve, ccm_contex->ccmHwConf.alp_y, sizeof(ccm_contex->ccmHwConf.alp_y));
27     ccm_contex->mCurAtt.stManual.low_bound_pos_bit = ccm_contex->ccmHwConf.bound_bit;
28 
29     memcpy(attr, &ccm_contex->mCurAtt, sizeof(rk_aiq_ccm_attrib_t));
30 
31     return XCAM_RETURN_NO_ERROR;
32 }
33 #else
34 XCamReturn
rk_aiq_uapi_accm_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_ccm_attrib_t * attr,bool need_sync)35 rk_aiq_uapi_accm_SetAttrib(RkAiqAlgoContext *ctx,
36                            const rk_aiq_ccm_attrib_t* attr,
37                            bool need_sync)
38 {
39     return XCAM_RETURN_NO_ERROR;
40 }
41 
42 XCamReturn
rk_aiq_uapi_accm_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_ccm_attrib_t * attr)43 rk_aiq_uapi_accm_GetAttrib(const RkAiqAlgoContext *ctx,
44                            rk_aiq_ccm_attrib_t *attr)
45 {
46     return XCAM_RETURN_NO_ERROR;
47 }
48 #endif
49 
50 #if RKAIQ_HAVE_CCM_V2
51 XCamReturn
rk_aiq_uapi_accm_v2_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_ccm_v2_attrib_t * attr,bool need_sync)52 rk_aiq_uapi_accm_v2_SetAttrib(RkAiqAlgoContext *ctx,
53                            const rk_aiq_ccm_v2_attrib_t* attr,
54                            bool need_sync)
55 {
56 
57     accm_context_t* ccm_contex = (accm_context_t*)ctx->accm_para;
58     ccm_contex->invarMode = ccm_contex->mCurAttV2.mode & attr->mode;
59     ccm_contex->mCurAttV2 = *attr;
60     ccm_contex->updateAtt = true;
61     return XCAM_RETURN_NO_ERROR;
62 }
63 
64 XCamReturn
rk_aiq_uapi_accm_v2_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_ccm_v2_attrib_t * attr)65 rk_aiq_uapi_accm_v2_GetAttrib(const RkAiqAlgoContext *ctx,
66                            rk_aiq_ccm_v2_attrib_t *attr)
67 {
68 
69     accm_context_t* ccm_contex = (accm_context_t*)ctx->accm_para;
70 
71     memcpy(ccm_contex->mCurAttV2.stManual.ccMatrix, ccm_contex->ccmHwConf_v2.matrix,
72             sizeof(float)*9);
73     memcpy(ccm_contex->mCurAttV2.stManual.ccOffsets, ccm_contex->ccmHwConf_v2.offs,
74             sizeof(float)*3);
75     memcpy(ccm_contex->mCurAttV2.stManual.y_alpha_curve, ccm_contex->ccmHwConf_v2.alp_y,
76             sizeof(float)*CCM_CURVE_DOT_NUM_V2);
77     memcpy(ccm_contex->mCurAttV2.stManual.enh_rgb2y_para, ccm_contex->ccmHwConf_v2.enh_rgb2y_para,
78             sizeof(unsigned char)*3);
79     ccm_contex->mCurAttV2.stManual.enh_adj_en  = ccm_contex->ccmHwConf_v2.enh_adj_en;
80     ccm_contex->mCurAttV2.stManual.enh_rat_max = ccm_contex->ccmHwConf_v2.enh_rat_max;
81     ccm_contex->mCurAttV2.stManual.highy_adj_en  = ccm_contex->ccmHwConf_v2.highy_adj_en;
82     ccm_contex->mCurAttV2.stManual.asym_enable  = ccm_contex->ccmHwConf_v2.asym_adj_en;
83     ccm_contex->mCurAttV2.stManual.bound_pos_bit  = ccm_contex->ccmHwConf_v2.bound_bit;
84     ccm_contex->mCurAttV2.stManual.right_pos_bit  = ccm_contex->ccmHwConf_v2.right_bit;
85 
86     memcpy(attr, &ccm_contex->mCurAttV2, sizeof(rk_aiq_ccm_v2_attrib_t));
87 
88     return XCAM_RETURN_NO_ERROR;
89 }
90 #else
91 XCamReturn
rk_aiq_uapi_accm_v2_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_ccm_v2_attrib_t * attr,bool need_sync)92 rk_aiq_uapi_accm_v2_SetAttrib(RkAiqAlgoContext *ctx,
93                            const rk_aiq_ccm_v2_attrib_t* attr,
94                            bool need_sync)
95 {
96     return XCAM_RETURN_NO_ERROR;
97 }
98 
99 XCamReturn
rk_aiq_uapi_accm_v2_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_ccm_v2_attrib_t * attr)100 rk_aiq_uapi_accm_v2_GetAttrib(const RkAiqAlgoContext *ctx,
101                            rk_aiq_ccm_v2_attrib_t *attr)
102 {
103     return XCAM_RETURN_NO_ERROR;
104 }
105 #endif
106 
107 XCamReturn
rk_aiq_uapi_accm_QueryCcmInfo(const RkAiqAlgoContext * ctx,rk_aiq_ccm_querry_info_t * ccm_querry_info)108 rk_aiq_uapi_accm_QueryCcmInfo(const RkAiqAlgoContext *ctx,
109                               rk_aiq_ccm_querry_info_t *ccm_querry_info )
110 {
111 
112     accm_context_t* ccm_contex = (accm_context_t*)ctx->accm_para;
113     ccm_querry_info->finalSat = 0;
114     memset(ccm_querry_info->ccmname1, 0x0, sizeof(ccm_querry_info->ccmname1));
115     memset(ccm_querry_info->ccmname2, 0x0, sizeof(ccm_querry_info->ccmname2));
116 
117 #if RKAIQ_HAVE_CCM_V1
118     if (ccm_contex->ccmHwConf.ccmEnable && ccm_contex->mCurAtt.mode == RK_AIQ_CCM_MODE_AUTO){
119         ccm_querry_info->finalSat = ccm_contex->accmRest.fSaturation;
120         if (ccm_contex->accmRest.pCcmProfile1) {
121             if (ccm_contex->accmRest.pCcmProfile1->name) {
122                 strcpy(ccm_querry_info->ccmname1, ccm_contex->accmRest.pCcmProfile1->name);
123             }
124         }
125         if (ccm_contex->accmRest.pCcmProfile2) {
126             if (ccm_contex->accmRest.pCcmProfile2->name) {
127                 strcpy(ccm_querry_info->ccmname2, ccm_contex->accmRest.pCcmProfile2->name);
128             }
129         }
130         else
131             strcpy(ccm_querry_info->ccmname2, ccm_querry_info->ccmname1);
132     }
133     memcpy(ccm_querry_info->y_alpha_curve, ccm_contex->ccmHwConf.alp_y, sizeof(ccm_contex->ccmHwConf.alp_y));
134     memcpy(ccm_querry_info->ccMatrix, ccm_contex->ccmHwConf.matrix, sizeof(ccm_contex->ccmHwConf.matrix));
135     memcpy(ccm_querry_info->ccOffsets, ccm_contex->ccmHwConf.offs, sizeof(ccm_contex->ccmHwConf.offs));
136     ccm_querry_info->ccm_en = ccm_contex->ccmHwConf.ccmEnable;
137     ccm_querry_info->low_bound_pos_bit = ccm_contex->ccmHwConf.bound_bit;
138     ccm_querry_info->right_pos_bit = ccm_contex->ccmHwConf.bound_bit;
139     ccm_querry_info->highy_adj_en = true;
140     ccm_querry_info->asym_enable = false;
141 #endif
142 
143 #if RKAIQ_HAVE_CCM_V2
144     if (ccm_contex->ccmHwConf_v2.ccmEnable && ccm_contex->mCurAttV2.mode == RK_AIQ_CCM_MODE_AUTO){
145         ccm_querry_info->finalSat = ccm_contex->accmRest.fSaturation;
146         if (ccm_contex->accmRest.pCcmProfile1) {
147             if (ccm_contex->accmRest.pCcmProfile1->name) {
148                 strcpy(ccm_querry_info->ccmname1, ccm_contex->accmRest.pCcmProfile1->name);
149             }
150         }
151         if (ccm_contex->accmRest.pCcmProfile2) {
152             if (ccm_contex->accmRest.pCcmProfile2->name) {
153                 strcpy(ccm_querry_info->ccmname2, ccm_contex->accmRest.pCcmProfile2->name);
154             }
155         }
156         else
157             strcpy(ccm_querry_info->ccmname2, ccm_querry_info->ccmname1);
158     }
159     ccm_querry_info->highy_adj_en = ccm_contex->ccmHwConf_v2.highy_adj_en;
160     ccm_querry_info->asym_enable  = ccm_contex->ccmHwConf_v2.asym_adj_en;
161     memcpy(ccm_querry_info->y_alpha_curve, ccm_contex->ccmHwConf_v2.alp_y,
162            sizeof(ccm_contex->ccmHwConf_v2.alp_y));
163     memcpy(ccm_querry_info->ccMatrix, ccm_contex->ccmHwConf_v2.matrix,
164            sizeof(ccm_contex->ccmHwConf_v2.matrix));
165     memcpy(ccm_querry_info->ccOffsets, ccm_contex->ccmHwConf_v2.offs,
166            sizeof(ccm_contex->ccmHwConf_v2.offs));
167     ccm_querry_info->ccm_en            = ccm_contex->ccmHwConf_v2.ccmEnable;
168     ccm_querry_info->low_bound_pos_bit = ccm_contex->ccmHwConf_v2.bound_bit;
169     ccm_querry_info->right_pos_bit     = ccm_contex->ccmHwConf_v2.right_bit;
170 #endif
171 
172     ccm_querry_info->color_inhibition_level = ccm_contex->accmRest.color_inhibition_level;
173     ccm_querry_info->color_saturation_level = ccm_contex->accmRest.color_saturation_level;
174 
175     return XCAM_RETURN_NO_ERROR;
176 }
177 
178 
179