| /* | 
|  * rk_aiq_algo_agamma_itf.c | 
|  * | 
|  *  Copyright (c) 2019 Rockchip Corporation | 
|  * | 
|  * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  * you may not use this file except in compliance with the License. | 
|  * You may obtain a copy of the License at | 
|  * | 
|  *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  * | 
|  * Unless required by applicable law or agreed to in writing, software | 
|  * distributed under the License is distributed on an "AS IS" BASIS, | 
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  * See the License for the specific language governing permissions and | 
|  * limitations under the License. | 
|  * | 
|  */ | 
|   | 
| #include "rk_aiq_algo_types_int.h" | 
| #include "agamma/rk_aiq_algo_agamma_itf.h" | 
| #include "agamma/rk_aiq_agamma_algo.h" | 
|   | 
| RKAIQ_BEGIN_DECLARE | 
|   | 
| typedef struct _RkAiqAlgoContext { | 
|     void* place_holder[0]; | 
| } RkAiqAlgoContext; | 
|   | 
|   | 
|   | 
| static XCamReturn | 
| create_context(RkAiqAlgoContext **context, const AlgoCtxInstanceCfg* cfg) | 
| { | 
|     LOG1_AGAMMA("ENTER: %s \n", __func__); | 
|     XCamReturn ret = XCAM_RETURN_NO_ERROR; | 
|     AgammaHandle_t*AgammaHandle = NULL; | 
|     AlgoCtxInstanceCfgInt* instanc_int = (AlgoCtxInstanceCfgInt*)cfg; | 
|     CamCalibDbV2Context_t* calibV2 = instanc_int->calibv2; | 
|   | 
|     ret = AgammaInit(&AgammaHandle, calibV2); | 
|   | 
|     AgammaHandle->HWversion = instanc_int->cfg_com.isp_hw_version;//get hadrware version | 
|   | 
|     *context = (RkAiqAlgoContext *)(AgammaHandle); | 
|   | 
|     LOG1_AGAMMA("EXIT: %s \n", __func__); | 
|     return ret; | 
| } | 
|   | 
| static XCamReturn | 
| destroy_context(RkAiqAlgoContext *context) | 
| { | 
|     LOG1_AGAMMA("ENTER: %s \n", __func__); | 
|     AgammaHandle_t*AgammaHandle = (AgammaHandle_t*)context; | 
|     XCamReturn ret = XCAM_RETURN_NO_ERROR; | 
|   | 
|     ret = AgammaRelease(AgammaHandle); | 
|   | 
|     LOG1_AGAMMA("EXIT: %s \n", __func__); | 
|     return ret; | 
| } | 
|   | 
| static XCamReturn | 
| prepare(RkAiqAlgoCom* params) | 
| { | 
|     LOG1_AGAMMA("ENTER: %s \n", __func__); | 
|     XCamReturn ret = XCAM_RETURN_NO_ERROR; | 
|     AgammaHandle_t * AgammaHandle = (AgammaHandle_t *)params->ctx; | 
|     RkAiqAlgoConfigAgammaInt* pCfgParam = (RkAiqAlgoConfigAgammaInt*)params; | 
|     rk_aiq_gamma_cfg_t *agamma_config = &AgammaHandle->agamma_config; | 
|     AgammaHandle->working_mode = pCfgParam->agamma_config_com.com.u.prepare.working_mode; | 
|     AgammaHandle->prepare_type = pCfgParam->agamma_config_com.com.u.prepare.conf_type; | 
|   | 
|     if(!!(AgammaHandle->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB )) { | 
|         CalibDbV2_gamma_t* calibv2_agamma_calib = | 
|             (CalibDbV2_gamma_t*)(CALIBDBV2_GET_MODULE_PTR((void*)(pCfgParam->rk_com.u.prepare.calibv2), agamma_calib)); | 
|         AgammaHandle->pCalibDb = calibv2_agamma_calib;//reload iq | 
|         LOGD_AGAMMA("%s: Agamma Reload Para!!!\n", __FUNCTION__); | 
|     } | 
|   | 
|     LOG1_AGAMMA("EXIT: %s \n", __func__); | 
|     return ret; | 
| } | 
|   | 
| static XCamReturn | 
| pre_process(const RkAiqAlgoCom* inparams, RkAiqAlgoResCom* outparams) | 
| { | 
|     LOG1_AGAMMA("ENTER: %s \n", __func__); | 
|     RkAiqAlgoPreAgammaInt* pAgammaPreParams = (RkAiqAlgoPreAgammaInt*)inparams; | 
|     AgammaHandle_t * AgammaHandle = (AgammaHandle_t *)inparams->ctx; | 
|     rk_aiq_gamma_cfg_t *agamma_config = &AgammaHandle->agamma_config; | 
|   | 
|   | 
|     LOG1_AGAMMA("EXIT: %s \n", __func__); | 
|     return XCAM_RETURN_NO_ERROR; | 
| } | 
|   | 
| static XCamReturn | 
| processing(const RkAiqAlgoCom* inparams, RkAiqAlgoResCom* outparams) | 
| { | 
|     LOG1_AGAMMA("ENTER: %s \n", __func__); | 
|     XCamReturn ret = XCAM_RETURN_NO_ERROR; | 
|     AgammaHandle_t * AgammaHandle = (AgammaHandle_t *)inparams->ctx; | 
|     RkAiqAlgoProcResAgamma* procResPara = (RkAiqAlgoProcResAgamma*)outparams; | 
|     AgammaProcRes_t* AgammaProcRes = (AgammaProcRes_t*)&procResPara->agamma_proc_res; | 
|   | 
|     AgammaProcessing(AgammaHandle); | 
|   | 
|     //set proc res | 
|     AgammaSetProcRes(AgammaProcRes, &AgammaHandle->agamma_config); | 
|     LOG1_AGAMMA("EXIT: %s \n", __func__); | 
|     return ret; | 
| } | 
|   | 
| static XCamReturn | 
| post_process(const RkAiqAlgoCom* inparams, RkAiqAlgoResCom* outparams) | 
| { | 
|     return XCAM_RETURN_NO_ERROR; | 
| } | 
|   | 
| RkAiqAlgoDescription g_RkIspAlgoDescAgamma = { | 
|     .common = { | 
|         .version = RKISP_ALGO_AGAMMA_VERSION, | 
|         .vendor  = RKISP_ALGO_AGAMMA_VENDOR, | 
|         .description = RKISP_ALGO_AGAMMA_DESCRIPTION, | 
|         .type    = RK_AIQ_ALGO_TYPE_AGAMMA, | 
|         .id      = 0, | 
|         .create_context  = create_context, | 
|         .destroy_context = destroy_context, | 
|     }, | 
|     .prepare = prepare, | 
|     .pre_process = pre_process, | 
|     .processing = processing, | 
|     .post_process = post_process, | 
| }; | 
|   | 
| RKAIQ_END_DECLARE |