xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/agic/rk_aiq_algo_agic_itf.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (c) 2019-2022 Rockchip Eletronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include "algos/agic/rk_aiq_algo_agic_itf.h"
17 
18 #include "algos/agic/rk_aiq_types_algo_agic_prvt.h"
19 #include "algos/rk_aiq_algo_types.h"
20 
21 RKAIQ_BEGIN_DECLARE
22 
create_context(RkAiqAlgoContext ** context,const AlgoCtxInstanceCfg * cfg)23 static XCamReturn create_context(RkAiqAlgoContext** context, const AlgoCtxInstanceCfg* cfg) {
24     LOG1_AGIC("enter!");
25 
26     RkAiqAlgoContext* ctx = new RkAiqAlgoContext();
27     if (ctx == NULL) {
28         LOGE_AGIC("Create gic context fail!");
29         return XCAM_RETURN_ERROR_MEM;
30     }
31     CamCalibDbV2Context_t* calibv2 = cfg->calibv2;
32     AgicInit(&ctx->agicCtx, calibv2);
33 
34     *context = ctx;
35     LOG1_AGIC("exit!");
36     return XCAM_RETURN_NO_ERROR;
37 }
38 
destroy_context(RkAiqAlgoContext * context)39 static XCamReturn destroy_context(RkAiqAlgoContext* context) {
40     LOG1_AGIC("enter!");
41 
42     AgicContext_t* pAgicCtx = (AgicContext_t*)&context->agicCtx;
43     AgicRelease(pAgicCtx);
44     delete context;
45 
46     LOG1_AGIC("exit!");
47     return XCAM_RETURN_NO_ERROR;
48 }
49 
prepare(RkAiqAlgoCom * params)50 static XCamReturn prepare(RkAiqAlgoCom* params) {
51     LOG1_AGIC("enter!");
52 
53     AgicContext_t* pAgicCtx        = (AgicContext_t*)&params->ctx->agicCtx;
54     RkAiqAlgoConfigAgic* pCfgParam = (RkAiqAlgoConfigAgic*)params;
55     CamCalibDbV2Context_t* calibv2 = pCfgParam->com.u.prepare.calibv2;
56 
57     if (!!(params->u.prepare.conf_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) {
58         LOGD_AGIC("%s: Agic Reload Para!\n", __FUNCTION__);
59 
60 #if RKAIQ_HAVE_GIC_V1
61         CalibDbV2_Gic_V20_t* calibv2_agic_calib_V20 =
62             (CalibDbV2_Gic_V20_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, agic_calib_v20));
63         pAgicCtx->full_param.gic_v20 = calibv2_agic_calib_V20;
64         GicV1CalibToAttr(calibv2_agic_calib_V20, &pAgicCtx->attr.v1);
65 #endif
66 #if RKAIQ_HAVE_GIC_V2
67         CalibDbV2_Gic_V21_t* calibv2_agic_calib_V21 =
68             (CalibDbV2_Gic_V21_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, agic_calib_v21));
69         pAgicCtx->full_param.gic_v21 = calibv2_agic_calib_V21;
70         GicV2CalibToAttr(calibv2_agic_calib_V21, &pAgicCtx->attr.v2);
71 #endif
72 
73         pAgicCtx->calib_changed = true;
74     }
75 
76     pAgicCtx->working_mode = pCfgParam->com.u.prepare.working_mode;
77 
78     LOG1_AGIC("exit!");
79     return XCAM_RETURN_NO_ERROR;
80 }
81 #if 0
82 static XCamReturn pre_process(const RkAiqAlgoCom* inparams, RkAiqAlgoResCom* outparams) {
83     LOG1_AGIC("enter!");
84 
85     RkAiqAlgoConfigAgic* config            = (RkAiqAlgoConfigAgic*)inparams;
86     RkAiqAlgoPreResAgic* pAgicPreResParams = (RkAiqAlgoPreResAgic*)outparams;
87     AgicContext_t* pAgicCtx                = (AgicContext_t*)&inparams->ctx->agicCtx;
88 
89     if (config->com.u.proc.gray_mode)
90         pAgicCtx->Gic_Scene_mode = GIC_NIGHT;
91     else if (GIC_NORMAL == pAgicCtx->working_mode)
92         pAgicCtx->Gic_Scene_mode = GIC_NORMAL;
93     else
94         pAgicCtx->Gic_Scene_mode = GIC_HDR;
95 
96     LOG1_AGIC("exit!");
97     return XCAM_RETURN_NO_ERROR;
98 }
99 #endif
processing(const RkAiqAlgoCom * inparams,RkAiqAlgoResCom * outparams)100 static XCamReturn processing(const RkAiqAlgoCom* inparams, RkAiqAlgoResCom* outparams) {
101     LOG1_AGIC("enter!");
102     RkAiqAlgoProcAgic* pAgicProcParams       = (RkAiqAlgoProcAgic*)inparams;
103     RkAiqAlgoProcResAgic* pAgicProcResParams = (RkAiqAlgoProcResAgic*)outparams;
104     AgicContext_t* pAgicCtx                  = (AgicContext_t*)&inparams->ctx->agicCtx;
105     int iso                                  = pAgicProcParams->iso;
106 
107     if (inparams->u.proc.gray_mode)
108         pAgicCtx->Gic_Scene_mode = GIC_NIGHT;
109     else if (GIC_NORMAL == pAgicCtx->working_mode)
110         pAgicCtx->Gic_Scene_mode = GIC_NORMAL;
111     else
112         pAgicCtx->Gic_Scene_mode = GIC_HDR;
113 
114     pAgicCtx->raw_bits       = pAgicProcParams->raw_bits;
115     pAgicCtx->Gic_Scene_mode = 0;
116     if (pAgicCtx->last_iso != iso || pAgicCtx->calib_changed) {
117         AgicProcess(pAgicCtx, iso, pAgicCtx->Gic_Scene_mode);
118         pAgicCtx->calib_changed          = false;
119         AgicGetProcResult(pAgicCtx, pAgicProcResParams->gicRes);
120         outparams->cfg_update = true;
121         pAgicCtx->last_iso = iso;
122     } else {
123         outparams->cfg_update = false;
124     }
125 
126     LOG1_AGIC("enter!");
127     return XCAM_RETURN_NO_ERROR;
128 }
129 
post_process(const RkAiqAlgoCom * inparams,RkAiqAlgoResCom * outparams)130 static XCamReturn post_process(const RkAiqAlgoCom* inparams, RkAiqAlgoResCom* outparams) {
131     (void)(inparams);
132     (void)(outparams);
133 
134     return XCAM_RETURN_NO_ERROR;
135 }
136 
137 RkAiqAlgoDescription g_RkIspAlgoDescAgic = {
138     .common =
139     {
140         .version         = RKISP_ALGO_AGIC_VERSION,
141         .vendor          = RKISP_ALGO_AGIC_VENDOR,
142         .description     = RKISP_ALGO_AGIC_DESCRIPTION,
143         .type            = RK_AIQ_ALGO_TYPE_AGIC,
144         .id              = 0,
145         .create_context  = create_context,
146         .destroy_context = destroy_context,
147     },
148     .prepare      = prepare,
149     .pre_process  = NULL,
150     .processing   = processing,
151     .post_process = NULL,
152 };
153 
154 RKAIQ_END_DECLARE
155