/* * 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. * */ #ifndef _RK_AIQ_UAPI_IMGPROC_H_ #define _RK_AIQ_UAPI_IMGPROC_H_ #include "base/xcam_common.h" #include "rk_aiq_user_api_common.h" #include "rk_aiq_user_api_sysctl.h" #include "rk_aiq_user_api_awb.h" #include "rk_aiq_user_api_ae.h" #include "rk_aiq_user_api_af.h" #include "rk_aiq_user_api_anr.h" #include "rk_aiq_user_api_ahdr.h" #include "rk_aiq_user_api_adehaze.h" #include "rk_aiq_user_api_alsc.h" #include "rk_aiq_user_api_accm.h" #include "rk_aiq_user_api_a3dlut.h" #include "rk_aiq_user_api_asharp.h" #include "rk_aiq_user_api_agamma.h" #include "rk_aiq_user_api_afec.h" #include "rk_aiq_user_api_aldch.h" #include "rk_aiq_user_api_acp.h" #include "rk_aiq_user_api_abayernr_v2.h" #include "rk_aiq_user_api_acnr_v1.h" #include "rk_aiq_user_api_aynr_v2.h" #include "rk_aiq_user_api_asharp_v3.h" /* ***************************** * Common ***************************** */ typedef enum dayNightScene_e { DAYNIGHT_SCENE_DAY = 0, DAYNIGHT_SCENE_NIGHT = 1, DAYNIGHT_SCENE_INVAL, } dayNightScene_t; typedef struct paRange_s { float max; float min; } paRange_t; typedef enum awbRange_e { AWB_RANGE_0 = 0, AWB_RANGE_1 = 1, AWB_RANGE_INVAL, } awbRange_t; typedef enum aeMode_e { AE_AUTO = 0, AE_IRIS_PRIOR = 1, AE_SHUTTER_PRIOR = 2, } aeMode_t; /* ***************** * (-1000, -1000) (1000, -1000) * ------------------- * | | * | | * | (0,0) | * | | * | | * ------------------- * (1000, 1000) ***************** */ typedef struct paRect_s { int x; int y; unsigned int w; unsigned int h; } paRect_t; typedef enum aeMeasAreaType_e { AE_MEAS_AREA_AUTO = 0, AE_MEAS_AREA_UP, AE_MEAS_AREA_BOTTOM, AE_MEAS_AREA_LEFT, AE_MEAS_AREA_RIGHT, AE_MEAS_AREA_CENTER, } aeMeasAreaType_t; typedef enum expPwrLineFreq_e { EXP_PWR_LINE_FREQ_DIS = 0, EXP_PWR_LINE_FREQ_50HZ = 1, EXP_PWR_LINE_FREQ_60HZ = 2, } expPwrLineFreq_t; typedef enum antiFlickerMode_e { ANTIFLICKER_NORMAL_MODE = 0, ANTIFLICKER_AUTO_MODE = 1, } antiFlickerMode_t; typedef struct frameRateInfo_s { opMode_t mode; unsigned int fps; /* valid when manual mode*/ } frameRateInfo_t; RKAIQ_BEGIN_DECLARE /* ********************************************************** * API of AEC module of V1 ********************************************************** */ /* ***************************** * * Desc: set exposure control mode * Argument: * mode: auto: auto exposure * manual: manual exposure ***************************** */ XCamReturn rk_aiq_uapi_setExpMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode); XCamReturn rk_aiq_uapi_getExpMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode); /* ***************************** * * Desc: set manual exposure * Argument: * gain: * time: * ***************************** */ XCamReturn rk_aiq_uapi_setManualExp(const rk_aiq_sys_ctx_t* ctx, float gain, float time); /* ***************************** * * Desc: set exposure parameter * Argument: * auto exposure mode: * exposure gain will be adjust between [gain->min, gain->max]; * manual exposure mode: * gain->min == gain->max * ***************************** */ XCamReturn rk_aiq_uapi_setExpGainRange(const rk_aiq_sys_ctx_t* ctx, paRange_t *gain); XCamReturn rk_aiq_uapi_getExpGainRange(const rk_aiq_sys_ctx_t* ctx, paRange_t *gain); /* ***************************** * * Desc: set exposure parameter * Argument: * auto exposure mode: * exposure time will be adjust between [time->min, time->max]; * manual exposure mode: * exposure time will be set gain->min == gain->max; * ***************************** */ XCamReturn rk_aiq_uapi_setExpTimeRange(const rk_aiq_sys_ctx_t* ctx, paRange_t *time); XCamReturn rk_aiq_uapi_getExpTimeRange(const rk_aiq_sys_ctx_t* ctx, paRange_t *time); /* ***************************** * * Desc: blacklight compensation * Argument: * on: 1 on * 0 off * areaType: blacklight compensation area * ***************************** */ XCamReturn rk_aiq_uapi_setBLCMode(const rk_aiq_sys_ctx_t* ctx, bool on, aeMeasAreaType_t areaType); /* ***************************** * * Desc: backlight compensation strength,only available in normal mode * Argument: * strength: [1,100] ***************************** */ XCamReturn rk_aiq_uapi_setBLCStrength(const rk_aiq_sys_ctx_t* ctx, int strength); /* ***************************** * * Desc: highlight compensation * Argument: * on: 1 on * 0 off * ***************************** */ XCamReturn rk_aiq_uapi_setHLCMode(const rk_aiq_sys_ctx_t* ctx, bool on); /* ***************************** * * Desc: highlight compensation strength,only available in normal mode * Argument: * strength: [1,100] ***************************** */ XCamReturn rk_aiq_uapi_setHLCStrength(const rk_aiq_sys_ctx_t* ctx, int strength); /* ***************************** * * Desc: set anti-flicker mode * Argument: * mode * ***************************** */ XCamReturn rk_aiq_uapi_setAntiFlickerMode(const rk_aiq_sys_ctx_t* ctx, antiFlickerMode_t mode); XCamReturn rk_aiq_uapi_getAntiFlickerMode(const rk_aiq_sys_ctx_t* ctx, antiFlickerMode_t *mode); /* ***************************** * * Desc: set power line frequence * Argument: * freq * ***************************** */ XCamReturn rk_aiq_uapi_setExpPwrLineFreqMode(const rk_aiq_sys_ctx_t* ctx, expPwrLineFreq_t freq); XCamReturn rk_aiq_uapi_getExpPwrLineFreqMode(const rk_aiq_sys_ctx_t* ctx, expPwrLineFreq_t *freq); /* ********************************************************** * White balance & Color ********************************************************** */ /* ***************************** * * Desc: set white balance mode * Argument: * mode: auto: auto white balance * manual: manual white balance ***************************** */ XCamReturn rk_aiq_uapi_setWBMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode); XCamReturn rk_aiq_uapi_getWBMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode); /* ***************************** * * Desc: lock/unlock auto white balance * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_lockAWB(const rk_aiq_sys_ctx_t* ctx); XCamReturn rk_aiq_uapi_unlockAWB(const rk_aiq_sys_ctx_t* ctx); /* ***************************** * * Desc: set manual white balance scene mode * Argument: * ct_scene: * ***************************** */ XCamReturn rk_aiq_uapi_setMWBScene(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_scene_t scene); XCamReturn rk_aiq_uapi_getMWBScene(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_scene_t *scene); /* ***************************** * * Desc: set manual white balance r/b gain * Argument: * ct_scene: * ***************************** */ XCamReturn rk_aiq_uapi_setMWBGain(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_gain_t *gain); XCamReturn rk_aiq_uapi_getMWBGain(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_gain_t *gain); /* ***************************** * * Desc: set manual white balance color temperature * Argument: * ct: color temperature value [2800, 7500]K * ***************************** */ XCamReturn rk_aiq_uapi_setMWBCT(const rk_aiq_sys_ctx_t* ctx, unsigned int ct); XCamReturn rk_aiq_uapi_getMWBCT(const rk_aiq_sys_ctx_t* ctx, unsigned int *ct); /* ***************************** * * Desc: set color supperssion level * Argument: * level: [0, 100] * ***************************** */ XCamReturn rk_aiq_uapi_setCrSuppsn(const rk_aiq_sys_ctx_t* ctx, unsigned int level); XCamReturn rk_aiq_uapi_getCrSuppsn(const rk_aiq_sys_ctx_t* ctx, unsigned int *level); /* ********************************************************** * Focus & Zoom ********************************************************** */ /* ***************************** * * Desc: set focus mode * Argument: * mode: auto: auto focus * manual: manual focus * semi-auto: semi-auto focus ***************************** */ XCamReturn rk_aiq_uapi_setFocusMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode); XCamReturn rk_aiq_uapi_getFocusMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode); /* ***************************** * * Desc: set focus window * Argument: * ***************************** */ XCamReturn rk_aiq_uapi_setFocusWin(const rk_aiq_sys_ctx_t* ctx, paRect_t *rect); XCamReturn rk_aiq_uapi_getFocusWin(const rk_aiq_sys_ctx_t* ctx, paRect_t *rect); /* ***************************** * * Desc: set focus meas config * Argument: * ***************************** */ XCamReturn rk_aiq_uapi_setFocusMeasCfg(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_algo_meas_t* meascfg); XCamReturn rk_aiq_uapi_getFocusMeasCfg(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_algo_meas_t* meascfg); /* ***************************** * * Desc: set fix mode code * Argument: * ***************************** */ XCamReturn rk_aiq_uapi_setFixedModeCode(const rk_aiq_sys_ctx_t* ctx, unsigned short code); XCamReturn rk_aiq_uapi_getFixedModeCode(const rk_aiq_sys_ctx_t* ctx, unsigned short *code); /* ***************************** * * Desc: lock/unlock auto focus * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_lockFocus(const rk_aiq_sys_ctx_t* ctx); XCamReturn rk_aiq_uapi_unlockFocus(const rk_aiq_sys_ctx_t* ctx); /* ***************************** * * Desc: oneshot focus * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_oneshotFocus(const rk_aiq_sys_ctx_t* ctx); XCamReturn rk_aiq_uapi_trackingFocus(const rk_aiq_sys_ctx_t* ctx); /* ***************************** * * Desc: ManualTriger focus * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_manualTrigerFocus(const rk_aiq_sys_ctx_t* ctx); /* ***************************** * * Desc: vcm config * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_setVcmCfg(const rk_aiq_sys_ctx_t* ctx, rk_aiq_lens_vcmcfg* cfg); XCamReturn rk_aiq_uapi_getVcmCfg(const rk_aiq_sys_ctx_t* ctx, rk_aiq_lens_vcmcfg* cfg); /* ***************************** * * Desc: af serach path record * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_getSearchPath(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_sec_path_t* path); /* ***************************** * * Desc: af serach path record * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_getSearchResult(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_result_t* result); /* ***************************** * * Desc: Focus Correstion * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_FocusCorrestion(const rk_aiq_sys_ctx_t* ctx); /* ***************************** * * Desc: Zoom * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_getZoomRange(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_zoomrange* range); XCamReturn rk_aiq_uapi_setOpZoomPosition(const rk_aiq_sys_ctx_t* ctx, int pos); XCamReturn rk_aiq_uapi_getOpZoomPosition(const rk_aiq_sys_ctx_t* ctx, int *pos); XCamReturn rk_aiq_uapi_setZoomZeroPos(const rk_aiq_sys_ctx_t* ctx, int zero_pos); /* ***************************** * * Desc: Zoom Correstion * Argument: * * ***************************** */ XCamReturn rk_aiq_uapi_ZoomCorrestion(const rk_aiq_sys_ctx_t* ctx); /* ********************************************************** * HDR ********************************************************** */ /* ***************************** * * Desc: set hdr mode * Argument: * mode: * auto: auto hdr mode * manual:manual hdr mode * ***************************** */ XCamReturn rk_aiq_uapi_setHDRMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode); XCamReturn rk_aiq_uapi_getHDRMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode); /* ***************************** * * Desc: set manual hdr strength * this function is active for HDR is manual mode * Argument: * level: [0, 100] * ***************************** */ XCamReturn rk_aiq_uapi_setMHDRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level); XCamReturn rk_aiq_uapi_getMHDRStrth(const rk_aiq_sys_ctx_t* ctx, bool *on, unsigned int *level); /* ********************************************************** * Noise reduction ********************************************************** */ /* ***************************** * * Desc: set/get noise reduction mode * Argument: * mode: * auto: auto noise reduction * manual:manual noise reduction * ***************************** */ XCamReturn rk_aiq_uapi_setNRMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode); XCamReturn rk_aiq_uapi_getNRMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode); /* ***************************** * * Desc: set/get normal noise reduction strength * Argument: * level: [0, 100] * ***************************** */ XCamReturn rk_aiq_uapi_setANRStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level); XCamReturn rk_aiq_uapi_getANRStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level); /* ***************************** * * Desc: set manual spatial noise reduction strength * this function is active for NR is manual mode * Argument: * level: [0, 100] * ***************************** */ XCamReturn rk_aiq_uapi_setMSpaNRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level); XCamReturn rk_aiq_uapi_getMSpaNRStrth(const rk_aiq_sys_ctx_t* ctx, bool *on, unsigned int *level); /* ***************************** * * Desc: set/get manual time noise reduction strength * this function is active for NR is manual mode * Argument: * level: [0, 100] * ***************************** */ XCamReturn rk_aiq_uapi_setMTNRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level); XCamReturn rk_aiq_uapi_getMTNRStrth(const rk_aiq_sys_ctx_t* ctx, bool *on, unsigned int *level); /* ********************************************************** * Dehaze ********************************************************** */ /* ***************************** * * Desc: set/get dehaze mode * Argument: * mode: * auto: auto dehaze, when use auto, equal use rk_aiq_uapi_enableDhz * manual: Manual dehaze, when needs to use manual, please use rk_aiq_uapi_setMDhzStrth * ***************************** */ XCamReturn rk_aiq_uapi_setDhzMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode); XCamReturn rk_aiq_uapi_getDhzMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode); /* ***************************** * * Desc: set/get manual dehaze strength * this function is active for dehaze is manual mode * Argument: * level: [0, 10] * Do not need to use rk_aiq_uapi_enableDhz and rk_aiq_uapi_setDhzMode before use this * ***************************** */ XCamReturn rk_aiq_uapi_setMDhzStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level); XCamReturn rk_aiq_uapi_getMDhzStrth(const rk_aiq_sys_ctx_t* ctx, bool* on, unsigned int* level); /* ***************************** * * Desc: enable dehaze * Argument: * When dehaze enable, dehaze on and para use use IQ xml * When dehaze disable, dehaze off and enhance para use use IQ xml * ***************************** */ XCamReturn rk_aiq_uapi_enableDhz(const rk_aiq_sys_ctx_t* ctx); XCamReturn rk_aiq_uapi_disableDhz(const rk_aiq_sys_ctx_t* ctx); /* ***************************** * * Desc: set/get dark area boost strength * this function is active for normal mode * Argument: * level: [1, 10] * ***************************** */ XCamReturn rk_aiq_uapi_setDarkAreaBoostStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level); XCamReturn rk_aiq_uapi_getDarkAreaBoostStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level); /* ********************************************************** * Image adjust ********************************************************** */ /* ***************************** * * Desc: Adjust image contrast level * Argument: * level: contrast level, [0, 255] ***************************** */ XCamReturn rk_aiq_uapi_setContrast(const rk_aiq_sys_ctx_t* ctx, unsigned int level); XCamReturn rk_aiq_uapi_getContrast(const rk_aiq_sys_ctx_t* ctx, unsigned int *level); /* ***************************** * * Desc: Adjust image brightness level * Argument: * level: brightness level, [0, 255] ***************************** */ XCamReturn rk_aiq_uapi_setBrightness(const rk_aiq_sys_ctx_t* ctx, unsigned int level); XCamReturn rk_aiq_uapi_getBrightness(const rk_aiq_sys_ctx_t* ctx, unsigned int *level); /* ***************************** * * Desc: Adjust image saturation level * Argument: * level: saturation level, [0, 255] ***************************** */ XCamReturn rk_aiq_uapi_setSaturation(const rk_aiq_sys_ctx_t* ctx, unsigned int level); XCamReturn rk_aiq_uapi_getSaturation(const rk_aiq_sys_ctx_t* ctx, unsigned int* level); /* ***************************** * * Desc: Adjust image hue level * Argument: * level: hue level, [0, 255] ***************************** */ XCamReturn rk_aiq_uapi_setHue(const rk_aiq_sys_ctx_t* ctx, unsigned int level); XCamReturn rk_aiq_uapi_getHue(const rk_aiq_sys_ctx_t* ctx, unsigned int *level); /* ***************************** * * Desc: Adjust image sharpness level * Argument: * level: sharpness level, [0, 100] ***************************** */ XCamReturn rk_aiq_uapi_setSharpness(const rk_aiq_sys_ctx_t* ctx, unsigned int level); XCamReturn rk_aiq_uapi_getSharpness(const rk_aiq_sys_ctx_t* ctx, unsigned int *level); /* ***************************** * * Desc: Adjust image gamma ***************************** */ XCamReturn rk_aiq_uapi_setGammaCoef(const rk_aiq_sys_ctx_t* ctx, rk_aiq_gamma_attrib_t gammaAttr); /* ***************************** * * Desc: set gray mode * Argument: * mode : RK_AIQ_GRAY_MODE_CPSL * RK_AIQ_GRAY_MODE_OFF * RK_AIQ_GRAY_MODE_ON * related: rk_aiq_uapi_sysctl_setCpsLtCfg ***************************** */ XCamReturn rk_aiq_uapi_setGrayMode(const rk_aiq_sys_ctx_t* ctx, rk_aiq_gray_mode_t mode); rk_aiq_gray_mode_t rk_aiq_uapi_getGrayMode(const rk_aiq_sys_ctx_t* ctx); /* ***************************** * * Desc: set frame rate * Argument: * frameRateInfo_t : * auto mode: vary fps * manual mode: fixed fps ***************************** */ XCamReturn rk_aiq_uapi_setFrameRate(const rk_aiq_sys_ctx_t* ctx, frameRateInfo_t info); XCamReturn rk_aiq_uapi_getFrameRate(const rk_aiq_sys_ctx_t* ctx, frameRateInfo_t *info); /* ***************************** * * Desc: set mirro & flip * Argument: ***************************** */ XCamReturn rk_aiq_uapi_setMirroFlip(const rk_aiq_sys_ctx_t* ctx, bool mirror, bool flip, int skip_frm_cnt); /* ***************************** * * Desc: get mirro & flip * Argument: ***************************** */ XCamReturn rk_aiq_uapi_getMirrorFlip(const rk_aiq_sys_ctx_t* ctx, bool* mirror, bool* flip); /* ***************************** * * Desc: fec dynamic switch, valid only if aiq hasn't executed the 'prepare' action * Argument: ***************************** */ XCamReturn rk_aiq_uapi_setFecEn(const rk_aiq_sys_ctx_t* ctx, bool en); /* ***************************** * * Desc: set corrective direction of FEC, valid only if aiq hasn't executed the 'prepare' action * Argument: ***************************** */ XCamReturn rk_aiq_uapi_setFecCorrectDirection(const rk_aiq_sys_ctx_t* ctx, const fec_correct_direction_t direction); /* ***************************** * * Desc: The FEC module is still working in bypass state * Argument: ***************************** */ XCamReturn rk_aiq_uapi_setFecBypass(const rk_aiq_sys_ctx_t* ctx, bool en); /* ***************************** * * Desc: the adjustment range of distortion intensity is 0~255 * Argument: ***************************** */ XCamReturn rk_aiq_uapi_setFecCorrectLevel(const rk_aiq_sys_ctx_t* ctx, int correctLevel); /* ***************************** * * Desc: * Argument: ***************************** */ XCamReturn rk_aiq_uapi_setFecCorrectMode(const rk_aiq_sys_ctx_t* ctx, const fec_correct_mode_t mode); /* ***************************** * * Desc: * Argument: ***************************** */ XCamReturn rk_aiq_uapi_setLdchEn(const rk_aiq_sys_ctx_t* ctx, bool en); /* ***************************** * * Desc: the adjustment range of distortion intensity is 0~255 * Argument: ***************************** */ XCamReturn rk_aiq_uapi_setLdchCorrectLevel(const rk_aiq_sys_ctx_t* ctx, int correctLevel); RKAIQ_END_DECLARE #endif